我有一个记录集如下。
"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条记录 这是一个非常缓慢的过程。
答案 0 :(得分:0)
我使用过这样的东西
from fuzzywuzzy import fuzz
rank = fuzz.ratio("str_1", "str_2")
然后我检查rank > 80
是否继续。这种方法似乎比距离模块更快。