使用python进行字符串的模糊匹配

时间:2016-10-24 13:36:07

标签: python-3.4 distance

我有一个记录集如下。

"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条记录 这是一个非常缓慢的过程。

1 个答案:

答案 0 :(得分:0)

我使用过这样的东西

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

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