2016-10-24 105 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和繼續。這種方法似乎比距離模塊更快。