我一直在为投资组合管理工具开发内部网站。有很多文本数据,公司名称等。我对某些搜索引擎能够以“您的意思是:xxxx”快速响应查询的能力印象深刻。
我需要能够智能地进行用户查询,并不仅要响应原始搜索结果,还要响应“您是不是要这么做?” 当有非常可能的替代答案时的响应等
[我正在ASP.NET中开发(VB-不要反对我!)]
更新:好的,如果没有成千上万的“未付费用户”,我该如何模仿呢?
- 为每个“已知”或“正确”术语生成拼写错误并执行查找?
- 还有其他更优雅的方法吗?
我一直在为投资组合管理工具开发内部网站。有很多文本数据,公司名称等。我对某些搜索引擎能够以“您的意思是:xxxx”快速响应查询的能力印象深刻。
我需要能够智能地进行用户查询,并不仅要响应原始搜索结果,还要响应“您是不是要这么做?” 当有非常可能的替代答案时的响应等
[我正在ASP.NET中开发(VB-不要反对我!)]
更新:好的,如果没有成千上万的“未付费用户”,我该如何模仿呢?
Answers:
这是直接来自来源的解释(差不多)
在22:03分钟
值得一看!
基本上,根据Google前CTO Douglas Merrill的说法,它是这样的:
1)您在Google中写了一个(拼写错误的)单词
2)您找不到想要的东西(不要单击任何结果)
3)您意识到自己拼错了单词,因此在搜索框中重写了单词。
4)找到所需的内容(单击第一个链接)
此模式乘以数百万次,显示出最常见的错误拼写和最“常见”的更正。
这样,Google几乎可以即时提供每种语言的拼写校正功能。
这也意味着,如果所有人都在一夜之间开始拼写为“ nigth”,那么google会建议该单词代替。
编辑
@ThomasRutter:道格拉斯将其描述为“统计机器学习”。
他们知道谁更正查询,因为他们知道哪个查询来自哪个用户(使用cookie)
如果用户执行查询,只有10%的用户单击一个结果,而90%的用户返回并键入另一个查询(带有更正的单词),而这次有90%的用户单击一个结果,那么他们知道已经找到了更正。
他们还可以知道这些查询是否是两个不同的“相关”查询,因为它们具有所显示的所有链接的信息。
此外,他们现在将上下文包括在拼写检查中,因此他们甚至可以根据上下文建议不同的单词。
观看此Google Wave演示(@ 44m 06s),该演示显示了如何考虑上下文以自动更正拼写。
在此说明自然语言处理的工作方式。
最后,这是一个很棒的演示,介绍如何将自动机器翻译(@ 1h 12m 47s)添加到混合中。
我在视频中添加了分钟和秒的锚点,以直接跳至内容,如果它们不起作用,请尝试重新加载页面或手动滚动到标记。
我前段时间找到了这篇文章:如何编写拼写校正器,作者是Peter Norvig(Google Inc.的研究主管)。
这是有关“拼写更正”主题的有趣读物。这些示例是使用Python编写的,但是清楚易懂,我认为该算法可以轻松转换为其他语言。
下面是对该算法的简短描述。该算法包括两个步骤,准备和单词检查。
第1步:准备-设置Word数据库
最好的办法是您可以使用实际的搜索词及其出现方式。如果您没有,可以使用大量文本来代替。计算每个单词的出现(受欢迎程度)。
步骤2.单词检查-查找与被检查单词相似的单词
类似意味着编辑距离很短(通常为0-1或0-2)。编辑距离是将一个单词转换为另一个单词所需的最小插入/删除/更改/交换次数。
从上一步中选择最受欢迎的单词,并提出更正建议(如果不是单词本身)。
我的猜测是,他们结合使用了Levenshtein距离算法和他们收集的有关运行搜索的大量数据。他们可以从输入的搜索字符串中拉出一组Levenshtein距离最短的搜索,然后选择结果最多的一组。
通常,生产拼写校正器会使用几种方法来提供拼写建议。一些是:
确定确定是否需要拼写更正的方法。这些可能包括结果不足,结果不够明确或不够准确(根据某种度量)等。然后:
使用大块的文本或字典,其中所有或大部分已知拼写正确。这些可以在网上轻松找到,例如LingPipe。然后,要确定最佳建议,您需要根据几种度量寻找最匹配的单词。最直观的一个是相似字符。通过研究和实验表明,两个或三个字符序列匹配效果更好。(字母和字母)。为了进一步提高结果,请在单词的开头或结尾对比赛进行加权。出于性能原因,将所有这些词索引为三字母组或双字母组,以便在执行查找时转换为n-gram,然后通过哈希表或trie查找。
根据字符位置,使用与潜在的键盘错误相关的试探法。因此,“ hwllo”应为“ hello”,因为“ w”接近“ e”。
使用语音键(Soundex,Metaphone)为单词建立索引并查找可能的更正。实际上,如上所述,这通常比使用n-gram索引返回更差的结果。
在每种情况下,您都必须从列表中选择最佳校正。这可以是距离度量,例如levenshtein,键盘度量等。
对于多词短语,可能只拼错了一个词,在这种情况下,您可以将其余词用作确定最佳匹配的上下文。
使用Levenshtein距离,然后创建一个Metric树(或Slim树)来索引单词。然后运行一个1-Nearest Neighbor查询,您得到了结果。
简单。他们吨数据。他们会针对每个可能的字词提供统计信息,具体取决于查询的频率以及用户查询该字词通常会产生什么变化……因此,当他们看到您为某个搜索字词输入了频繁的拼写错误时,他们会继续提出建议更常见的答案。
实际上,如果拼写错误实际上是搜索频率最高的术语,则算法会选择正确的单词。
关于您的问题,如何在没有大量数据的情况下模仿行为-为什么不使用Google收集的大量数据?下载拼写错误的单词的google搜索结果,然后在HTML中搜索“您的意思是:”。
我猜现在被称为mashup :-)
除了上述答案外,如果您想自己快速实施某些操作,还可以提出以下建议-
您是说说拼写检查吗?如果它是一个拼写检查器,而不是整个短语,那么我有一个有关在python中开发算法的拼写检查的链接。检查此链接
同时,我还在从事包括使用文本搜索数据库的项目。我想这会解决您的问题
有一个特定的数据结构- 三元搜索树 -自然地支持部分匹配和近邻匹配。