2016-03-29 2 views
1

Я пытаюсь получить оценку лучшего матча, используя difflib.get_close_matches:difflib.get_close_matches ПОЛУЧИТЬ СЧЕТ

import difflib 

best_match = difflib.get_close_matches(str,str_list,1)[0] 

я знаю вариант, чтобы добавить «cutoff» параметра, но не мог узнать, как получить фактический счет после установки порога. Я что-то упустил? Есть ли лучшее решение для соответствия строк Unicode?

+0

Обнаружена отличная библиотека, которая может быстро и точно оценивать сходство между двумя строками - fuzzywuzzy [link] (https://pypi.python.org/pypi/fuzzywuzzy) – Gil

ответ

1

Я обнаружил, что difflib.get_close_matches - это самый простой способ сопоставления строк/нечетких совпадений. Но есть еще несколько более продвинутых библиотек, таких как fuzzywuzzy, как вы упомянули в комментариях.

Но если вы хотите использовать difflib, вы можете использовать difflib.SequenceMatcher, чтобы получить оценку следующим образом:

import difflib 
my_str = 'apple' 
str_list = ['ape' , 'fjsdf', 'aerewtg', 'dgyow', 'paepd'] 
best_match = difflib.get_close_matches(my_str,str_list,1)[0] 
score = difflib.SequenceMatcher(None, my_str, best_match).ratio() 

В этом примере, лучший матч между «яблоком» и в списке есть «обезьяну» и оценка 0,75.

Вы также можете перебрать список и вычислить все баллы, чтобы проверить:

for word in str_list: 
    print "score for: " + my_str + " vs. " + word + " = " + str(difflib.SequenceMatcher(None, my_str, word).ratio()) 

Для этого примера, вы получите следующее:

score for: apple vs. ape = 0.75 
score for: apple vs. fjsdf = 0.0 
score for: apple vs. aerewtg = 0.333333333333 
score for: apple vs. dgyow = 0.0 
score for: apple vs. paepd = 0.4 

Документация для difflib можно найти здесь: https://docs.python.org/2/library/difflib.html

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