我会解释我的问题:
我有一个名为country
的数据库表。它有两列:ID
和name
。
如果我想搜索'paris'
,但拼错了单词:'pares'
('e'
而不是'i'
),我将无法从DB获得任何结果。
我希望系统能够提出可能有助于搜索的类似词语。
所以,我正在寻找帮助,编写一个脚本,从DB中提出包含类似词语的建议:paris,paredes,...等。
答案 0 :(得分:20)
在PHP中,您应该使用metaphone
,它比soundex
更准确。
但是你的问题是从数据库中获取数据。你没有提到过DB。在MySQL中,您可以使用SOUNDEX
函数。您只需要在
...where city = '$input_city'
到
... where soundex(city) = soundex('$input_city')
甚至更好,您可以使用SOUNDS LIKE
运算符
... where city sounds like '$input_city'
答案 1 :(得分:9)
soundex将返回代表其声音的单词的数字代码。听起来相似的单词将具有相同的soundex代码。您可以拥有一个包含单词及其soundex代码的表格,您可以使用它来查找类似的发音单词。然后,您可以使用levenshtein距离对它们进行排序。
如果您正在寻找更简单的东西而且您只想在数据库查询中处理拼写错误,那么您可以
select * from country where city SOUNDS LIKE 'Paris'
代替select * from country where city='Paris'
答案 2 :(得分:4)
答案 3 :(得分:2)
如果您使用的是MySQL,则需要使用MATCH() AGAINST()
语句,其中MATCH()
以逗号分隔的FULLTEXT
列列表和AGAINST()
给你的字符串匹配。该语句返回匹配的相关性(在0和1之间),您可以使用它来确定是否返回行。
有关MySQL site的更多信息。
编辑:声音建议是好主意,但是某些拼写错误会完全改变单词的发音,因此如果使用该方法,您可能无法提供好的建议。
答案 4 :(得分:2)
由于已经涵盖了大多数PHP内部方法,您还可以查看Yahoo Boss Spelling Suggestion Service,它非常有用 - > http://developer.yahoo.com/search/boss/boss_guide/Spelling_Suggest.html