你怎么实现“你的意思是”?

30583 次浏览

我建议您查看 SOUNDEX,以便在数据库中找到类似的单词。

你也可以访问谷歌自己的字典使用 Google API 拼写建议请求

Soundex 很适合拼音匹配,但最适合人名(它最初是为人口普查数据开发的)

Also check out Full-Text-Indexing, the syntax is different from Google logic, but it's very quick and can deal with similar language elements.

Soundex 和“ Porter 词干分析”(Soundex 是微不足道的,不确定 Porter 词干分析)。

检查维基百科上关于莱文斯坦距离的 这个文章,确保你看到了可能的改进。

事实上,谷歌的所作所为非常重要,而且一开始也是违反直觉的。它们不会做任何类似于检查字典的事情,而是利用统计数据来识别“相似”的查询,这些查询返回的结果比查询返回的结果多,确切的算法当然是未知的。

这里有不同的子问题需要解决,作为自然语言处理相关统计的基础,有一个必须有一本书: 统计自然语言处理基础

具体来说,为了解决单词/查询相似性的问题,我使用了 Edit Distance,这是一个字符串相似性的数学度量,效果出奇的好。我以前用过 Levenshtein,但其他地方可能值得一查。

根据我的经验,Soundex 是垃圾。

实际上,有效地存储和搜索大量拼写错误的单词并进行亚秒级检索也是非常重要的,你最好的选择是利用现有的全文索引和检索引擎(即不是你的数据库的引擎) ,其中 Lucene目前是最好的之一,并且巧合地移植到许多平台上。

如果你有特定行业的翻译,你可能需要一个辞典。例如,我在珠宝行业工作,我们的描述中有缩写,比如 kt-karat,rd-round,cwt-carat weight... Endeca (那个工作的搜索引擎)有一个同义词词库,可以翻译常见的拼写错误,但它确实需要人工干预。

我认为这取决于你的网站有多大。在我们大约500名员工使用的本地 Intranet 上,我只是查看返回0个结果的搜索短语,然后将带有新建议搜索短语的搜索短语输入到 SQL 表中。

如果没有搜索结果返回,我会调用这个表,但是,这只有在网站相对较小的情况下才有效,而且我只搜索最常见的搜索短语。

你可能还想看看我对一个类似问题的回答:

你可能想看看彼得 · 诺维格的“ 如何写拼写纠正程序”文章。

I believe Google logs all queries and identifies when someone makes a spelling correction. This correction may then be suggested when others supply the same first query. This will work for any language, in fact any string of any characters.

谷歌的 Norvig 博士已经概述了它的工作原理; 他甚至给出了一个20多行的 Python 实现:

Http://googlesystem.blogspot.com/2007/04/simplified-version-of-googles-spell.html

Http://www.norvig.com/spell-correct.html

Dr Norvig also discusses the "did you mean" in this excellent talk. Dr Norvig is 研究主管 at Google - when asked how "did you mean" is implemented, his answer is < em > 权威 .

因此,它的拼写检查,大概与一个动态字典建立从其他搜索,甚至实际互联网短语等。但那还是 拼写检查

SOUNDEX 和其他猜测都不能看,伙计们!

有个叫做阿斯佩尔的东西可能会有帮助: Http://blog.evanweaver.com/files/doc/fauna/raspell/classes/aspell.html

有一颗红宝石,但我不知道怎么跟蟒蛇说话 Http://blog.evanweaver.com/files/doc/fauna/raspell/files/readme.html

Here's a quote from the ruby implementation

Usage

拼写检查允许你检查单词并建议更正。例如:

  string = "my haert wil go on"


string.gsub(/[\w\']+/) do |word|
if !speller.check(word)
# word is wrong
puts "Possible correction for #{word}:"
puts speller.suggest(word).first
end
end

产出:

对 Haert 的可能修正: 心脏 Wil 可能的修正: 威尔

为搜索引擎实现有效的拼写修正并非易事(你不能仅仅计算每个可能的单词的编辑/莱文斯坦距离)。基于 k-gram 索引的解决方案在 信息检索入门(在线提供全文)中进行了描述。

我用的是 LuceneSpell Checker

喜欢·一个人有人问我如何为搜索引擎创建一个最先进的拼写建议系统。我已经为一家搜索引擎公司从事这方面的工作一年多了,我可以指出这方面的公共领域的信息。

正如在之前的文章中提到的,谷歌(以及微软和雅虎)不使用任何预定义的字典,也不雇佣大量的语言学家来思考可能的拼写错误。这将是不可能的,因为问题的规模,但也因为它不清楚,人们实际上可以正确识别时,以及如果查询拼写错误。

相反,有一个简单而有效的原则,也适用于所有欧洲语言。获取搜索日志中的所有唯一查询,计算所有查询对之间的编辑距离,假设引用查询是计数最高的查询。

这个简单的算法对于许多类型的查询都非常有效。如果你想把它带到下一个层次,那么我建议你阅读微软研究院关于这个主题的论文。你可以找到它 给你

The paper has a great introduction but after that you will need to be knowledgeable with concepts such as the Hidden Markov Model.

可以使用 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[1], "\t", i[0]

你得到:

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

为什么不使用谷歌的你的意思是在你的代码。为什么看到这里 http://narenonit.blogspot.com/2012/08/trick-for-using-googles-did-you-mean.html