Использование нечеткого wuzzy для сопоставления имен (Проблема!) Не работает должным образом? - PullRequest
2 голосов
/ 29 февраля 2020

Я хочу назвать матч соответствующим образом, но, как видно ниже, это не тот матч, который я хотел, есть ли способ обойти это? Я просто хочу, чтобы г-н Марк Лонгфилд был более предпочтительным, чем г-н Лоуренс Боуд, так как это, скорее всего, будет правильное совпадение.

from fuzzywuzzy import fuzz, process

str = 'Mr Lonfield'
L = list('Mr Laurence Boode', 'Mr Mark Longfield')
print(process.extractOne(str, L))

Output: ('Mr Laurence Boode', 86)

Это больше связано со структурой списка и строками, чем с чем-либо еще? , Поэтому, если бы я убрал имя людей, конечно, я бы с большей вероятностью соответствовал им, но я бы предпочел иметь их полное имя.

1 Ответ

2 голосов
/ 03 марта 2020

Для чего бы это ни стоило, следующий результат даст ожидаемый матч:

print(process.extractOne(str, L, scorer=fuzz.token_set_ratio))

В этом случае вы получите:

('Mr Mark Longfield', 79)

В этом сценарии оценка Лоуренса Буда равна 43 .

Я говорю за то, что оно стоит , потому что я не смог найти подробностей о том, как это работает, за исключением просмотра исходного кода (ссылка ниже).

Кроме того, вам, конечно, нужно проверить, насколько хорошо это работает для вашей большой группы населения.

Существуют и другие варианты с оценщиком, с которыми вы можете протестировать. Один из них может быть даже лучше подходит. Подробнее см. здесь .

Я использовал token_set_ratio в Java порту этой библиотеки некоторое время go, для сопоставления названий mov ie. Если я помню, это работало достаточно хорошо для моих нужд, но были определенные случаи, когда я получал ложные срабатывания - но это было связано с природой некоторых названий mov ie. Это, вероятно, не относится к вашему сценарию.

Надеюсь, это поможет.

Обновление

Некоторые заметки из комментариев в источнике:

A token_set - это набор alphanumeri c токены в строке (расщепление по пробелам).

Функции:

token_set_ratio : Возвращает меру сходства последовательностей между 0 и 100.

token_sort_ratio : возвращает меру сходства последовательностей от 0 до 100, но сортирует токены перед сравнением.

part_ratio : возвращает соотношение самой похожей подстроки в виде числа от 0 до 100.

partal_token_set_ratio : возвращает отношение наиболее похожей подстроки в виде числа от 0 до 100.

partal_token_sort_ratio : Возвращает отношение наиболее похожей подстроки в виде числа от 0 до 100, но сортирует токены перед сравнением.

В * есть несколько дополнительных примеров использования 1062 * портовая документация Тион.

...