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

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

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

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

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


当前回答

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

其他回答

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

有一种特定的数据结构——三元搜索树——自然地支持部分匹配和近邻匹配。

这是一个老问题,我很惊讶没有人建议OP使用Apache Solr。

Apache Solr是一个全文搜索引擎,除了许多其他功能,还提供拼写检查或查询建议。从文档中可以看到:

默认情况下,Lucene拼写检查器首先根据 分由弦距计算和秒由频 (如有)在索引内的建议。

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

最简单的方法是动态规划。

这是一种从信息检索中借来的算法,在现代生物信息学中大量使用,以查看两个基因序列有多相似。

最优解采用动态规划和递归。

这是一个已经解决的问题,有很多解决方案。在你找到一些开源代码之前,一直在你的周围打转。