Как «переопределить поиск» или исправить «орфографические ошибки» из базы данных - PullRequest
1 голос
/ 07 мая 2010

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

Спасибо, ребята

Приветствия

Ответы [ 4 ]

1 голос
/ 07 мая 2010

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

Редактировать расстояние

1 голос
/ 07 мая 2010

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

1 голос
/ 07 мая 2010

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

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

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

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

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

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

См. Ссылку для примера.

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

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


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

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

0 голосов
/ 07 мая 2010

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

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

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

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

...