Я пытаюсь использовать Jellyfish для работы с нечеткими строками. Я заметил странное поведение алгоритма jaro_distance.
Ранее у меня были некоторые проблемы с алгоритмом 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
Я определил, почему расчет идет не так. Чтобы рассчитать меру, я считаю правильным следующее:
(7.0/7.0 + 7.0/7.0 + ((7.0 - (3.0/2.0))/7.0) * (1.0/3.0) = 0.9285714285
Критическое число в этом выражении — 3,0. Это число должно представлять собой «количество совпадений (но в другом порядке последовательности)» (википедия). На мой взгляд, в 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
Я ошибаюсь в этом, или что-то не так в функции?