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

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

之三:对百度分词算法的进一步分析

                         

                                     中科院软件所 malefactor

2005年11月

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

那么以前的分析有什么漏洞呢?我们推导百度分词有反向最大匹配的依据是百度将"北京华烟云"分词为<北,京华烟云>,从这里看好像采用了反向最大匹配,因为正向最大匹配的结果应该是<北京,华,烟云>,但是由此就推论说百度采用了双向最大匹配还是太仓促了,前面文章我们也讲过,百度有两个词典,一个普通词典,一个专有词典,而且是专有词典的词汇先切分,然后将剩余片断交给普通词典去切分.所以上面的"北京华烟云"之所以被切分成<北,京华烟云>,另外一个可能是:京华烟云这个词汇是在专有词典里面存储的,所以先分析,这样得出"京华烟云",剩下"北",没什么好切分的,所以输出<北,京华烟云>.

这里只是假设,那么是否确实"京华烟云"在专有词典呢?我们再看一个例子"山东北京华烟云",百度切分的结果是<山东,北,京华烟云>,如果"京华烟云"在普通词典,如果是反向切分,那么结果应该是<山,东北,京华烟云>,如果是正向切分应该是<山东,北京,华,烟云>,无论如何都分不出<山东,北,京华烟云>.这说明什么?说明"京华烟云"是在那个专有词典,所以先切分出"京华烟云",然后剩下的"山东北"交由普通词典切分,明显是正向最大匹配的结果输出<山东,北>.当然按照我们在第一篇文章的算法推导"山东北"的切分也会得出<山东,北>的结论,但是明显比正向最大匹配多几个判断步骤,既然效果一样,另外一个更加简洁的方法也能说得通,那当然选择简便的方法了.所以初步判断百度采取的是正向最大匹配.

我们继续测试采用何种分词算法,为了减少专有词典首先分词造成的影响,那么查询里面不能出现相对特殊的词汇,构筑查询"天才能量级",这里应该没有专有词典出现过的词汇,百度切分为<天才,能量,级>,看来是正向最大匹配的结果.另外,如果所有查询词汇都出现在专有词典,那么采取的是何种方法?这样首先就得保证词汇都出现在专有词典,这么保证这一点呢?我们构造查询"铺陈晓东方",百度切分为<铺,陈晓东,方>,可以看出"陈晓东"是在专有词典的所以先切分出来.另外一个例子 "山东京城",百度切分为<山东,京城>,说明"东京"是在普通词典的.OK,构造查询"陈晓东京华烟云",通过前面分析可以看出两个词汇都在专有词典里面,百度切分为<陈晓东,京华烟云>,说明对于专有词典词汇也是采取正向最大匹配或者双向最大匹配.那么使用反向最大匹配了吗?构造查询例子"陈晓东方不败",首先我们肯定"陈晓东"和"东方不败"都是在专有词典出现的,如果是正向切分,那么应该是<陈晓东,方,不败>或者<陈晓东,方,不,败>如果是反向切分则是<陈,晓,东方不败>,可以看出百度的切分是<陈晓东,方,不败>或者<陈晓东,方,不,败>,说明采用的是正向最大匹配.通过分析,百度的词典不包含"不败"这个单词,所以实际上百度的切分结果是<陈晓东,方,不,败>,很明显这和我们以前推导的算法是有矛盾的,所以以前的分析算法确实有问题,所以结论是百度采取的是正向最大匹配算法.

重新归纳一下百度的分词系统:首先用专有词典采用最大正向匹配分词,切分出部分结果,剩余没有切分交给普通词典,同样采取正向最大匹配分词,最后输出结果.

另外,GOOGLE也是采用正向最大匹配分词算法,不过好像没有那个专用词典,所以很多专名都被切碎了.

从这点讲,GOOGLE在中文词典构建上比百度差些,还需要加把子力气才行,不过这也不是什么多难的事.

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

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

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

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

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

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

    /*版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/ 搜索引擎设计实用教程(2)-以百度为例 之二:Spelling Checker拼写检查错误提示(以及拼音提示功能) 中科院软 ...

  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. IDEA加密文件Base64转换String传输以及报文摘要MD5防止恶意篡改
  2. 2020年中国新基建产业报告(收藏)
  3. 浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别
  4. flutter dart Md5加密
  5. 【29.70%】【codeforces 723D】Lakes in Berland
  6. 如何编写干净流畅的Web API测试
  7. .net Core 生产环境 KestrelServer + Shell 实践
  8. python求1到n的乘积_Python实现矩阵相乘的三种方法小结
  9. java中一个char_java 中一个char包含几个字节
  10. Cocos2dx 之 ButtonSprite
  11. 【渝粤教育】国家开放大学2018年秋季 1141t工程经济与管理 参考试题
  12. python中from的用法_Python import用法以及与from...import的区别
  13. Java:关于负数的向上转型
  14. 并发编程之高并发编程的意义、好处和注意事项
  15. 使用gtest做单元测试
  16. matlab面元法计算naca翼型的升力系数(关于攻角的曲线)
  17. 如何登录虚拟主机服务器,如何登录虚拟主机服务器
  18. 数据挖掘之-简单属性之间的相似度和相异度
  19. L1-051 打折 (5 分)
  20. js时间戳13位转日期格式

热门文章

  1. Android平台Chromium net中的代理配置信息获取
  2. 开启云原生 MOSN 新篇章 — 融合 Envoy 和 Golang 生态
  3. 公网传输技术之SRT协议解析(上)
  4. 【全真互联网下音视频技术创新应用】
  5. 剧透LiveVideoStackCon 2020:除了干货,还有更多优惠的年度通票
  6. 音视频技术开发周刊 67期
  7. 大牛书单 | 腾讯运维大咖陪你过724
  8. 微信「看一看」 推荐排序技术揭秘
  9. MySQL之父直播公开课来了!与腾讯云CDB专家天团联袂分享
  10. ubuntu20.04 sshd 配置root 登录