2016-10-24 10 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'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 

Логика, которую я использовал, выполняет трюк, но медленно. Он обрабатывает 150 записей за 1 час , что является очень медленным процессом.

ответ

0

я использовал что-то вроде этого

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

Затем я проверяю, если rank > 80 и продолжить. Этот метод работает быстрее, чем дистанционный модуль.

 Смежные вопросы

  • Нет связанных вопросов^_^