我们讨论的分词算法可分为三大类:基于字典、词库匹配的分词方法。基于词频度统计的分词方法和基于知识理解的分词方法。
下面简要介绍几种常用方法:。
1)逐词遍历法。
2)基于字典、词库匹配的分词方法(机械分词法)。
这种方法按照一定策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功。识别出一个词,根据扫描方向的不同分为正向匹配和逆向匹配。根据不同长度优先匹配的情况,分为最大(最长)匹配和最小(最短)匹配。根据与词性标注过程是否相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用的方法如下:。
(一)最大正向匹配法 (MaximumMatchingMethod)通常简称为MM法。
如果匹配成功,则,。
a)把这个匹配字段作为一个词切分出来,放入分词统计表中。
b)把当前位置计数器的值加上匹配字段的长度。
c)跳转到步骤2)。
否则。
a) 如果匹配字段的最后一个字符为汉字字符。
则把匹配字段的最后一个字去掉。
?? 匹配字段长度减2。
否则把匹配字段的最后一个字节去掉。
?????? 匹配字段长度减1。
b)跳转至步骤3)。
否则a)如果匹配字段的最后一个字符为汉字字符,。
则 当前位置计数器的值加2。
?? 否则当前位置计数器的值加1。
b)跳转到步骤2)。
(二)逆向最大匹配法 (。
由于汉语中偏正结构较多,若从后向前匹配,可以适当提高精确度。所以,逆向最大匹配法比正向最大匹配法的误差要小。统计结果表明 ,单纯使用正向最大匹配的错误率为 1/16 9,单纯使用逆向最大匹配的错误率为 1/245。例如切分字段“硕士研究生产”,正向最大匹配法的结果会是“硕士研究生 / 产”,而逆向最大匹配法利用逆向扫描,可得到正确的分词结果“硕士 / 研究 / 生产”
(三)最少切分法:使每一句中切出的词数最小。
3)。全切分和基于词的频度统计的分词方法。
基于词的频度统计的分词方法是一种全切分方法。在讨论这个方法之前我们先要明白有关全切分的相关内容。
全切分。
全切分要求获得输入序列的所有可接受的切分形式,而部分切分只取得一种或几种可接受的切分形式,由于部分切分忽略了可能的其他切分形式,所以建立在部分切分基础上的分词方法不管采取何种歧义纠正策略,都可能会遗漏正确的切分,造成分词错误或失败。而建立在全切分基础上的分词方法,由于全切分取得了所有可能的切分形式,因而从根本上避免了可能切分形式的遗漏,克服了部分切分方法的缺陷。
1)全切分算法只是能获得正确分词的前提,因为全切分不具有歧义检测功能,最终分词结果的正确性和完全性依赖于独立的歧义处理方法,如果评测有误,也会造成错误的结果。
2)全切分的切分结果个数随句子长度的增长呈指数增长,一方面将导致庞大的无用数据充斥于存储数据库。另一方面当句长达到一定长度后,由于切分形式过多,造成分词效率严重下降。
基于词的频度统计的分词方法:。
4)基于知识理解的分词方法。
5)一种新的分词方法。
并行分词方法:这种分词方法借助于一个含有分词词库的管道进行 ,比较匹配过程是分步进行的 ,每一步可以对进入管道中的词同时与词库中相应的词进行比较 ,由于同时有多个词进行比较匹配 ,因而分词速度可以大幅度提高。这种方法涉及到多级内码理论和管道的词典数据结构。(详细算法可以参考吴胜远的《并行分词方法的研究》。)。
1。 庖丁解牛分词包,适用于与Lucene整合。
高效率:在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字。
能够对未知的词汇进行合理解析。
2。 LingPipe,开源自然语言处理的Java开源工具包。
3。 JE分词包。
采用C++开发,同时支持Linux平台和Windows平台,切分速度大约在300K/s(PM-1.2G),截至当前版本(0.7。1)。
LibMMSeg没有为速度仔细优化过,进一步的提升切分速度应仍有空间。
IKAnalyzer基于lucene2.0版本API开发,实现了以词典分词为基础的正反向全切分算法,是LuceneAnalyzer接口的实现。
不适合用于知识挖掘和网络爬虫技术,全切分法容易造成知识歧义,因为在语义学上”人民”和”人民币”是完全搭不上关系的。
ICTCLAS 3.0 商业版是收费的,而免费提供的 ICTCLAS 3.0 共享版不开源,词库是根据--一个月的语料得出的,很多词语不存在。所以本人对ICTCLAS分词后的结果,再采用逆向最大匹配算法,根据自己补充的一个9万条词语的自定义词库(与ICTCLAS词库中的词语不重复),对ICTCLAS分词结果进行合并处理,输出最终分词结果。