2011-12-06 2 views
0

Есть ли более точный алгоритм, чем алгоритм «Левенштейн расстояния»? http://en.wikipedia.org/wiki/Levenshtein_distanceНасколько похожи эти два слова

+1

Это зависит от того, как вы определяете точность. –

+2

Почему Levenshtein вам не подходит? – kol

+0

Какое понятие подобия вы после? Не зная, чего вы хотите, невозможно предложить другие меры. –

ответ

4

Существует Damerau–Levenshtein distance, который добавляет поддержку символьных транспозиций и обеспечивает больший охват для общих опечаток.

Чтобы получить процент сходства для Левенштейн или Damerau-Левенштейна сделать что-то вроде этого:

int relative_similarity = 1.0 - 1.0/((len(x) + len(y))/2) * lev(x, y); //untested 

В качестве альтернативы вы можете взглянуть на longest common subsequence как метрики подобия.

Далее есть

которые являются фонетические алгоритмы согласования.

Хотя Smith и его немецкий коллега Schmidt бы оказаться совершенно иным использованием редактирования расстояния (a.k.a Левенштейн), Саундэкс и Metaphone рассмотрит их фонетически сходные или даже эквивалентны.


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

+0

Дамеру-Левенштейн расстояние более точно, чем (классический) Левенштейн
Levenshtein возвращает плохие результаты с помощью слов сортировки –

+0

@AymanJitan: Damerau-Levenshtein также не является истинной метрикой текста (так как он не соответствует неравенству треугольника), что в случае BKTrees, например может быть довольно плохой. Без того, чтобы вы давали нам больше информации о том, что не так с общими алгоритмами, невозможно дать полезные рекомендации. «Подобный» может означать почти что угодно: wordlength, wordhape, фонетика, смысловое значение, ... – Regexident

Смежные вопросы