使用python模糊匹配字符串



我有一个记录集如下。

"product_id"|"prod_descr"|"status"|"last_upd_time"
"102317"|"TELMINORM CH 40/12.5MG TAB 10'S"|"A"|"2016-08-31 15:02:06.609879"
"99996"|"BECOSTAR TAB 15'S"|"A"|"2016-09-05 18:20:25"
"99997"|"SUPRADYN TABLET15S"|"A"|"2016-09-06 09:05:24"
"120138"|"LASILACTONE 50MG TABLET 10'S"|"A"|"2016-09-07 12:01:05"
"101921"|"TELMA 20MG TABLET 15S"|"A"|"2016-08-31 15:02:06.609879"
"1220"|"ACNESTAR SOAP 75GM"|"A"|"2016-08-31 15:02:06.609879"
"120147"|"AMANTREL CAPSULES 15S"|"A"|"2016-09-09 09:54:35"
"113446"|"VOLIX 0 3MG TABLET 15S"|"A"|"2016-08-31 15:02:06.609879"
"121294"|"maxifer xt syrup "|"A"|"2016-09-29 15:32:40"
"120151"|"PIRITON CS SYRUP 100ML"|"A"|"2016-09-09 14:30:46"
"103481"|"TERBICIP SPRAY 30ML"|"A"|"2016-08-31 15:02:06.609879"
"96175"|"SORBITRATE 5MG TABLET 50S"|"A"|"2016-08-31 15:02:06.609879"

这个集合有一百万张唱片那么大。我想取每条记录(第二个字段),比如第2行"TELMINORM CH 40/12.5MG TAB 10'S",并与其余记录进行模糊比较,并查找是否存在类似的记录集。

一个例子是TELMINORM CH 40/12.5MG TAB 10'S等于TELMINORM CH 40/12.5MG CAP 10'S。片剂/胶囊就是TAB/CAP的意思。在本例中,它是一个重复记录。

因此,为了消除这个,我使用distance模块,然后如果字符串的差异小于5,我将以以下格式写入文件。

TELMINORM CH 40/12.5MG TAB 10'S - TELMINORM CH 80/12.5MG TAB 10'S, TELMINORM CH 40/12.5MG TAB 10'S, TELMINORM CH 40/12.5MG CAP 10'S

我使用的逻辑是做的伎俩,但缓慢。它在1小时内处理150条记录这是个非常缓慢的过程。

我使用了这样的代码

from fuzzywuzzy import fuzz
rank = fuzz.ratio("str_1", "str_2")

然后我检查rank > 80并继续。这个方法似乎比distance模块快。

最新更新