Как найти похожее слово с ошибкой в ​​PHP? - PullRequest
15 голосов
/ 15 октября 2010

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

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

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

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

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

Ответы [ 5 ]

20 голосов
/ 15 октября 2010

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

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

...where city = '$input_city'

до

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

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

... where city sounds like '$input_city'
9 голосов
/ 15 октября 2010

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

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

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

4 голосов
/ 15 октября 2010

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

Моя идея:

  • Пользователь ищет какое-то имя
  • Нет точных результатов
  • Получить все имена из базы данных
  • Используя Левенштейн вычислить наиболее точный совет для пользователя, чтобы вернуть
2 голосов
/ 15 октября 2010

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

2 голосов
/ 15 октября 2010

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

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

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

...