如何在PHP中找到拼写错误的单词?

时间:2010-10-15 06:35:08

标签: php string string-comparison similarity

我会解释我的问题:

我有一个名为country的数据库表。它有两列:IDname

如果我想搜索'paris',但拼错了单词:'pares''e'而不是'i'),我将无法从DB获得任何结果。

我希望系统能够提出可能有助于搜索的类似词语。

所以,我正在寻找帮助,编写一个脚本,从DB中提出包含类似词语的建议:paris,paredes,...等。

5 个答案:

答案 0 :(得分:20)

在PHP中,您应该使用metaphone,它比soundex更准确。

但是你的问题是从数据库中获取数据。你没有提到过DB。在MySQL中,您可以使用SOUNDEX函数。您只需要在

中更改查询中的where子句
...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)

基本上,当你的数据库没有结果时,你需要检查有效数组名称的相似性。

我的想法:

  • 用户搜索某个名称
  • 没有确切的结果
  • 从db
  • 中获取所有名称
  • 使用levenshtein计算用户返回的最准确提示

答案 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