我一直在为一个投资组合管理工具开发一个内部网站。有很多文本数据,公司名称等。我对一些搜索引擎的能力印象深刻,它们可以非常快速地回答“你的意思是:xxxx”。
我需要能够智能地接受用户的查询,并不仅响应原始搜索结果,而且还响应“您的意思是?”当有一个极有可能的替代答案等
我正在开发ASP。NET (VB -别跟我过不去!)]
更新: 好吧,在没有数百万“付费用户”的情况下,我该如何模仿这种模式?
为每个“已知”或“正确”的术语生成拼写错误并执行查找? 还有其他更优雅的方法吗?
我一直在为一个投资组合管理工具开发一个内部网站。有很多文本数据,公司名称等。我对一些搜索引擎的能力印象深刻,它们可以非常快速地回答“你的意思是:xxxx”。
我需要能够智能地接受用户的查询,并不仅响应原始搜索结果,而且还响应“您的意思是?”当有一个极有可能的替代答案等
我正在开发ASP。NET (VB -别跟我过不去!)]
更新: 好吧,在没有数百万“付费用户”的情况下,我该如何模仿这种模式?
为每个“已知”或“正确”的术语生成拼写错误并执行查找? 还有其他更优雅的方法吗?
当前回答
谷歌显然建议搜索结果最好的问题,而不是拼写正确的问题。但在这种情况下,可能拼写纠正器会更可行。当然,您可以为每个查询存储一些值,基于它返回的结果有多好。
So,
You need a dictionary (english or based on your data) Generate a word trellis and calculate probabilities for the transitions using your dictionary. Add a decoder to calculate minimum error distance using your trellis. Of course you should take care of insertions and deletions when calculating distances. Fun thing is that QWERTY keyboard maximizes the distance if you hit keys close to each other.(cae would turn car, cay would turn cat) Return the word which has the minimum distance. Then you could compare that to your query database and check if there is better results for other close matches.
其他回答
除了上面的答案,如果你想自己快速实现一些东西,这里有一个建议-
算法
你可以在GitHub上找到该算法的实现和详细文档。
创建带有比较器的优先级队列。 创建一个Ternay搜索树,插入所有英语单词(来自Norvig的帖子)及其频率。 开始遍历TST,对于TST中遇到的每个单词,计算它与input_word之间的Levenshtein Distance(LD) 如果LD≤3,则将其置于优先队列中。 最后从优先队列中提取10个单词并显示。
这是我找到的最好的答案,由谷歌的研究总监Peter Norvig实施和描述的拼写纠正器。
如果你想了解更多这背后的理论,你可以阅读他书中的章节。
该算法的思想基于统计机器学习。
这是一个老问题,我很惊讶没有人建议OP使用Apache Solr。
Apache Solr是一个全文搜索引擎,除了许多其他功能,还提供拼写检查或查询建议。从文档中可以看到:
默认情况下,Lucene拼写检查器首先根据 分由弦距计算和秒由频 (如有)在索引内的建议。
你是说拼写检查器?如果它是一个拼写检查器而不是一个完整的短语,那么我有一个关于拼写检查的链接,其中算法是用python开发的。检查这个链接
同时,我也在从事一个项目,包括使用文本搜索数据库。我想这能解决你的问题
几年前我在这方面看到过一些东西,所以可能已经改变了,但显然他们是通过分析相同用户在短时间内提交非常相似的查询的日志开始的,并根据用户如何纠正自己使用机器学习。