Как найти похожее слово для неправильно написанного в PHP?

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

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

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

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

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

5 ответов


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

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


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

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

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


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

мои мысли:

  • пользователь ищет имя
  • нет точных результатов
  • получить все имена из db
  • используя Левенштейна рассчитать наиболее точный совет для пользователя, чтобы вернуть

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

подробнее о сайт MySQL.

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


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