Существуют ли какие-либо алогрифы сравнения строк, которые "лучше", чем расстояние Левенштейна? - PullRequest
4 голосов
/ 13 февраля 2011

Я использовал его для проекта, над которым я работаю, но некоторые результаты не те, что я выбрал бы. Например:

Когда «Дата» сравнивается с

  1. «Государство» имеет левое расстояние 2
  2. «Сегодняшняя дата» имеет левую дистанцию ​​9

Это то, что мы ожидаем от алгоритма, конечно, но мне любопытно, если кто-нибудь знает что-то там, что даст более близкое соответствие любым сравниваемым строкам, которые имеют точное совпадение исходной строки (Дата)? Это означает, что «сегодняшняя дата» будет иметь более высокий рейтинг, потому что в ней есть «дата».

Бонусные баллы, если вы можете найти библиотеку .NET, которая реализует это.

Ответы [ 3 ]

2 голосов
/ 13 февраля 2011
1 голос
/ 13 февраля 2011

Я думаю, что это значит, что вы должны обозначить это слово перед использованием Левенштейна. В качестве альтернативы есть расстояние Jaro-Winker .

Есть библиотека .net SimMetrics , которая, кажется, охватывает несколько альтернатив .

0 голосов
/ 13 февраля 2011

Чтобы сделать это правильно, вам нужен некоторый контекст использования

Если вы пытаетесь выполнить поиск адреса, то у «Nosuch STREET» может быть идеальное совпадение с «Nosuch ROAD», или в списке «не летать» вы хотите, чтобы все 20 написаний Gadaffi совпадали.

если вы пытаетесь проанализировать, насколько изменился фрагмент исторического текста при копировании, вам нужен другой алгоритм,

...