Нужно больше понимать частичное соотношение python fuzz

Я использую python fuzzywuzzy на уровне предприятия для сопоставления двух строк. В большинстве случаев он отлично работает, но дает неожиданные результаты в приведенном ниже сценарии:

fuzz.partial_ratio('ja rule:mesmerize','ja rule feat. ashanti:mesmerize') gives output 65

а также

fuzz.partial_ratio('ja rule:mesmerize','jennifer lopez feat. ja rule:im real ') gives the output 67

Любое объяснение того, почему оценка пушистости во втором матче лучше, чем в первом?

Любая помощь/предложение приветствуется.


person Sains    schedule 13.12.2018    source источник


Ответы (1)


fuzzywuzzy использует расстояние Левенштейна, что означает, что он сравнивает все символы, включая пробелы и такие символы, как ':'.

partial_ratio сравнивает две строки, но допускается обрезать более длинную строку до длины более короткой строки.

В вашем случае более короткая строка - 'ja rule:mesmerize' с длиной 17. При сравнении строки более длинная строка обрезается до этого размера.

Имея в виду эту информацию, давайте сравним ваши результаты. Мы видим, что первая длинная строка не имеет : в конце 'ja rule', а вторая имеет. Есть много возможных других факторов, но это может быть основной причиной вашего результата.

Я уверен, что более тщательный анализ даст больше информации о счете. Реализация patial_ratio находится здесь https://github.com/seatgeek/fuzzywuzzy/blob/master/fuzzywuzzy/fuzz.py#L34.

person James Parker    schedule 13.12.2018
comment
Спасибо за объяснение! - person Sains; 14.12.2018
comment
[Октябрь 2020 г.] Более длинная строка не обрезается. Он просто переключает их по ссылке на github выше. - person RAbraham; 02.10.2020