分析百度的中文分词结果
在大家的心目中可能百度的分词是极其复杂的,他代表了中国分词领域的最高水平,其实不然,简单最好,裸体最美,当我们拨下百度的衣服,既然会发现百度的分词是如此的简单,可能正应了一个名人的某一句话:当用户输入查询关键字的时候我们要准确的知道用户在想什么!这正是百度所追求的,他把所有的工作都放在了处理用户查询关键字的时候。
本分析结果也是无意得到的。www.sj110.com搜价110是Handsome man Eunge带领下的一个项目,因我是pwqzc老鼠,老鼠吗,就是打点小洞,所以我负责词库这一块,为了词库的精确,在处理词库的时候经常查询百度,查多了,想多了,问题就出来了,竟然发现对百度的分词稍微有了点了解,这个是我无意撞上的,就如一个送水的汉子,碰上了一个要水的少妇,而这个少妇的男人三年前出门至今未归,此MM鸡渴难耐,于是和那个送水的汉子发生了不该发生的事,呵呵,都是撞上的。
下面是我的一些分析结果,凡是我可以肯定的,我都注明了。
1.百度的蜘蛛爬到的文档索引入库的时候是只进行了简单的分词处理(我可以肯定),也就是只是简单的把中文单个字单个字的分开,要证明这点很简单,你只需要搜索“地”或者“书”或者“脑”。。。。。。等单个词就可以了,当然,你也可以找一些莫名其妙的两个字或者三个字组合在一起搜索百度看,你就会明白他入库的时候只进行了简单的把单个中文分开的处理。他把复杂的分词逻辑放到了处理用户输入查询关键字的时候。仔细一想,其实这样做能够最大限度的消除歧义!!!
2.当用户输入两个字和三个字的词进行搜索的时候百度也没有进行任何处理的(我可以肯定),也只是把他们简单的按照单个字分开,然后查询的时候条件是这两个字或者这三个字必须连接在一起,中间没有任何其他的字。要证明这点也很简单,大家只要输入任意两个字的词或者三个字的词进行搜索就可以了,甚至你可以搜索“甘新哦”,“春天气”,“哦人无”等毫无意义的词进行查询,看是不是出来的搜索结果要么是没有找到任何内容,要么是包括你输入了的任何字,而且这些字都是连接在一起的,虽然这些字他们之间的组合是毫无意义,这也同时证明了百度在索引入库的时候是只进行了简单的按照单个中文分开。
3.百度如何处理四个字?我们输入“李宇春天”搜索,结果是被分成了“李宇”和“春天”,这给我们带来了两个疑问:第一,如果李宇春已经收录到了词典里面,那么肯定肯定百度是正向分词。第二,如果李宇春没有被收录到词典里面,那么可能是正向分词也可能是逆向分词。那么到底是那种呢?我们先判断百度处理查询关键子的时候是逆向分词还是正向分词。我们再输入“笔畅通行”来搜索他被分成了“畅通”,我想笔畅应该不会被收进词典,按此分析应该是正向分词;我们再输入“笔畅通知”,很明显被分成了“笔畅”和“通知”,这看起来是逆向分词的结果,如果是正向的话那也会被分成“畅通”的;我们再输入“桃李宇春”搜索,结果被分成了“桃李”和“宇春”,这看起来象正向分词,当然这也不能够证明就是逆向,因为如果李宇春没有收进词典,这逆向分词也会得到同样的结果。那么百度到底是正向还是逆向呢?我们抛开名字吧,因为我们还不感肯定象李宇宙春之类的词是不是在百度的词典里面,现在我们输入“神彩票啊”,很明显被分成了“彩票”,再输入“光彩票啊”,很明显也被风成了“彩票”,再输入“啊中国家”,结果被分成了“国家”,再搜索“啊国家庭”,被风成了“家庭”,我们再输入“风岁月亮”搜索,被分成了风岁和月亮,再输入“风岁月球”,被分成了“分”,“岁月”和“球”,再输入“风岁月份”,被分成了“分色”和“月份”,这样的结果看起来真的很让我们郁闷!!!极度郁闷!!更郁闷的是还在后头啊,我输入“笔畅通过”搜索,第一次的所有结果是全部把这四个字搜索出来,而且他们都是连接在一起的,而且这四个字之间没有任何其他的字!!但是我们过几分钟再次搜索,结果竟然截然不同!!!“笔畅通过”被分成了“畅通”!!!!这里我不敢乱下结论,如果是我,那我应该怎么样去处理四个字的关键字呢?
一, 首先取这四个字去匹配词典,如果匹配成功,则查询条件如ABCD,返回的结果必须包含ABCD,且ABCD必须连接在一起,中间没有任何其他字,在这里我首先假设索引入库的时候是只进行了简单的按照单个字切分,且搜索的时候能够判断索引文件里的A/B/C/D等文字中间有没有其他的文字。
二, 如果一匹配不成功,则截取前面两个字匹配词典,如果匹配成功,则如ABCD分成AB/CD,查询结果必须包含AB和CD,AB之间不能够有其他文字,CD之间也不能够有其他文字,AB和CD之间可以出现其他文字;查询结果可以包含ABCD全部连接在一起四个字之间没有其他文字的结果,且其排序优先于AB/CD。
三, 如果二匹配不成功,则截取最后面两个字匹配字典,如果匹配成功,采取和上面二一样的做法。
四, 如果三匹配不成功,则截取中间两个字匹配词典,如果匹配成功,则如ABCD查询的结果里面必须BC,且BC之间没有其他文字,结果也可以包含BCD,结果也可以包含ABC,结果也可以包含ABCD,结果排序优先规则(从最优开始):ABCD全部连接在一起的结果------BCD全部连接在一起的结果或ABC全部连接在一起的结果------BC全部连接在一起的结果。
五, 如果四匹配不成功,则可以肯定他是地名人名或者其他专有名词或者这四个字连起来没有任何意义,则采用一的方法。
暂时写到这吧,其他的慢慢来