我在哪里可以了解有关 Google 搜索“您的意思是”算法的更多信息? [复制]
Posted
技术标签:
【中文标题】我在哪里可以了解有关 Google 搜索“您的意思是”算法的更多信息? [复制]【英文标题】:Where can I learn more about the Google search "did you mean" algorithm? [duplicate] 【发布时间】:2011-04-15 09:16:12 【问题描述】:可能重复:How do you implement a “Did you mean”?
我正在编写一个应用程序,我需要类似于 Google 的“您的意思是?”的功能。他们的搜索引擎使用的功能:
是否有可用的源代码,或者我在哪里可以找到可以帮助我自己构建的文章?
【问题讨论】:
你可以google一下,我想... 这是来自 Cuil 的前工程师吗? google是如何形成的?如何搜索互联网? 看类似问题***.com/questions/307291/… 【参考方案1】:您应该查看关于在几行 python 中实现拼写检查器的 Peter Norvigs 文章: How to Write a Spelling Corrector 它还有其他语言(即 C#)实现的链接
【讨论】:
旁白:Peter Norvig 是 Google 的研究总监。 此答案应标记为已接受。 Norvig 的算法解决了 OP 的问题,非常棒,并且它来自 Google。 :)【参考方案2】:AFAIK “你的意思是?”功能不检查拼写。它只会根据谷歌解析的内容为您提供另一个查询。
【讨论】:
不,它会根据拼写错误猜测替代方案。如果您搜索“katie sachoff”,它会出现“您的意思是 katee sackhoff?” 我最近读到一篇文章,其中一位 Google 员工阐述了他们如何拥有世界上最先进的拼写检查器,因为它会以很少有人这样做的方式考虑单词的上下文。 @Alex JL- 他们可能是对的。 @Colin 不知道你的意思——这不是每个拼写检查器都做的吗?检测拼写错误的单词,然后使用启发式方法来猜测您的意思?我的意思是,我拼错了“拼写错误”,而 Firefox 暗示拼写错误、解除拼写、重新拼写等。这不像是人工智能或其他东西。我同意 Google 的观点,他们的工作非常好。 @Alex JL,例如(法语)“Obtue”这个词是一个常见的错误,正确的拼写是“Obtuse”,但由于这个错误真的很常见,谷歌不会说什么关于这个词。或者用英语搜索“alterior”而不是“ulterior”,它被认为是可以的,因为它经常使用。【参考方案3】:一年半前,我参加了一位 Google 工程师举办的研讨会,他们在会上讨论了他们解决此问题的方法。演示者说(至少部分)他们的算法根本没有智能;而是利用他们可以访问的大量数据。他们确定,如果有人搜索“Brittany Speares”,没有点击任何内容,然后再次搜索“Britney Spears”,然后点击了某个东西,我们可以对他们正在搜索的内容有一个公平的猜测,并且可以建议在未来。
免责声明:这可能只是他们算法的一部分
【讨论】:
RE 免责声明:我认为它是/是。这是一种非常安全的方法。我无法想象有人会想出一种算法来搜索充满英文单词的数据库,然后尝试确定查询是否与现有数据相似。【参考方案4】:我会在google bombing 上查看这篇文章。它表明它只是根据之前输入的结果提出答案。
【讨论】:
是的,我认为它可以从其他人将某些搜索更正的内容中学习。例如,如果您搜索“饥饿的人晚餐”,然后单击任何内容并将其更改为“饥饿的人晚餐”,Google 会在下次首次搜索时记录下来。我敢肯定他们还有更多的技巧,比如在某个地方进行传统的拼写检查。【参考方案5】:您可以使用http://developer.yahoo.com/search/web/V1/spellingSuggestion.html,它会提供类似的功能。
【讨论】:
【参考方案6】:您可以查看提供此功能的 Xapian 的源代码,以及许多其他搜索库。 http://xapian.org/
【讨论】:
【参考方案7】:Python 有一个名为 difflib
的模块。它提供了一个名为get_close_matches
的功能。来自 Python 文档:
get_close_matches(word, possibilities[, n][, cutoff])
返回最好的“好”列表 足够”匹配。word 是一个序列 需要紧密匹配的 (通常是一个字符串),和 possibilities 是要匹配的序列列表 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']
这个库能帮到你吗?
【讨论】:
【参考方案8】:我不确定它是否符合您的目的,但带有字典的字符串编辑距离算法对于小型应用程序可能就足够了。
【讨论】:
【参考方案9】:可以在公开的Introduction to Information Retrieval 中找到有关该主题的精彩章节。
【讨论】:
【参考方案10】:你可以使用 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
【讨论】:
一个 N-Gram 索引是我在答案中看到的唯一合理的解决方案,为什么会失败?嗯...除了彼得诺维格的。但是 N-Grams 可以做得很好。 谢谢你 :) N-Grams 是 google 的首选方式...据我所知。【参考方案11】:看看Levenshtein-Automata
【讨论】:
以上是关于我在哪里可以了解有关 Google 搜索“您的意思是”算法的更多信息? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在哪里提交有关 Google Play Games API 的错误报告?