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

如何在PHP中为拼写错误的单词找到相似的单词?,php,string,string-comparison,similarity,Php,String,String Comparison,Similarity,我会解释我的问题: 我有一个名为country的数据库表。它有两列:ID和name 当我想搜索'paris',但拼错了单词:'pares'('e'而不是'I')时,我不会从DB得到任何结果 我希望系统能提供类似的词语,以帮助搜索 所以,我正在寻找帮助,写一个脚本,从数据库中提出建议,其中包含类似的词,如:巴黎,帕雷德斯。。。等等。基本上,当数据库没有结果时,您需要根据有效的名称数组检查相似性 我的想法是: 用户正在搜索某个名称 没有确切的结果 从数据库中获取所有名称 使用“计算用户返回的最精确

我会解释我的问题:

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

当我想搜索
'paris'
,但拼错了单词:
'pares'
'e'
而不是
'I'
)时,我不会从DB得到任何结果

我希望系统能提供类似的词语,以帮助搜索


所以,我正在寻找帮助,写一个脚本,从数据库中提出建议,其中包含类似的词,如:巴黎,帕雷德斯。。。等等。

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

我的想法是:

  • 用户正在搜索某个名称
  • 没有确切的结果
  • 从数据库中获取所有名称
  • 使用“计算用户返回的最精确提示”
    • 将返回表示其声音的单词的数字代码。发音相似的单词将具有相同的soundex代码。您可以有一个包含单词及其soundex代码的表格,您可以使用这些代码查找类似发音的单词。然后,您可以使用它们的距离对它们进行排序

      如果您正在寻找更简单的方法,并且只想处理DB查询中的打字错误,那么您可以这样做

      select*from country where city='Paris'
      而不是
      select*from country where city='Paris'

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

      但是你的问题是从数据库中获取数据。你没有提到DB。在MySQL中,您可以使用该函数。您只需要更改查询中的where子句

      ...where city = '$input_city'
      

      或者更好的是,您可以使用运算符作为

      ... where city sounds like '$input_city'
      

      如果您使用的是MySQL,则需要使用
      MATCH()对()
      语句,其中
      MATCH()
      给出了一个以逗号分隔的
      全文
      列列表,而
      对()
      给出了要匹配的字符串。该语句返回匹配项的相关性(介于0和1之间),可用于确定是否返回行

      更多信息请访问


      编辑:声音建议是好主意,但是某些拼写错误会完全改变单词的发音,因此如果使用这种方法,您可能无法提供好的建议。

      由于大多数PHP内部方法都已经介绍过,您还可以查看Yahoo Boss拼写建议服务,它非常有用->

      注意:
      soundex
      适用于英语单词和整数,但其他语言存在问题。@codaddict有没有办法按相关性排序?
      ... where city sounds like '$input_city'