今天在博客园看了 一个开源的分词 软件 “盘古分词”。下载下来后,发现是vs 2008 版本的,花了点时间转换成 2005格式的版本。
编译了以后,跟踪了一下代码,代码应该是高手写的,非常的清晰。只是因为没有文档,时间有限,不能深入研究它的算法。基本的算法是这样的:
比如句子:“盘古分词 简介: 盘古分词 是由eaglet 开发的一款基于字典的中英文分词组件”
先根据 非中文符号,对句子进行切分,如下:
盘古分词/ /简介/: /盘古分词/ /是由/eaglet/ 开发的一款基于字典的中英文分词组件
然后,对上面的每个部分进行 切分,切分的算法没有仔细看,估计是最大正向匹配,应该不是统计分词的算法。
在这个过程中,还对人名进行识别。人名识别,用的不是统计方法,具体的没有仔细看。
现在分词中,准确率最高的是 统计分词,google 的分词 按照其员工 吴军 的说法就是统计方法。所以我估计盘古分词的准确率不会很高。
比如下面的句子:邓颖超生于1916年
我用中科院的分词 分出的结果是 邓颖超/生于/1986年/,是对的。
用盘古分词的结果是 邓/颖/超生/于/1916/年/ 不是很准确。
盘古分词的字典算法是用汉字的第一个字做索引,字典大起来的话,可能效率不是很高,这里可能要改进一下。
机械分词最好的(我测试过的,个人感觉)
http://www.ftphp.com/scws/demo/v4.php 这个项目也是开源的,字典非常大,估计用了40万字,它的字典算法非常的好,用的是 平衡二叉树。
盘古分词如果要精度更高,个人认为提高字典的速度和质量是一个方法,添加一本30万字以上的字典。一般来说,机械分词的准确性,主要决定于字典。