Как обнаружить опечатку в поиске товара и предложить возможные исправления?
-
20-08-2019 - |
Вопрос
Учитывая очень большую базу данных названий продуктов, как бы вы обнаружили возможные опечатки в пользовательских поисковых запросах и предложили возможные исправления (примерно так, как их представляет Google)?
Например.
Пользователь вводит "fork handels" и нажимает "поиск".
Они возвращаются
"Никаких результатов.Ты имел в виду "ручки для вилок"?
Решение
Существует несколько подходов к решению этой проблемы:
- Ведение таблицы самые популярные орфографические ошибки в вашей базе данных.Если вам нужны некоторые распространенные орфографические ошибки: здесь)
- Используя алгоритм, основанный на редактировать расстояние:В теории информации и информатике расстояние редактирования между двумя строками символов - это количество операций, необходимых для преобразования одной из них в другую.Существует несколько различных алгоритмов для определения или вычисления этого показателя.Прочтите Статья в Википедии об алгоритме Левенштейна например.
- Если вы используете Lucene для полнотекстового поиска, вот хорошая статья в котором показано, как реализовать функцию "Ты имел в виду".
- Если вы рассматриваете эту функцию как простое исправление орфографии, вот несколько приятных, очень коротких реализаций на нескольких языках: Как написать Корректор орфографии
Другие советы
Вы могли бы использовать фонетический алгоритм, такие как Саундекс чтобы найти совпадения, которые звучат похоже.
В PostgreSQL есть модуль с именем нечеткое соответствие, с документами, показывающими примеры использования Soundex, Levenshtein, Metaphone и Double Metaphone.
Я уверен, что читал, что Google хранит список того, что пользователь вводит повторно, когда не получает результатов.Вы могли бы сохранить сопоставление этих значений (скажем, если повторно введенная строка начинается с той же буквы).