Выбор Левенштейна против Яро Винклера? - PullRequest
4 голосов
/ 09 мая 2020

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

Примеры:

facebook vs facebo0k.com
linkedIn vs linkedln.com
stackoverflow vs stckoverflow

Мне интересно, если для простая цель сравнения двух строк и обнаружения тонких вариаций, оба алгоритма соответствуют этой цели, поэтому нет дополнительной ценности в выборе одного по сравнению с другим, если это не для повышения производительности?

Ответы [ 3 ]

1 голос
/ 28 августа 2020

Алгоритм Смита-Уотермана , вероятно, будет более адаптирован к вашей задаче, поскольку он позволяет вам определить функцию оценки, которая будет отражать то, что вы считаете «сходством» между персонажами (для instance O очень похож на 0 et c). Я думаю, что у него есть то преимущество, что вы можете определить свою собственную функцию оценки, что не обязательно относится к ванильной версии других алгоритмов, которые вы представляете.

Этот алгоритм широко используется в биоинформатике, где биологи попытайтесь обнаружить последовательности ДНК, которые могут быть разными, но иметь одинаковые или очень похожие функции (например, что AGC кодирует тот же белок, что и GTA).

Алгоритм работает в квадрате c время с использованием динамического c программирования, и его довольно легко реализовать.

1 голос
/ 27 августа 2020
• 1000 1002 *.) Будет ниже.
0 голосов
/ 30 августа 2020

Если вы рассматриваете только расстояния Левенштейна или Яро-Винклера, тогда вы, вероятно, захотите go с помощью Яро-Винклера, поскольку он учитывает только совпадающие символы и любые требуемые транспозиции (замена символов) и является значением между ноль и единица и будет равно 1 (нет сходства), если нет близко совпадающих символов (что упрощает фильтрацию любых очевидных несоответствий).

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

Однако Яро-Винклер придает дополнительный вес префиксному сходству (совпадающие символы в начале строк) . Если это нежелательно, возможно, вам нужно обычное расстояние Джаро.

...