百度切分分析
来源:互联网 发布:网络售后服务方案 编辑:程序博客网 时间:2024/06/03 17:03
百度分词分析
网上有很多篇关于百度分词分析的,可能是百度在不停的与时俱进,所以原有的分析在我看来是存在着少许偏差的,另外也不太全面,本文将给一个分析出来,与大家探讨。
首先,来看看百度对一个句子是怎么拆分的,毕竟,是否对查询进行拆分,以及如何拆分,是需要符合其索引结构的。给定一个句子:中华人民共和国people republic of china 的GDP增速为7.5%(大于7%)。按照已有的分析,百度是按照双向最大匹配来进行切分的(这个作者没有异义),假定“中华人民共和国”、“增速”,“大于”已经存在于词典中,那么上面这个句子应该如何拆分?实际上关键是英文,数字以及标点符号(,| . | 。|…)如何处理。显然对于英文,不是百度的重点,应该按照空格自动切分,不考虑英文词组之类的。对于数字,是按照单个数字索引还是按照整体索引呢?首先进行如下实验:
实验1:
1. 输入“1”,返回N(1)= 77,200,000个结果;
2. 输入“10”,返回N(10)= 46,900,000
3. 输入“11”,返回N(11)= 36,900,000
4. 输入“12”,返回N(12)= 39,000,000
如果是按照单个数字进行切分的,那么显然 N(1)> N(10 )+ N(11 )+ N(12 );
而实际并非如此,因此可以初步断定是按照数字整体来进行切分的。但是问题马上又来了,数字的组合,加上小数点,加上百分号,何其多啊,需要多大的索引库才能够存上这些数字呢?另外比较麻烦的是,如何判断一个由“单个数字加上符号”组成的字符串是一个数字?虽然这个从模式匹配角度来讲是不难的,但是可能对整体的切分效率有影响,另外由于这个组合实在太大,可能造成的后果是,非常大量的数字的索引网页数仅仅只有1个或者几个,对效率影响很大。因此猜测百度采取的是把数字中出现的符号均作为分隔符,例如87.88,拆分(87 / . / 88); 77,200,000拆分为(77 / , / 200 / , / 000) 这个猜测对吗?
实验2:
1. 输入“87”,返回结果中包含了:V3.87 87% 2.87% 87.00等结果
初步说明不是按照数字整体来进行切分的,而是按照符号作为分隔符来进行切分的,这种切分方式可以保证索引项比较小。那这个时候问题来了,符号怎么处理?对于87.88中的“.”,77,200,000中的“,”该怎么处理?是建立索引还是怎么样?进一步实验:
实验3:
1. 输入“87.88”,返回N(87.88)= 4740,随机的点击,一直遍历百度所能给出的76个页面上返回的结果,基本上都能够比较完整的匹配上87.88; 说明“.”这个符号可能也做了索引,但是单独输入“.”, 百度说“抱歉,您输入的内容“.”不在查询范围内。”;
2. 输入“77,200,000”,返回N(77,200,000)= 795,000,从返回结果来看,显然是和按“77 200 000”搜索返回的结果是一样的。说明“,”肯定没有做索引;
从上面可以看出,数字中间的符号地位是不一样的,可能百度是按照符号的通常作用来分别处理的,例如“,”一般是作为句子结束标号,而.尤其是在中文里面,是不作为句子结束,或者说在句子中充当语义成分的。推断百度对符号分为两类,一是连接符“.”“-”之类,有语义,并且做了索引,另外是结束符等,只在句子与句子间有语义作用的。没有做索引。至此,上面的句子应该切分如下:
中华人民共和国 | people | republic | of | china | 的| GDP| 增速| 为 | 7 | . | 5 | % | 大于| 7 | %|
至此似乎对于百度的切词有了个全面的认识,对错与否还不能够完全判断,等待大家批评指正。
现在从查询角度来看看切分,对于一个用户查询,百度肯定是希望能够最短的时间返回所有包含这个查询的网页(这里不去考虑排序)。那么按照一般的想法,对查询串的切分,肯定希望切分后的各子串数量尽可能少,而且能够迅速定位索引项。其实也必须这么做,为什么呢?假定我要查“软件设”,现任正常情况下百度所收集网页里面的“软件”按照一个整词来索引的,如果按照单字查“软”“件”,是不可能返回“软件”的,因此,用户查询串里面有词,就必须把这个词找出来,不然查询结果肯定不对,实验如下:
实验4:
1. 输入“软”,返回N(软)= 23,700,000,从抽查的网页来看,虽然包含了“软件”,但是没有显示红色。
2. 输入“软件设”,返回N( 软件设) = 11,600,从抽查的网页来看,很多网页的“软件”为红色,另外一个网页http://bbs.popip.net/viewthread.php?tid=3715里面基本上只有“软件”一词。
上述实验实际上也说明了,以前的一些分析认为百度对于三个字一下的词是不作分词的,这个判断不对,可能还没充分理解百度的索引机制。作者设计了另外一个实验:
实验5:
1. 输入“吴.文”,返回N(吴.文) = 7,120,000, 这个时候返回的网页里面, 开始几页“.”被当作了一个占位符,也就是说返回的结果为中间填充了一个汉字。后来就按照单个字来查询了。
可能是百度对于符号的设定还有些其它的规则,目前作者还不能完全掌握。
- 百度切分分析
- GA/百度统计/Piwik:网站分析工具的Cookie设置和访次切分规则
- MySQL水平切分实现原理分析
- VC单文档切分动态更换多视图代码分析
- 数据切分-Mysql分区表的建立及性能分析
- 网络爬虫--庖丁解牛,html的结构分析和正则切分
- 百度快照特色分析
- 百度产品分析
- 百度贴吧分析
- 百度蜘蛛IP分析
- 百度词库格式分析
- 百度分词算法分析
- 百度导航NaviDemo分析
- 百度糯米产品分析
- 百度cookie使用分析
- 百度加固逆向分析
- 百度统计原理分析
- 百度快照实现分析
- 突然要用到BCD码,就随手写了一个。
- 学习linux的多线程
- dsp———.cmd文件
- 学习Linux,写了一个ls.c v1.0 基本上是照书抄!
- md2格式杂记
- 百度切分分析
- COFF 文件的格式
- DSP 优化心得
- 编程命名规则
- 算法导论习题[Exercises 9.3-7 ]
- 在ASP.NET中实现Url Rewriting
- ANT的使用(结合JUNIT、SVN)
- 网上不知道有多少双眼睛盯着你
- 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用