Как найти аналогичное слово для 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.

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