Я объясню свою проблему:
У меня есть таблица базы данных, называемая 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.
Моя идея:
Если вы используете MySQL, вам нужно использовать инструкцию MATCH() AGAINST()
, где MATCH()
получает список столбцов FULLTEXT
разделителями- FULLTEXT
а AGAINST()
присваивается вашей строке, чтобы она соответствовала. Оператор возвращает релевантность вашего соответствия (от 0 до 1), которое вы можете использовать для определения того, следует ли возвращать строки.
Дополнительная информация о сайте MySQL .
Редактировать: звуковые предложения – это хорошие идеи, однако определенные орфографические ошибки полностью изменят произношение слова, и, таким образом, вы не сможете предоставить хорошие предложения, если вы используете этот метод.
Поскольку большинство внутренних методов PHP уже охвачены, вы также можете взглянуть на службу поиска писем Yahoo Boss, ее довольно полезную -> http://developer.yahoo.com/search/boss/boss_guide/Spelling_Suggest.html