1.正向最大匹配算法
基于词典的正向最大匹配算法(最长词优先匹配),算法会根据词典文件自动调整最大长度,分词的好坏完全取决于词典。
算法流程图如下:
以上内容参见:http://yangshangchuan.iteye.com/blog/2031813
此文章还对比了linked list、array、trie树和hash table的方式实现正向最大匹配算法的性能对比!其中trie书和hash table的性能对比比较有意思!
2.逆向最大匹配算法
逆向最大匹配算法的实现思想参见上图的算法流程图,其区别有两点(红字标示):
从S1的尾部逆向选择长度不大于MaxLen的字符作为W,然后去字典中查询,如果查询不到,将W最左边的一个字去掉。
最大匹配算法的特点:
最大匹配算法在大型搜索系统中的使用频率较低,其主要问题有以下几点:
长度限制: 由于最大匹配法必须首先设定一个匹配词最大长度的初始值,这个长度限制是最大匹配法在效率与词长之间的一种妥协。因此:
词长过短,长词就会被切错。
词长过长,效率就比较低。
效率低: 由于很多词长会低于最大匹配的长度,因此,会造成大量的匹配浪费。
不能处理歧义和重叠字(不理解)
3.正向最小匹配算法
比如我们切分句子: “中华人民共和国万岁万岁万万岁”,使用正向最大匹配算法的切分结果为:[中华人民共和国, 万岁,万岁, 万万岁],可以看到,切分出来的词是很长的,粒度很粗,如果我们想要切分出很细粒度的词,该怎么办呢?——正向最小匹配算法。该算法和正向最大匹配算法相得益彰,一个强调细粒度,一个强调粗粒度。使用正向最小匹配算法,必须注意的一点是:词典中不能有单字词,词的长度至少为2!
最小匹配算法特点:
由于最小切分每次都只需要获得最小批评的词,速度快;
其次,在词典相对完善的情况下,该切分方法可以获得较好的准确率;
当前,Sf1r中使用,最小匹配方式。
4.统计分词算法
……
5.条件随机场算法
……