首页 / 知识
关于nlp:您如何实现“您的意思”?
2023-04-14 01:24:00

How do you implement a “Did you mean”?本问题已经有最佳答案,请猛点这里访问。
假设您的网站中已经有一个搜索系统。 在某些搜索查询中,您如何像Google那样实现"您的意思是: 实际上,Google所做的工作非常重要,而且乍一看是违反直觉的。他们没有像检查字典那样做任何事情,但是他们利用统计信息来识别返回比您的查询更多结果的"相似"查询,确切的算法当然是未知的。 这里有不同的子问题需要解决,作为所有自然语言处理统计数据的基础,必须有一本书:统计自然语言处理基础。 具体地,为了解决单词/查询相似性的问题,我使用Edit Distance获得了很好的结果,Edit Distance是一种字符串相似性的数学测量方法,效果非常好。我曾经使用Levenshtein,但其他人可能值得研究。 根据我的经验,Soundex很糟糕。 实际上有效地存储和搜索大的拼写错误的词典,并且具有亚秒级的检索功能也是不容易的,最好的选择是利用现有的全文索引和检索引擎(即不是数据库的那个),Lucene当前是其中的一种最好的之一,巧合地移植到许多平台上。 Google的Dr Norvig概述了它的工作方式。他甚至给出了20行的Python实现: http://googlesystem.blogspot.com/2007/04/simplified-version-of-googles-spell.html http://www.norvig.com/spell-correct.html 诺维格博士在这个精彩的演讲中还讨论了"您的意思"。 Norvig博士是Google的研究负责人-当被问及"您的意思"是如何实现的时,他的回答是权威性的。 因此,它的拼写检查(大概是根据其他搜索甚至是实际的互联网短语等)构建的动态词典。但这仍然是拼写检查。 大家快来看看SOUNDEX和其他猜测吧! 在Wikipedia上查看有关Levenshtein距离的文章。确保您仔细看一下可能的改进。 有人问到如何为搜索引擎创建最先进的拼写建议系统,我感到非常惊讶。我在一家搜索引擎公司从事这一主题的工作已经一年多了,我可以指出有关该主题的公共领域信息。 如前一篇文章所述,Google(以及Microsoft和Yahoo!)既不使用任何预定义的字典,也不使用成群的语言学家来思考可能的拼写错误的查询。由于问题的严重性,这将是不可能的,而且还因为不清楚人们是否可以正确识别查询的时间和是否拼错。 相反,有一个简单而有效的原则也适用于所有欧洲语言。假设参考查询是计数最高的查询,请在搜索日志中获取所有唯一查询,并计算所有查询对之间的编辑距离。 这个简单的算法非常适合许多类型的查询。如果您想将其提高到一个新的水平,那么我建议您阅读Microsoft Research关于该主题的论文。你可以在这里找到它 本文有很好的介绍,但之后您将需要了解诸如隐马尔可夫模型的概念。 我相信Google会记录所有查询并确定何时有人进行拼写更正。然后,当其他人提供相同的第一个查询时,可以建议此更正。这适用于任何语言,实际上是任何字符的任何字符串。 我建议您查看SOUNDEX以在您的数据库中找到类似的单词。 您还可以使用Google API拼写建议请求来访问Google自己的词典。 您可能想看看Peter Norvig的"如何编写拼写校正器"文章。 http://en.wikipedia.org/wiki/N-gram#Google_use_of_N-gram 我认为这取决于您的网站大小。在我们大约500名员工使用的本地Intranet上,我仅查看返回零结果的搜索短语,然后将该搜索短语和新建议的搜索短语输入到SQL表中。 如果没有返回任何搜索结果,他们将在该表上进行调用,但是,这仅在站点相对较小的情况下才有效,并且我仅对最常见的搜索短语进行操作。 您可能还想看看我对类似问题的回答:
如果您具有行业特定的翻译,则可能需要一个同义词库。例如,我在珠宝业工作过,在我们的描述中有缩写,例如kt-karat,rd-round,cwt-克拉重量... Endeca(该职位的搜索引擎)有一个词库,该词库可以从通用拼写错误,但确实需要人工干预。 我用Lucene的拼写检查器做到这一点。
为什么不在代码中使用Google的意思呢?
有一种叫做aspell的东西可能会有所帮助:
有一个红宝石宝石,但我不知道如何从python与它交谈 这是来自ruby实现的报价
输出:
可能的纠正措施: 以有效的方式为搜索引擎实施拼写校正并非易事(您不能仅计算每个可能单词的编辑/删除距离)。 《信息检索简介》(在线提供全文)中介绍了一种基于k-gram索引的解决方案。 您可以使用ngram进行比较:http://en.wikipedia.org/wiki/N-gram 使用python ngram模块:http://packages.python.org/ngram/index.html
你得到:
Soundex和" Porter阻止"(Soundex是微不足道的,不确定Porter阻止)。 Soundex适用于语音匹配,但最适合与人的名字配合使用(最初是为人口普查数据开发的) 还要检查全文索引,该语法与Google逻辑不同,但是它非常快速并且可以处理类似的语言元素。 |
最新内容
相关内容
linux访问网站的命令?
linux访问网站的命令?,地址,系统,服务,工作,网站,命令,网络,管理,信息,网址,Linux必学的网络操作命令Linux的网络命令比较多,其中一些命令像pin备份用命令linux系统?
备份用命令linux系统?,系统,信息,设备,数据,软件,认证,命令,文件,备份,目录,Linux查看数据库备份脚步的配置信息命令连接上相应的linux主机,进linux系统中管道命令?
linux系统中管道命令?,标准,系统,工作,命令,信息,通讯,管道,流向,连续,工具,Linux第二章-Linux常用命令1、linux常用命令有pwd命令、cd命令、llinux系统命令记不住?
linux系统命令记不住?,系统,工作,基础,地址,网络,服务,命令,第一,名称,目录,学LINUX基础命令总是记不住怎么办?1、按命令的单词意义来记忆是最linux系统刻盘命令?
linux系统刻盘命令?,系统,软件,设备,工具,盘中,电脑,数据,官网,信息,网络,请问如何把GRUB2做到光盘中?1、进入windows上网下载grub2 for dos,照linux系统还原的命令?
linux系统还原的命令?,系统,数据,工具,软件,地址,工作,情况,信息,命令,位置,如何使用fsck命令修复文件系统错误在单个分区上进行错误检查 在终linux查询分辨率命令?
linux查询分辨率命令?,情况,设备,系统,分辨率,数据,命令,屏幕,屏幕分辨率,桌面,终端,linux下怎么通过命令改分辨率1、使用xrandr查询,带“*”的linux系统命令都没了?
linux系统命令都没了?,系统,单位,软件,命令,分析,第一,权威,公司,工作,异常,我的Linux系统上没有tree命令,我该如何安装?1、get install tree;linux命令安装新系统?
linux命令安装新系统?,系统,软件,工作,管理,在线,电脑,信息,基础,发行,数据,Linux安装基本命令1、linux系统常用操作命令linux系统常用操作命linux命令搜索大全?
linux命令搜索大全?,地址,工作,系统,命令,管理,目录,标准,基础,工具,网络,linux命令大全linux常用命令有pwd命令、cd命令、ls命令、cat命令、g命令访问linux系统?
命令访问linux系统?,系统,地址,信息,软件,命令,时间,工具,网络,管理,电脑,linux文件系统常用命令linux常用命令:查看内核版本:uname-a。图形界面linux系统命令重启?
linux系统命令重启?,系统,服务,名称,工作,网络,命令,设备,标准,时间,网络服务,详解Linux系统中关机与重启相关命令的用法1、打开这里的LINUX,UB