2016-10-24 67 views
0

我有一个记录集如下。使用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'STELMINORM 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

我已经使用了这样的事情

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

然后我检查rank > 80和继续。这种方法似乎比距离模块更快。