我一直在为一个投资组合管理工具开发一个内部网站。有很多文本数据,公司名称等。我对一些搜索引擎的能力印象深刻,它们可以非常快速地回答“你的意思是:xxxx”。

我需要能够智能地接受用户的查询,并不仅响应原始搜索结果,而且还响应“您的意思是?”当有一个极有可能的替代答案等

我正在开发ASP。NET (VB -别跟我过不去!)]

更新: 好吧,在没有数百万“付费用户”的情况下,我该如何模仿这种模式?

为每个“已知”或“正确”的术语生成拼写错误并执行查找? 还有其他更优雅的方法吗?


当前回答

简单。他们有大量的数据。他们有每一个可能的术语的统计数据,基于它被查询的频率,以及它的什么变化通常会产生用户点击的结果……因此,当他们看到你在搜索词中经常拼写错误时,他们会提出更常见的答案。

实际上,如果拼写错误实际上是搜索频率最高的词,算法就会把它当成正确的词。

其他回答

这是我找到的最好的答案,由谷歌的研究总监Peter Norvig实施和描述的拼写纠正器。

如果你想了解更多这背后的理论,你可以阅读他书中的章节。

该算法的思想基于统计机器学习。

几年前我在这方面看到过一些东西,所以可能已经改变了,但显然他们是通过分析相同用户在短时间内提交非常相似的查询的日志开始的,并根据用户如何纠正自己使用机器学习。

使用Levenshtein距离,然后创建一个度量树(或Slim树)来索引单词。 然后运行1-Nearest Neighbour查询,就得到了结果。

关于你的问题,如何在没有大量数据的情况下模仿行为——为什么不使用谷歌收集的大量数据呢?下载谷歌的sarch结果拼写错误的单词,并搜索“Did you mean:”在HTML中。

我猜现在这叫做混搭:-)

我的猜测是,他们使用了Levenshtein距离算法和他们收集的大量关于正在运行的搜索数据的组合。他们可以提取一组与输入的搜索字符串的Levenshtein距离最短的搜索,然后选择结果最多的搜索。