可能是重复问题:
谷歌“你是不是想找”的算法是如何工作的?
假设您已经在网站上拥有一个搜索系统。如何实现Google在某些搜索查询中所做的“你是不是想找:<spell_checked_word>
”功能?
可能是重复问题:
谷歌“你是不是想找”的算法是如何工作的?
假设您已经在网站上拥有一个搜索系统。如何实现Google在某些搜索查询中所做的“你是不是想找:<spell_checked_word>
”功能?
实际上,Google所做的是非常不平凡且一开始令人感到反直觉的。他们并不像检查词典那样进行任何操作,而是利用统计学来识别“相似”的查询,这些查询返回的结果比您的查询更多,具体算法当然不为人知。
这里有不同的子问题需要解决,作为与所有自然语言处理统计学相关的基本基础,必须拥有的一本书是:《统计自然语言处理基础》。
具体来说,为了解决单词/查询相似性问题,我使用编辑距离取得了良好的效果,这是一种数学测量字符串相似性的方法,它的表现出乎意料地好。我曾经使用Levenshtein,但其他算法可能也值得考虑。
Soundex - 按我的经验 - 是垃圾。
实际上,有效地存储和搜索大量拼写错误的单词字典并在子秒级别内检索是非常不平凡的,您最好利用现有的全文索引和检索引擎(即不是数据库的索引和检索引擎),其中Lucene目前是最好的,并巧合地被移植到了许多平台。
谷歌的Norvig博士概述了它是如何工作的;他甚至给出了一个约20行的Python实现:
http://googlesystem.blogspot.com/2007/04/simplified-version-of-googles-spell.html
http://www.norvig.com/spell-correct.html
Norvig博士在这个精彩的演讲中也讨论了“你是否意味着”。Norvig博士是Google的研究主管-当被问及“你是否意味着”是如何实现时,他的答案是权威的。
因此,它是拼写检查,可能使用从其他搜索甚至实际互联网短语等构建的动态字典。但这仍然是拼写检查。
SOUNDEX和其他猜测没有得到考虑,人们!
请查看this维基百科上关于Levenshtein距离的文章。确保您仔细阅读可能的改进。
我很惊喜有人询问如何为搜索引擎创建先进的拼写建议系统。我在一家搜索引擎公司研究这个主题已经超过一年了,我可以指出公共领域中关于该主题的信息。
正如之前的帖子中提到的,Google(还有Microsoft和Yahoo!)不使用任何预定义的词典,也没有大量的语言学家考虑可能的查询拼写错误。这是不可能的,因为问题的规模非常大,而且人们无法确定查询是否拼写错误。
相反,有一个简单而相当有效的原则,对所有欧洲语言都适用。获取搜索日志上的所有唯一查询,在假定参考查询为计数最高的查询的情况下,计算所有查询对之间的编辑距离。
这个简单的算法对许多类型的查询都非常有效。如果您想将其提升到下一个级别,那么我建议您阅读Microsoft Research关于该主题的论文。您可以在这里找到它。
这篇论文有一个很棒的介绍,但之后您需要了解隐马尔可夫模型等概念。
我相信谷歌会记录所有的搜索请求,并且会识别出当有人进行拼写更正时。这个更正可能会在其他人提供相同的第一个查询时建议使用。实际上,这对于任何语言,事实上是任何字符的字符串都适用。