`

spellcheck

阅读更多

 相关搜索是检索功能的一个扩展,用来告诉用户自己输入查询词的情况。

如果输入错了,可能会纠错提示用户:“想找的是不是”; 或者又叫拼写检查

     

另外还会在显著位置提供与输入查询词相关的其他查询词,例如百度结果页下面的提示,

     

而对于电商网站这两个功能会合在一起,下面分别说说我对这两个任务的理解。


 

一、纠错功能,英文叫做spellcheck,在英文上做纠错比较直接,就是看单词的编辑距离,目标当然就是对于任意一个输入,能在大量正确而靠谱的查询词中找出编辑距离满足要求的一个或者几个。

面对这样的spellcheck任务,模型上就是要推算用户输入错误单词w的条件下,是正确单词c的概率,也就是argmaxc P(c|w)。一般有两种方案:一种,是http://norvig.com/spell-correct.html 介绍的办法,另一种是lucene-suggest里spellchecker的方法。 

      1. 第 一种,在norvig介绍的方法中,详细的阐述了argmaxc P(c|w)的转换和求解办法。 这个概率不好直接算,但可以根据贝叶斯定理等价于 argmaxc P(w|c)*P(c) / P(w),因为是比较各个c之间的大小所以P(w)可以省略,最后就变成求 argmaxc P(w|c)*P(c)就行了。P(c)可以看作是c在文本集合中出现的可能性;P(w|c)意味着本来心里想成是c结果打成了w的概 率。那就很好办了,P(c)可以从靠谱的语料中统计;P(w|c)可以用编辑距离来模拟关系,即编辑距离小的概率大。在实现上,对一个输入word,产生 出有编辑距离1的字符串,就包括几种情况:删除一个字符、交换临近字符、把一个字符改成另一个、增加一个字符。这样产生的候选集会比较大,接近80%的纠 错要求是满足了。如果在编辑距离1的基础上再产生编辑距离为2的更大的候选集,几乎就覆盖所有错别字了。原文讲得比较精细,建模思路也很清晰,建议仔细阅 读,这就不细说了。

      2.第 二种方案就是lucene的spellchecker方法,上面方案是把编辑距离的临时产生到词典中检查,这种方案就是预先进行词典索引,当然是 ngram的,对一个word任意2位或者3位字符进行索引,对用户输入的一个字符,也同理按2或3位产生字符片段,利用OR的关系去检索,命中多的 word得分更高最可能是拼写错误的。当然因为是OR查询关系,所以会有很多也只“沾边”的词也被命中,所以最后除了考虑查询命中高分的,还要对命中的和 输入的进行一步编辑距离阈值过滤。举个例子“word”,我们会有n2:wo/n2:or/n2:rd/n3:wor/n3:ord 这些碎片进行索引, 当用户输入一个worg,会产生n2:wo/n2:or/n2:rg/n3:wor/n3:org,这些检索条件,会查到很多work, worth等等。细节上可以有一些增强,比如单词两头的字符碎片权重更大等等。

这两种求解argmax P(c|w)的办法,norvig的办法比lucene-spellcheck的办法在线上的环节多一些,效率上估计还是差一点,但提供了很巧妙的求解思路,值得细细品味。


二、相关搜索的 功能,学术界研究的比较多,有各种提法,query rewrite,query substitution, query extension等等,算 法也五花八门,大多为了结果好看加入了复杂的计算,和针对数据情况的考量。一般工程上需要的是通用的办法,再增加一些特殊的考虑来提高效果。过去曾经有幸 看到一篇貌似不是很正规的论文,方法非常简单,思路清晰,非常适合在实际工程上应用起来。论文也不记得标题了,不过思想还记得很清楚:就是寻找query 词之间的强弱联系。

一般情况下构成query之间的关联有三种主要的因素:

     1. 字面意思的关联; 如果一个query比另一个query 多了或者少了一个词,那么这两个词肯定是有关联的,长短语是短短语的具体化,反之是泛化,比如“笔记本 内存 条 8G”就是“笔记本 内存条”的细化,反过来看“笔记本 内存条”不仅包括“8G”也包括其他容量,是更泛化的查询词。

     2. 用户输入行为的关联;用户在一个会话之中连续输入的多个词之间可以认为是有关联的,即做一个人的需求反应在查询词上。比如用户查询了“键盘”他可能还有需要去买点别的,例如“鼠标”之类的,如果这样的情况出现了多次,那么“键盘”和“鼠标”就可以看成是有强联系的。

     3. 用户点击行为的关联;用户为了找一个东西的时候可能词不对反复更换查询词,或者不同人用不同的表达,如果都点到一个结果,可以看做用了不同的办法找到同样的东西,殊途同归的味道。那么这些落到同一结果的路径,即query,也可以看做是有强关联的。

这三种是比较通用的关联 关系,也很直接,并且数据能很容易获得或者被日志记录下来的。除了这几种,还可以根据具体业务情况增加其他关联考虑。最后,我们可以根据经验或者统计分析 调整多种关联关系的权重。实现上,对一个query,需要让查那些和它有关联的queries,都能被找出来。于是想到可以用检索系统,传统的检索系统是 对文档的内容直接分词出一个个token后建索引,这里是对query,进行特殊“分词”出那些关联的token去建索引。

      最后,如果要把纠错和相关搜索结合在一起,就有很多综合考虑了。总之相关搜索是检索之外比较影响用户体验的一个服务,值得投入精力把它做好。

分享到:
评论

相关推荐

    SpellCheck拼写检查小控件源码

    在IT领域,拼写检查(SpellCheck)是一项重要的功能,特别是在文本编辑、文档处理和信息输入等场景。本文将深入探讨“SpellCheck拼写检查小控件源码”,这是一个利用Google Web服务进行拼写校验的组件。我们将讨论其...

    前端项目-jquery-spellcheck.zip

    "前端项目-jquery-spellcheck.zip" 提供了一个基于jQuery的插件,旨在为网页上的输入字段提供拼写检查功能。这个插件利用了Google的拼写检查API,使得在网页上实现高效、准确的拼写验证变得轻而易举。 首先,让我们...

    addict Spellcheck delphi控件

    addict Spellcheck 3.5 delphi控件

    Lucene5学习之SpellCheck拼写纠错

    **标题:“Lucene5学习之SpellCheck拼写纠错”** 在深入探讨Lucene5的SpellCheck功能之前,首先需要理解Lucene是什么。Lucene是一个开源的全文检索库,由Apache软件基金会开发,它提供了高性能、可扩展的文本搜索...

    Spellcheck_MSWord

    【标题】"Spellcheck_MSWord" 提示我们这个压缩包可能包含了与 Microsoft Word 的拼写检查功能相关的代码或资源。在Microsoft Word中,拼写检查是一个重要的功能,它允许用户在编写文档时检测并修正拼写错误。拼写...

    sonarqube-spellcheck:SonarQube SpellCheck插件可提供源代码的拼写检查

    为您的Quality Profiles激活SpellCheck规则 转到Rules并搜索Spell Check规则 单击找到的Spell Check Rule ,然后单击Activate 在出现的对话框中,选择所需配置文件以激活规则,然后单击“ Activate Spell Check ...

    spellcheck:node.js 的异步 hunspell 绑定

    描述的异步 hunspell 绑定。要求 -- v0.6.0 或更新版本安装npm 安装拼写检查例子查一个... '\\' : '/' ) , spell = new SpellCheck ( base + 'en_US.aff' , base + 'en_US.dic' ) ; spell . check ( 'sain' , function

    spellcheck:此函数检查单词的拼写并在拼写错误时返回建议。-matlab开发

    在MATLAB编程环境中,拼写检查(spellcheck)函数是一个非常实用的工具,它能够帮助开发者检测字符串中的拼写错误,并提供可能的纠正建议。这个功能对于处理大量文本数据或编写涉及用户输入验证的程序来说尤其重要。...

    vis-spellcheck:vis编辑器的Spellcheck插件

    下载spellcheck.lua或将此存储库克隆到您的插件目录中 使用require('plugins/vis-spellcheck')将插件加载到visrc.lua 用法 要启用突出显示拼写错误的单词,请在正常模式下按<Ctrl>e 。 要禁用突出显示,请在正常...

    Python库 | flake8-spellcheck-0.10.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:flake8-spellcheck-0.10.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    spellcheck-action:用于检查代码的GitHub操作和拼写错误的提取请求

    复制以下内容到.github/workflows/spellcheck.yml : # Add to: .github/workflows/spellcheck.yml name : Typo CI on : push : branches-ignore : - master jobs : spellcheck : name : Typo CI (GitHub ...

    github-spellcheck-cli:检查GitHub存储库中是否存在拼写错误,并自动创建提取请求

    $ npm install --global github-spellcheck-cli 用法 该命令是github-spellcheck 。 它具有以下选项: -h, --help Print this usage guide. -t, --token <token> GitHub personal access token. You only need to ...

    cargo-spellcheck:使用hunspell和基于nlprule的语法检查器检查所有文档中的拼写和语法错误

    用例运行cargo spellcheck --fix或cargo spellcheck fix来修复所有文档注释,以避免在整个源代码树上出现拼写错误。在学习阶段后针对自定义/主题特定的术语的帮助者,它简化了审核并改善了CI检查。检查拼写和/或语法...

    Caboodle SpellCheck-开源

    【标题】"Caboodle SpellCheck-开源"是一个关于开源拼写检查控制器的项目,它主要应用于网络环境。这个项目的重点在于提供一个可扩展且灵活的解决方案,帮助开发者集成到他们的应用中,以实现高效准确的在线拼写检查...

    gulp-spellcheck:一个gulp插件,用于使用GNU Aspell进行拼写检查

    gulp-spellcheck 一个插件,用于使用进行拼写检查。 用法 首先,您必须确保已安装 : $ # Debian-based $ sudo apt-get install aspell 如果可以使用aspell ,请在您的项目中将gulp-spellcheck安装为开发依赖项。 ...

    silverstripe-spellcheck:SilverStripe的拼写检查

    使用composer require silverstripe/spellcheck:*安装拼写检查模块,使用composer require silverstripe/spellcheck:* ,或下载该模块并解压缩到项目根目录下的“ spellcheck”目录。 配置 设置要使用yaml检查的...

    go-spellcheck:go-spellcheck 是 Peter Norvig 拼写校正器的 golang 实现

    拼写检查这是 Peter Norvig 的拼写校正算法在 Golang 中的实现。 您可以在此处阅读有关该算法的更多信息。 这个实现是多线程安全的,看起来有点像 Norvig 的实现,但底层算法是一样的。

    jscs-spellcheck:JSCS 拼写检查插件

    jscs-spellcheck可以使用 NPM 安装并且需要 。 如果您使用全局安装的jscs全局安装jscs : npm install jscs-spellcheck --global 但最好将其安装到您的项目中: npm install jscs-spellcheck --save-dev 用法 ...

    British Medical Spellcheck-开源

    "British Medical Spellcheck"是一款专为医学英语设计的开源拼写检查词典,它提供了大约5,000个医学专业词汇,旨在帮助医生、研究人员、翻译人员以及所有涉及医学英文写作的用户确保其文档的准确性。 这款拼写检查...

Global site tag (gtag.js) - Google Analytics