我在哪里可以了解有关 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 搜索“您的意思是”算法的更多信息? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

弹性搜索 - 实施“你的意思是”

在哪里可以了解有关 PHP 框架结构的更多信息?

在哪里提交有关 Google Play Games API 的错误报告?

Google Assistant SDK - 操作从 SQL Server 获取信息

什么是ORM?我在哪里可以了解更多信息? [关闭]

我在哪里可以了解语义分析?