2010-08-30 3 views
5

Каков наилучший алгоритм для ближайшего слова.Каков наилучший алгоритм для ближайшего слова

Дано заданное слово слова и первые символы во входном слове могут быть неправильными.

+2

Почему только первые символы могут быть неправильными? – Leonid

+3

Не могли бы вы сначала дать свое определение «ближайший»? – FrustratedWithFormsDesigner

+0

Я имею в виду, что первые символы могут быть неправильными. – Avinash

ответ

7

Одним из вариантов является BK-деревья - см. Мой пост в блоге о их here. Другой, более быстрый, но более сложный вариант - это Levenshtein Automata, о котором я также писал, here.

+0

Я использую Hunspell, и он возвращает 10 результатов, таких как «дыра», «привет», «помощь», «герой» и т. Д., Когда я вводил «helo». Я ожидаю только «привет», что делает Google, когда я ищу «helo». Теперь это также основано на статистических данных, или просто изменить расстояние может быть достаточно, чтобы предложить только «привет»? – SexyBeast

4

Есть такие инструменты, как HunSpell (open-source spell-checker широко, включая OpenOffice), которые подошли к проблеме с нескольких точек зрения. Одним из широко используемых критериев для определения того, насколько близки слова, является Levenshtein distance, который также используется в HunSpell.

3

Вы можете использовать BLAST

и изменить его, чтобы использовать тот факт, что слова в словаре являются дискретными единицами, что делает процесс согласования более конкретными в отличии от строки длинной ДНК.

BLAST уже встроил в него понятие дистанций редактирования.

В качестве альтернативы можно использовать суффикс деревья (Dan Gusfeld имеет отличную книгу по основным алгоритмам строка соответствия) и построить в идее редактирования расстояний в