Как найти аналогичное слово для PHP с ошибкой?
Я объясню свою проблему:
У меня есть таблица базы данных, называемая country
. Он имеет два столбца: ID
и name
.
Когда я хочу искать 'paris'
, но ошибочно записал слово: 'pares'
('e'
вместо 'i'
), я не получу никакого результата из БД.
Я хочу, чтобы система предлагала похожие слова, которые могли бы помочь в поиске.
Итак, я ищу помощь в написании script, в которой содержатся предложения из базы данных, содержащие похожие слова: paris, paredes,... и т.д.
Ответы
Ответ 1
В PHP вы должны использовать metaphone
, это более точно, чем soundex
.
Но ваша проблема заключается в получении данных из базы данных. Вы не упомянули БД. В MySQL вы можете использовать функцию soundex
. Вам просто нужно изменить предложение where в запросе из
...where city = '$input_city'
к
... where soundex(city) = soundex('$input_city')
или даже лучше вы можете использовать SOUNDS LIKE
как
... where city sounds like '$input_city'
Ответ 2
soundex вернет числовой код для слова, представляющего его звук. Слова, похожие на звук, будут иметь одинаковый код soundex. У вас может быть таблица со словами и их звуковыми кодами, которые вы могли бы использовать для поиска похожих звуковых слов. Затем вы можете отсортировать их, используя расстояние levenshtein.
Если вы ищете что-то более простое, и вы просто хотите обрабатывать опечатки в ваших запросах БД, вы можете сделать
select * from country where city SOUNDS LIKE 'Paris'
вместо select * from country where city='Paris'
Ответ 3
В основном вам нужно проверить сходство с допустимым массивом имен, когда вы не получили никаких результатов из своего db.
Моя идея:
- Поиск пользователя по имени
- Нет точных результатов
- Получить все имена из db
- Используя levenshtein подсчитайте наиболее точную подсказку для возврата пользователем
Ответ 4
Если вы используете MySQL, вам понадобится инструкция MATCH() AGAINST()
, где MATCH()
будет предоставлен список столбцов FULLTEXT
с разделителями-запятыми, а AGAINST()
будет присвоена ваша строка. Оператор возвращает релевантность вашего соответствия (от 0 до 1), которое вы можете использовать для определения того, следует ли возвращать строки.
Подробнее о сайте MySQL.
Редактировать: звуковые предложения - это хорошие идеи, однако некоторые орфографические ошибки полностью изменят произношение слова, и поэтому вы не сможете предоставить хорошие предложения, если вы используете этот метод.
Ответ 5
Так как большинство внутренних методов PHP уже покрыты, вы также можете взглянуть на службу обслуживания орфографии Yahoo Boss, ее довольно полезную → http://developer.yahoo.com/search/boss/boss_guide/Spelling_Suggest.html