Я незнаком с строковыми алгоритмами сходства, за исключением Levenshtein Distance, потому что это то, что я использую, и оказалось, что это было не так идеально.Является ли это уже алгоритмом сходства строк?
Итак, у меня есть идея рекурсивного алгоритма, который я хотел бы реализовать, но я хочу знать, существует ли он уже, чтобы я мог использовать опыт других.
Вот алгоритм на примере:
строки 1: "Пол Джонсон"
строка 2: "Джон Полсон"
Шаг 1: найти все самые длинные матчи
Матч 1: "Пол"
Матч 2: "Джон"
Матч 3: "сын"
Матч 4: ""
Шаг 2: Вычислить оценки для каждого матча с этой формулой: ((match.len /string.len)*match.len) Это позволяет более длинным строкам взвешивать более сбалансированную скорость в зависимости от длины строки.
Матч 1: (4/12) * 4 = 1,333 ...
Матч 2: 1,333 ...
Матч 3: .75
матч 4: 0,083
Шаг 3: выполните шаги 1 и 2 на больших весах (совпадения совпадений). Этого я точно не понял. но я думаю, что если «сын» приходит после «Пола Иоанна», и это происходит после «Иоанна Павла», то это должно рассчитывать на что-то.
Шаг 4: суммируйте все оценки, которые были рассчитаны.
результаты: 1,333 + 1,333 + .75 + .083333 = 3,4999 ... (плюс все баллы шаг 3 производит)
ли это выглядеть знакомо любому? Я надеюсь, что кто-то еще столкнулся с проблемой создания алгоритма в этих строках, поэтому мне не нужно это разбираться.
Можете ли вы описать, почему расстояние Левенштейн не является идеальным? – Chris
Вы только подбираете имена людей, или вы соответствуете более общим строкам? – hatchet
@ Крис, в некоторых случаях местное сходство может быть более желательным, чем глобальное несходство. Такое выравнивание в двух последовательностях называется локальным выравниванием последовательностей, в котором вас больше интересует поиск подстрок двух строк, имеющих максимальное сходство. –