Лучший подход, чем FuzzyWuzzy?

Я получаю результат в fuzzywuzzy, который не работает так, как я надеялся. Если в середине есть лишнее слово из-за разницы Левенштейна, оценка ниже.

Пример:

from fuzzywuzzy import fuzz

score = fuzz.ratio('DANIEL CARTWRIGHT', 'DANIEL WILLIAM CARTWRIGHT')
print(score)
score = fuzz.ratio('DANIEL CARTWRIGHT', 'DAVID CARTWRIGHT')
print(score)

score = fuzz.partial_ratio('DANIEL CARTWRIGHT', 'DANIEL WILLIAM CARTWRIGHT')
print(score)
score = fuzz.partial_ratio('DANIEL CARTWRIGHT', 'DAVID CARTWRIGHT')
print(score)

результаты: 81 85 71 81

Я ищу, чтобы первая пара (Дэниел против Дэниела Уильяма) была лучше, чем вторая пара (Дэниел против Дэвида).

Есть ли лучший подход, чем fuzzywuzzy, для использования здесь?


person Caitlin G    schedule 31.07.2018    source источник


Ответы (1)


В вашем примере вы можете использовать token_set_ratio. В документе с кодом говорится, что он принимает отношение пересечения токенов и оставшихся токенов.

from fuzzywuzzy import fuzz

score = fuzz.token_set_ratio('DANIEL CARTWRIGHT', 'DANIEL WILLIAM CARTWRIGHT')
print(score)
score = fuzz.token_set_ratio('DANIEL CARTWRIGHT', 'DAVID CARTWRIGHT')
print(score)

Результат:

100
85
person kevin    schedule 01.08.2018