2010-10-15 3 views
14

Я объясню свою проблему:Как найти аналогичное слово для орфографической ошибки в PHP?

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

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

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

Итак, я ищу помощь, написав сценарий, который делает предложения из БД, которые содержат подобные слова, как: Париж, Паредес, ... и т.д.

ответ

20

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

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

...where city = '$input_city' 

в

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

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

... where city sounds like '$input_city' 
+0

** Примечание **: 'soundex' хорошо для Английские слова и целые числа, но проблемы с другими языками. – Eray

+0

@codaddict Есть ли способ заказать по релевантности? –

4

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

Моя идея: поиск

  • Пользователь некоторое имя
  • Нет точных результатов
  • не извлекает все имена из БД
  • Использование levenshtein вычислить наиболее точный наконечник для пользователя, чтобы вернуть
9

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

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

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

2

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^