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