- •Аннотация
- •Введение
- •Понятие нечеткого поиска и
- •1.1 Четкий и нечеткий поиск: базовые различия
- •1.2 Типичные ошибки ввода данных
- •Области применения нечеткого поиска
- •2. Алгоритмы оценки схожести строк
- •2.1. Расстояние Левенштейна: первый математический метод
- •2.2 Модификация Дамерау-Левенштейна: учет перестановок
- •2.3 Фонетические алгоритмы: Soundex и Mataphone
- •2.4 Метод n-грамм и его роль в индексации
- •Практическое применение нечеткого поиска
- •Нечеткий поиск в поисковых системах
- •3.2 Использование в интернет магазинах и базах данных
- •3.3 Современные тенденции: нейросети и семантический поиск
- •Заключение
- •Список использованных источников
2.2 Модификация Дамерау-Левенштейна: учет перестановок
Спустя несколько лет после работы Левенштейна другой ученый - Фредерик Дамерау - предложил модификацию алгоритма. Он обратил внимание, что люди очень часто ошибаются, меняя местами два соседних символа. Классический пример: вместо «КАРТОН» человек печатает «КАТРОН», переставляя «Р» и «Т».
В исходном алгоритме Левенштейна для исправления такой перестановки потребовалось бы две операции (удалить один символ и вставить другой на его место). Дамерау предложил добавить четвертую операцию - транспозицию (перестановку двух соседних символов) — со стоимостью 1.
Таким образом, расстояние Дамерау-Левенштейна стало более точно отражать реальные ошибки пользователей. Для примера со словами «КАРТОН» и «КАТРОН» классическое расстояние Левенштейна равно 2, а расстояние Дамерау-Левенштейна равно 1 (одна перестановка).
Пример. Сравним строки «ПРИВЕТ» и «ПРИВТЕ». Человек, быстро печатая, мог переставить «Т» и «Е». Расстояние Дамерау-Левенштейна покажет 1, что соответствует интуитивному восприятию ошибки.
Сегодня большинство современных информационных систем используют именно модификацию Дамерау-Левенштейна, поскольку она лучше учитывает психомоторику человека при печати. Однако следует отметить, что добавление четвертой операции делает алгоритм немного более сложным и требовательным к вычислительным ресурсам.
2.3 Фонетические алгоритмы: Soundex и Mataphone
Не все ошибки ввода связаны с неправильным написанием букв. Часто человек пишет слово так, как он его слышит. Например, иностранную фамилию «Thompson» можно записать как «Thomson», «Tompson» или даже «Томпсон». В таких случаях методы, основанные на сравнении символов (Левенштейн и его модификации), работают плохо, потому что буквенный состав может сильно различаться при близком звучании.
В начале XX века, задолго до появления компьютеров, для нужд переписи населения США был разработан алгоритм Soundex. Его задача - преобразовывать фамилии в код, который отражает их произношение, а не написание. Однофамильцы, чьи фамилии пишутся по-разному, но звучат похоже, получают одинаковый код.
Принцип работы Soundex.
Алгоритм сохраняет первую букву слова, а затем заменяет следующие согласные буквы на цифры по определенным правилам. Гласные буквы и некоторые согласные (например, H, W, Y) игнорируются. Например:
«Smith» → S530
«Smyth» → S530
Рис. 3. Пример выдачи кодов именам в системе Soundex.
Обе фамилии, звучащие почти одинаково, получают один и тот же код, что позволяет системе найти их при нечетком поиске.
Позже были разработаны более совершенные фонетические алгоритмы, такие как Metaphone и его улучшенная версия Double Metaphone. Они учитывают особенности английского произношения более тонко: различают, например, звуки «S» и «SH», «K» и «S» в зависимости от позиции в слове.
Важное замечание для русского языка: большинство классических фонетических алгоритмов создавались для английского языка. Для русского языка их адаптация сложнее из-за более богатой фонетики и наличия мягких/твердых согласных. Однако существуют отечественные разработки, например, алгоритм, учитывающий озвончение/оглушение согласных («просьба» и «прозьба», «сделать» и «зделать»).
