Подтвердить что ты не робот

Поиск похожих двух строк

Я ищу алгоритм, который принимает 2 строки и вернет мне "коэффициент подобия".

В принципе, у меня будет вход, который может быть орфографическим, перенесены буквы и т.д., и я должен найти самое близкое соответствие (имена) в списке возможных значений, которые у меня есть.

Это не для поиска в базе данных. У меня будет список из 500 или около того строк, которые будут сопоставляться со всеми, менее 30 символов, поэтому он может быть относительно медленным.

Я знаю, что это существует, я видел его раньше, но я не могу запомнить его имя.


Редактировать: Спасибо, что указали Левенштейна и Хэмминга. Теперь, какой я должен реализовать? Они в основном измеряют разные вещи, оба из которых могут использоваться для того, что я хочу, но я не уверен, какой из них более уместен.

Я читал об алгоритмах, Хэмминг кажется явно быстрее. Поскольку ни один из них не обнаружит транспонированных двух символов (например, Иордания и Йодран), которые, я считаю, будут распространенной ошибкой, которая будет более точной для того, что я хочу? Может кто-нибудь мне немного рассказать о компромиссах?

4b9b3361

Ответ 1

Итак, стандартные алгоритмы:

1) Расстояние Хэмминга Только хорош для строк одинаковой длины, но очень эффективен. В основном он просто подсчитывает количество различных символов. Не полезно для нечеткого поиска текста на естественном языке.

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

3) Обобщенный Левенштейн/(расстояние Дамерау-Левенштейн) Это расстояние также учитывает перестановки символов в слове и, вероятно, является расстоянием редактирования, наиболее подходящим для нечеткого соответствия введенного вручную текста. Алгоритм вычисления расстояния немного более активен, чем расстояние Левенштейна (обнаружение транспозиций непросто). Наиболее распространенные реализации - это модификация алгоритма bitap (например, grep).

В общем, вы, вероятно, захотите рассмотреть реализацию третьей опции, реализованной в каком-то поиске ближайшего соседа на основе дерева k-d

Ответ 2

  • Расстояние Левенштейна
  • Расстояние Хэмминга
  • Саундэкс
  • метафон

Ответ 3

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