Как переопределить поиск или исправить опечатку из базы данных

Я хочу добавить новую функцию в поиск на моем сайте. Я использую PHP и MySQL. База данных MySQL, содержащая таблицу с элементами, которые пользователь будет искать, для каждого элемента есть столбец «ключевое слово», в котором ключевые слова разделены запятыми «ПРИМЕР: кошка, собака, лошадь». После пользовательского поиска на моем веб-сайте я хочу получить слова, которые позволяют мне сказать «85%», похожие на его ключевое слово поиска, это для переопределения поиска. И для орфографической ошибки мне нужен сервис или что-то, что обеспечивает правильность ключевого слова или ошибку, поэтому я получаю некоторые исправления и проверяю, существуют ли они в базе данных, а затем даю эти исправления пользователю, чтобы изменить его ключевое слово поиска.

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


person trrrrrrm    schedule 07.05.2010    source источник


Ответы (4)


Ключ в вашей идее «85% похожих». Вот несколько идей:

Таблица похожих слов

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

Поиск похожих слов

При выполнении поиска используйте библиотеку для создания похожих слов и поиска по всем из них. Вы можете использовать любую библиотеку правописания, чтобы сгенерировать возможные совпадения слов перед отправкой поиска. Или напишите свой собственный на основе алгоритма Редактировать расстояние.

Проверяйте только при необходимости. Поскольку вы используете PHP, вы можете использовать pspell. Вы можете сначала позвонить pspell_check, чтобы проверить правильность написания слова. Затем позвоните по номеру pspell_suggest, чтобы получить предложения.

См. пример по этой ссылке.

Используйте функцию базы данных

MySQL, например, имеет оператор SOUNDS_LIKE. Вы можете найти WHERE keyword SOUNDS_LIKE 'kat' и (предположительно) получить cat. Дополнительная информация находится на странице документации, который предупреждает вас о некоторых ограничениях (например, только английский язык и кодировка UTF-8).


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

Первые два должны позволить вам встретить некоторое понятие сходства 85%. Я понятия не имею, насколько хорошо сработает третий вариант, но звучит «круто».

person Geoff    schedule 07.05.2010
comment
Спасибо за ваши решения ... но у меня есть вопрос ... как сначала проверить, написано ли слово с ошибкой, прежде чем искать другое правильное слово? - person trrrrrrm; 07.05.2010
comment
Я добавил ссылку и предложение в разделе Поиск похожих слов. Ознакомьтесь с pspell PHP: us2.php.net/manual/en/function .pspell-suggest.php - person Geoff; 07.05.2010

В PHP есть аналогичная_текст(), но она после запроса; вы также можете проверить полнотекстовый поиск в MySQL.

person Alec    schedule 07.05.2010

Попробуйте изучить алгоритм редактирования расстояния. В основном для двух входных строк возвращаемое значение — это минимальное количество правок, необходимых для преобразования одной строки в другую. Это может дать вам некоторое представление о том, насколько близки две строки.

Изменить расстояние

person Babar    schedule 07.05.2010

Apache Solr — это поисковая платформа с открытым исходным кодом, которая предоставляет не только возможности полнотекстового поиска, но и встроенные системы оценки совпадений и автоматических предложений, а также многие другие мощные функции.

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

Связь между вашим приложением и Solr может осуществляться через стандартный интерфейс REST. Насколько я знаю, на данный момент доступны две хорошие PHP-библиотеки для Solr:

Настройка сервера довольно проста, поскольку это трудоемкая часть (а также интересная) — настройка и оптимизация Solr в соответствии с вашими потребностями.

person nuqqsa    schedule 07.05.2010
comment
Звучит как продакт-плейсмент, а не как практическое предложение простого решения. - person Kzqai; 13.04.2011