/*版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/

搜索引擎设计实用教程(2)-以百度为例
  之二:Spelling Checker拼写检查错误提示(以及拼音提示功能)
  
  中科院软件所 张俊林

  2005年11月

  拼写检查错误提示是搜索引擎都具备的一个功能,也就是说用户提交查询给搜索引擎,搜索引擎检查看是否用户输入的拼写有错误,对于中文用户来说一般造成的错误是输入法造成的错误.那么我们就来分析看看百度是怎么实现这一功能的.
  我们分析拼写检查系统关注以下几个问题:
  (1)系统如何判断用户的输入是有可能发生错误的查询呢?
  (2)如果判断是可能错误的查询输入,如何提示正确的词汇呢?
  
  那么百度是如何做的呢?百度判断用户输入是否错误的标准,我觉得应该是查字典,如果发现字典里面不包含这个词汇,那么很有可能是个错误的输入,此时启动错误提示功能,这个很好判断,因为如果是一个正常词汇的话,百度一般不会有错误提示,而你故意输入一个词典不可能包含的所谓词汇,此时百度一般会提示你正确的检索词汇.
  那么百度是怎么提示正确词汇的呢?很明显是通过拼音的方式,比如我输入查询” 制才”,百度提供的提示词汇为: “:制裁 质材 纸材”,都是同音字.所以百度必然维持着一个同音词词典,里面保留着同音词信息,比如可能包含着下面这条词条: “ zhi cai à制裁,质材,纸材”,另外还有一个标注拼音程序,现在能够看到的基本流程是: 用户输入” 制才”,查词典,发现没有这个词汇,OK,启动标注拼音程序,将” 制才”标注为拼音”zhi cai”,然后查找同音词词典,发现同音词” 制裁,质材,纸材”,那么提示用户可能的正确拼写.
  整体流程看起来很简单,但是还有一些遗留的小问题,比如是否将词表里面所有同音词都作为用户的提示信息呢?比如 某个拼音有10个同音词,是否都输出呢?百度并没有将所有同音词都输出而是选择一定筛选标准,选择其中几个输出.怎么证明这一点?我们看看拼音”liu li”的同音词,紫光输入法提示同音词汇有” 流丽 流离 琉璃 流利”4个,我们看看百度返回几个,输入”流厉”作为查询,这里是故意输入一个词典不包含的词汇,这样百度的拼写检查才开始工作,百度提示: "琉璃 刘丽 刘莉 ",这说明什么?说明不是所有同音词都输出,而是选择输出,那么选择的标准是什么?我能够猜测到的方法是对于用户查询LOG进行统计,提取用户查询次数多的那些同音词输出,如果是这样的话,上面的例子说明用户搜索”琉璃”次数比其它的都要高些,次之是” 刘丽”,再次是” 刘莉”,看来大家都喜欢查询自己或者认识的人的名字.
  另外一个小问题:同音词词典包含2字词,3字词,那么是否包含4字词以及更长的词条?是否包含一字词? 这里一字词好回答,不用测试也能知道肯定不包含,因为你输入一个字,谁知道是否是错误的呢?反正只要是汉字就能在词表里面找到,所以没有判断依据.二字词是包含的,上面有例子,三字词也包含,比如查询 "中城药"百度错误提示:”中成药”,修改查询为"重城药",还是提示”中成药” ,再次修改查询 "重城要",百度依然提示”中成药”. 那么4字词汇呢?
  百度还是会给你提示的,下面是个例子:
  输入:静华烟云 提示 京华烟云
  输入 静话烟云 提示 京华烟云
  输入 静话阎晕 提示 京华烟云
  那么更长的词汇是否提示呢?也提示,比如我输入: "落花世界有风军",这个查询是什么意思,估计读过古诗的都知道,看看百度的提示”落花时节又逢君”,这说明什么?说明同音词词典包含不同长度的同音词信息,另外也说明了百度的核心中文处理技术,也就是那个词典,还真挺大的.
  但是,如果用户输入的查询由两个或者两个以上子字符串构成,那么百度的错误提示功能就罢工了,比如输入查询"哀体",百度提示”艾提 挨踢”,但是.输入为 "我 哀体",则没有任何错误提示.
  还有一个比较重要的问题:如果汉字是多音字那么怎么处理?百度呢比较偷懒,它根本就没有对多音字做处理.我们来看看百度的一个标注拼音的错误,在看这个错误前先看看对于多音字百度是怎么提示错误的,我们输入查询"俱长",百度提示”剧场 局长”, “俱长”的拼音有两个:”ju zhang /ju chang” ,可见如果是多音字则几种情况都提示..现在我们来看看错误的情况, 我们输入查询”剧常”,百度提示”:剧场 局长”,提示为”剧场"当然好解释,因为是同音字,但是为什么 "局长"也会被提示呢?这说明百度的同音字词典有错误,说明在”ju chang”这个词条里面包含”局长”这个错误的同音词.让我们顺藤摸瓜,这个错误又说明什么问题呢?说明百度的同音词典是自动生成的,而且没有人工校对.还说明在自动生成同音词典的过程中,百度不是根据对一篇文章标注拼音然后在抽取词汇和对应的拼音信息获得的,而是完全按照某个词典的词条来标注音节的,所以对于多音字造成的错误无法识别出来,如果是对篇章进行拼音标注,可能就不会出现这种很容易发现的错误标注. 当然还有另外一种解释,就是"局长"是故意被百度提示出来可能的正确提示词汇,因为考虑到南方人"zh'和 "ch"等前后鼻音分不清么,那么是这样的么?我们继续测试到底是何种情况.是百度有错误还是这是百度的先进的算法?
  我们考虑词汇"长大",故意错误输入为"赃大",如果百度考虑到了前后鼻音的问题,那么应该会提示"长大",但是百度提示是"藏大".这说明什么?说明百度并没有考虑前后鼻音问题,根本就是系统错误. 我们输入查询"悬赏",故意将之错误输入为"悬桑",没有错误提示,说明确实没有考虑这种情况.前鼻音没有考虑,那么后鼻音考虑了么,我们输入”:经常”,故意改为后鼻音 "经缠",百度提示为"经产 经忏",还是没有考虑后鼻音.这基本可以确定是百度系统的错误导致.
  根据以上推导,我们可以得出如下结论:百度是将分词词典里面每个词条利用拼音标注程序标注成拼音,然后形成同音词词典,所以两个词典是同样大的,而且这个词典也随着分词词典的增长而在不断增长. 至于标注过程中多音字百度没有考虑,如果是多音字就标注成多个发音组合,通过这种方式形成同音词词典.这样的同音词词典显然包含着很多错误.
  最后一个问题:百度对于英文进行拼写检查么?让我们试试看,输入查询”china”,不错,搜到不少结果,专注中文搜索的百度还能搜索到英文,真是意外的惊喜.变换一下查询”chine”,会更加意外惊喜的给我们提示”china”吗?百度提示的是: 吃呢 持呢,原来是不小心触发了百度的拼音搜索功能了.那么拼音搜索和中文检查错误是否采用同一套同音词词典呢,让我们来实验一下,搜索”rongji”,百度提示” 榕基 溶剂 容积”,OK,换个中文查询”容机”,百度提示” 榕基 溶剂 容积”,看来使用的是同一套同音词词典.也就是说百度的中文纠错和拼音检索使用的机制相同,中文纠错多了一道拼音注音的过程而已.难道这就是传说中那个百度的”事实上是一个无比强大的拼音输入法”的拼音提示功能么?
  最后让我们总结归纳一下百度的拼写检查系统:
  后台作业: (1)前面的文章我们说过,百度分词使用的词典至少包含两个词典一个是普通词典,另外一个是专用词典(专名等),百度利用拼音标注程序依次扫描所有词典中的每个词条,然后标注拼音,如果是多音字则把多个音都标上,比如”长大”,会被标注为”zhang da/chang da”两个词条.
  (2)通过标注完的词条,建立同音词词典,比如上面的”长大”,会有两个词条: zhang daà长大” , chang daà长大.
  (3)利用用户查询LOG频率信息给予每个中文词条一个权重;
  (4)OK,同音词词典建立完成了,当然随着分词词典的逐步扩大,同音词词典也跟着同步扩大;
  
  拼写检查:
  (1)用户输入查询,如果是多个子字符串,不作拼写检查;
  (2)对于用户查询,先查分词词典,如果发现有这个单词词条,OK,不作拼写检查;
  (3)如果发现词典里面不包含用户查询,启动拼写检查系统;首先利用拼音标注程序对用户输入进行拼音标注;
  (4)对于标注好的拼音在同音词词典里面扫描,如果没有发现则不作任何提示;
  (5)如果发现有词条,则按照顺序输出权重比较大的几个提示结果;
  
  拼音提示:
  (1)对于用户输入的拼音在同音词词典里面扫描,如果没有发现则不作任何提示;
  (2)如果发现有词条,则按照顺序输出权重比较大的几个提示结果;

搜索引擎设计实用教程(2)-以百度为例相关推荐

  1. 搜索引擎设计实用教程(5)-以百度为例

    /*版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/ 搜索引擎设计实用教程(5)-以百度为例 之五:CACHE结构 中科院软件所  张俊林 2006年1月4日 Cache是目前实 ...

  2. 搜索引擎设计实用教程(4)-以百度为例

    /*版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/ 搜索引擎设计实用教程(4)-以百度为例 之四:相关提示功能                              中科院 ...

  3. 搜索引擎设计实用教程(3)-以百度为例

    /*版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/ 搜索引擎设计实用教程(3)-以百度为例 之三:对百度分词算法的进一步分析                           ...

  4. 搜索引擎设计实用教程(1)-以百度为例

    搜索引擎设计实用教程-以百度为例 之一:查询处理以及分词技术                                     中科院软件所 张俊林                        ...

  5. 搜索引擎设计实用教程(3)-以百度为例 之三:对百度分词算法的进一步分析

    中科院软件所 2005年11月 上面说过,经过分析得出百度的分词系统采用双向最大匹配分词,但是后来发现推理过程中存在一个漏洞,而且推导出来的百度分词算法步骤还是过于繁琐,所以进一步进行分析,看看是否前 ...

  6. java程序设计实践教程张永常_java程序设计实用教程

    典型案例,轻松易学:通过139个课堂案例讲解理论知识,直观.具体: 边做边学,练习巩固:随书附赠教学视频,边看边学,并且通过20个课堂练习和每章课后习题来实操练习,巩固提高: 学习资源丰富:随书附赠课 ...

  7. html的详情页面设计,HTML5+CSS3网页设计与制作实用教程 单元7 网页特效与制作商品详情页面(105页)-原创力文档...

    单元7网页特效与制作商品详情页面HTML5+CSS3网页设计与制作实用教程本章导读The chapter's introduction 将JavaScript 程序嵌入HTML 代码中,对网页元素进行 ...

  8. html怎么设置毛笔字体,三种实用的毛笔书法字体设计制作教程

    三种实用的毛笔书法字体设计制作教程 书法字体2015.09.08书法字体 毛笔字.书法字都非常漂亮,但现在除了少数书法家,书法爱好者能写的一手漂亮的书法外,很少有人能写好书法字了!作为设计师(特别是网 ...

  9. 条形码设计软件BarTender实用教程——配置文档常见问题解答(一)

    BarTender是一款优秀的标签.条形码.卡片以及RFID标签设计和打印软件.所有版本的BarTender都具有独立的设计和打印功能,对于更高级的用户,自动化版和企业自动化版本提供了更强大的集成功能 ...

最新文章

  1. 图像金字塔与resize函数
  2. evolution configure
  3. 数字图像处理-频率域滤波原理
  4. linux 桌面使用体验 远程访问win for linux
  5. java cookie secure_Cookie的Secure属性
  6. 反欺诈之设备指纹(下篇)
  7. Java应用开发的一条重要经验:先建立基础设施
  8. 分享996个实用的JavaScript特效你要的全在这里
  9. 计算机说课稿模板小学数学,小学数学说课万能模板精简
  10. STM32基于Proteus虚拟仿真电源设置
  11. 软件安全性与软件可靠性
  12. dlang,不必要串插件的类型提升.
  13. js实现活动时间倒计时
  14. 在Java项目中打印错误日志的正确姿势,排查问题更方便,非常实用!
  15. E: 无法下载 http://us.archive.ubuntu.com/ubuntu/dists/xenial/main/binary-armhf/Packages 404 Not Found
  16. 一般家用监控多少钱_安装一套监控需要多少钱,看完你就能自己算出来
  17. 局域网文件管理系统_生产设备日常巡检管理系统解决方案
  18. 【AI 交互式聊天】怎样实现财富自由??? 无需等待 Bing ChatGPT : 已经有一个免费自由使用的基于搜索结果响应的 AI 交互式聊天网站了!文中附 Perplexity 网站链接!
  19. 机器学习github算法
  20. 彻底删除U盘中的病毒和隐藏文件、格式化u盘

热门文章

  1. 微服务架构的终极模式?
  2. 很现实、很暴力的面试法则 —— 来自招聘官的自述
  3. 深度解密Go语言之unsafe
  4. 腾讯2020校园招聘----覆盖
  5. 探讨TensorRT加速AI模型的简易方案 — 以图像超分为例
  6. 【阅读推荐】LiveVideoStack 精彩内容集锦
  7. LiveVideoStackCon讲师热身分享 ( 二 ) —— 中美互动直播比较
  8. JVM之类加载器ClassLoader
  9. 服务器开发设计之算法宝典
  10. 《直播疑难杂症排查》之二:播放卡顿