Расстояние Левенштейна только на части строки (Java) - PullRequest
3 голосов
/ 06 августа 2010

У меня есть онлайн веб-приложение с деревом верхнего меню для открытия разных виджетов для выполнения разных задач. По мере того как приложение становится все более мощным, это дерево стало большим и с ним стало трудно ориентироваться. Я реализовал функцию поиска, где пользователи могут просто ввести имя меню или его часть, и я использую регулярное выражение, чтобы найти все элементы в дереве меню, которые соответствуют тому, что вводит пользователь. Мое регулярное выражение учитывает частичные слова и замененные слова, а также ограничивает поиск началом каждого слова. Единственное, чего оно не позволяет, - это слова с ошибками. Я понимаю, что для учета слов с ошибками лучше не использовать регулярные выражения, а вместо этого использовать метод расстояния до строки, но я все же хочу разрешить частичное слово и поменять местами слова. Это возможно?

Например, прямо сейчас, если пункт меню «Финансирование ставки», этому пункту меню будет соответствовать любое из следующего: «финансы», «финансы ra», «ставка финансирования» и т. Д. » "не будет соответствовать, потому что" inance "не появляется в начале любого из слов для этого пункта меню. Я хочу, чтобы такие поиски, как "fnane rate" и "rate keeping", были слегка с ошибкой совпадать.

1 Ответ

1 голос
/ 06 августа 2010

Я бы просто прикрепил список слов к каждой опции и одновременно вел бы словарь со всеми словами в нем.Затем, когда пользователь вводит запрос, программа проверяет, находится ли каждое введенное слово в словаре.Если нет, он найдет ближайшее слово через.расстояние до строки и исправьте слово.

Наконец, можно было бы предложить вариант меню, в котором большинство слов совпадает с исправленными входными словами.

Хороший пример корректора орфографии (в pythonхотя) на http://norvig.com/spell-correct.html

...