我正在编写一个应用程序,我需要类似于Google的功能“你的意思是什么?”搜索引擎使用的功能:
是否有可用于此类事情的源代码,或者我在哪里可以找到可以帮助我构建自己的文章?
答案 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)
答案 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)