Intereting Posts
Выполнять запросы и обрабатывать ответы для возобновляемой загрузки: Google Drive api Получить цвет фона ячейки в PhpExcel Как получить родительский элемент? Каков формат заголовков электронной почты, которые отображают имя, а не электронную почту? Проверка наличия имени пользователя в AJAX Настройка upload_max_filesize (и т. Д.) Для больших загрузок файлов Как запросить сводную таблицу с несколькими внешними ключами Laravel 5 Eloquent создание нескольких кнопок с использованием цикла while, но только первая кнопка реагирует при использовании функции .onclick Я хочу добавить 100 лет к отображаемым датам wordpress Добавление, обновление и редактирование XML-файла с помощью PHP как получить значение сессии внутри symfony2 я использую fosuserbundle изменить значение через 24 часа Использование SimpleHtmlDom, как удалить и заменить определенный атрибут Отправить номер, используя форму HTML в Laravel Упорядочить файлы путем создания или изменения с помощью PHP

Как найти аналогичное слово для PHP с ошибкой?

Я объясню свою проблему:

У меня есть таблица базы данных, называемая country . Он имеет две колонки: ID и name .

Когда я хочу искать 'paris' , но ошибочно записал слово 'pares' ( 'e' вместо 'i' ), я не получу никакого результата из БД.

Я хочу, чтобы система предлагала похожие слова, которые могли бы помочь в поиске.

Итак, я ищу помощь при написании скрипта, который предлагает предложения из БД, содержащие похожие слова: paris, paredes, … и т. Д.

В PHP вы должны использовать metaphone более точную, чем soundex .

Но ваша проблема заключается в получении данных из базы данных. Вы не упомянули БД. В MySQL вы можете использовать функцию SOUNDEX . Вам просто нужно изменить предложение where в запросе из

 ...where city = '$input_city' 

в

 ... where soundex(city) = soundex('$input_city') 

или даже лучше, вы можете использовать SOUNDS LIKE оператора как

 ... where city sounds like '$input_city' 

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

Если вы ищете что-то более простое, и вы просто хотите обрабатывать опечатки в ваших запросах БД, вы можете сделать

select * from country where city SOUNDS LIKE 'Paris' вместо select * from country where city='Paris'

В основном вам нужно проверить сходство с действительным массивом имен, когда вы не получили никаких результатов от своего db.

Моя идея:

  • Поиск пользователя по имени
  • Нет точных результатов
  • Получить все имена из db
  • Использование levenshtein вычисляет наиболее точную подсказку для возврата пользователем

Если вы используете MySQL, вам нужно использовать инструкцию MATCH() AGAINST() , где MATCH() получает список столбцов FULLTEXT разделителями- FULLTEXT а AGAINST() присваивается вашей строке, чтобы она соответствовала. Оператор возвращает релевантность вашего соответствия (от 0 до 1), которое вы можете использовать для определения того, следует ли возвращать строки.

Дополнительная информация о сайте MySQL .

Редактировать: звуковые предложения – это хорошие идеи, однако определенные орфографические ошибки полностью изменят произношение слова, и, таким образом, вы не сможете предоставить хорошие предложения, если вы используете этот метод.

Поскольку большинство внутренних методов PHP уже охвачены, вы также можете взглянуть на службу поиска писем Yahoo Boss, ее довольно полезную -> http://developer.yahoo.com/search/boss/boss_guide/Spelling_Suggest.html