我在哪里可以了解更多有关Google搜索“你的意思”算法的信息?

时间:2010-09-21 19:15:20

标签: algorithm nlp spell-checking

  

可能重复:
  How do you implement a “Did you mean”?

我正在编写一个应用程序,我需要类似于Google的功能“你的意思是什么?”搜索引擎使用的功能:

alt text

是否有可用于此类事情的源代码,或者我在哪里可以找到可以帮助我构建自己的文章?

11 个答案:

答案 0 :(得分:125)

你应该查看Peter Norvigs关于在几行python中实现拼写检查的文章: How to Write a Spelling Corrector它还有其他语言(即C#)实现的链接

答案 1 :(得分:28)

一年半前,我参加了一位谷歌工程师的研讨会,在那里他们讨论了他们的方法。主持人说他们的算法(至少部分)根本没有智能;而是利用他们可以访问的大量数据。他们确定,如果有人搜索“Brittany Speares”,点击什么,然后再搜索“Britney Spears”,并点击某些内容,我们可以对他们搜索的内容进行公平猜测,并可以建议将来

免责声明:这可能只是他们算法的一部分

答案 2 :(得分:16)

Python有一个名为difflib的模块。它提供了一个名为get_close_matches的功能。来自Python文档:

  

get_close_matches(word, possibilities[, n][, cutoff])

     

返回最好的“好”列表   足够的“匹配。是一个序列   需要密切匹配的   (通常是一个字符串),和   的可能性是要匹配的序列列表    word (通常是字符串列表)。

     

可选参数 n (默认值   3)是最大关闭数   匹配返回; n 必须是   大于0

     

可选参数 cutoff (默认值   0.6)是范围[0,   1]。不得分的可能性   至少与 word 类似的是   忽略。

     

最佳(不超过 n )匹配   其中包括可能性   在列表中,按相似性排序   得分,最相似的第一。

  >>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
  ['apple', 'ape']
  >>> import keyword
  >>> get_close_matches('wheel', keyword.kwlist)
  ['while']
  >>> get_close_matches('apple', keyword.kwlist)
  []
  >>> get_close_matches('accept', keyword.kwlist)
  ['except']

这个图书馆可以帮助你吗?

答案 3 :(得分:5)

您可以使用http://developer.yahoo.com/search/web/V1/spellingSuggestion.html来提供类似的功能。

答案 4 :(得分:3)

您可以查看提供此功能的Xapian源代码,以及许多其他搜索库。 http://xapian.org/

答案 5 :(得分:3)

我不确定它是否符合您的目的,但字符串编辑距离算法和字典可能足以满足小型应用程序的需要。

答案 6 :(得分:2)

我会在google bombing上看一下这篇文章。它表明它只根据以前输入的结果建议答案。

答案 7 :(得分:1)

答案 8 :(得分:1)

可以在公开的Introduction to Information Retrieval中找到关于这个主题的伟大章节。

答案 9 :(得分:1)

你可以使用ngram进行比较:http://en.wikipedia.org/wiki/N-gram

使用python ngram模块:http://packages.python.org/ngram/index.html

import ngram

G2 = ngram.NGram([  "iis7 configure ftp 7.5",
                    "ubunto configre 8.5",
                    "mac configure ftp"])

print "String", "\t", "Similarity"
for i in G2.search("iis7 configurftp 7.5", threshold=0.1):
    print i[0], "\t", i[1]

你得到:

>>> 
String  Similarity
"iis7 configure ftp 7.5"    0.76
"mac configure ftp  0.24"
"ubunto configre 8.5"   0.19

答案 10 :(得分:1)