我有一个记录集如下。
"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模块快。