Я пытаюсь использовать медузы для работы с нечеткими строками. Я замечаю какое-то странное поведение алгоритма jaro_distance.Особенности поведения Jaro Distance в JellyFish
У меня были некоторые проблемы ранее с алгоритмом damerau_levenshtein_distance, который, как представляется, был ошибкой в коде, который затем пользователь стек ставил как проблему в github.
Я не уверен, что я думаю о мерах неправильно или если это настоящая ошибка. Я посмотрел исходный код (http://goo.gl/YVMl8k), но я не знаком с C, поэтому мне трудно узнать, является ли это проблемой реализации, или я просто ошибаюсь.
Обратите внимание на следующее:
In [1]: S1 = Poverty
In [2]: S2 = Poervty
In [3]: jf.jaro_distance(S3, S4)
Out[3]: 0.95238095
Теперь, если мое понимание Jarrow измерения расстояния является правильным, я считаю, что результат должен быть 0.9285714285
Я определил, почему calcualtion происходит не так. Для того, чтобы вычислить меру я считаю, что followig правильно:
(7.0/7.0 + 7.0/7.0 + ((7.0 - (3.0/2.0))/7.0) * (1.0/3.0) = 0.9285714285
Критическое число в этом выражении является 3,0. Это число должно представлять «Число совпадений (но различный порядок последовательности)» (wikipedia). На мой взгляд, в S1 и S2 символы, которые совпадают, но находятся в порядке последовательности различий, это «e», «r», «v».
Однако JellyFish кажется только определить два транспозиции, как это вычисление:
(7.0/7.0 + 7.0/7.0 + ((7.0 - (2.0/2.0))/7.0) * (1.0/3.0) = 0.95238095
Я прав на это, или есть что-то плохое в функции?
Увлекательный! Я отправил разработчику сообщение об ошибке «Левенштейна», и он вернулся ко мне, я упомянул об этом, поэтому, возможно, он скажет мне, почему они приняли это решение. После того, как я нашел эту проблему, я просто предположил, что это ошибка. Похоже, что источник тестовых чувств должен быть довольно надежным. –