IK分词器实现原理

1、IK分词器也是基于正向匹配的分词算法。

2、IK分词器,基本可分为两种模式,一种为smart模式,一种为非smart模式

3、非smart模式所做的就是将能够分出来的词全部输出;smart模式下,IK分词器则会根据内在方法输出一个认为最合理的分词结果,这就涉及到了歧义判断

4、Lexeme 词元,compareTo(Lexeme other)这个方法决定了词元在链路中的位置

5LexemePath词元链,分词的一种结果,根据前后顺序组成一个链式结构,其实就是由交叉的Lexeme 组成的有序集合QuickSortSet

。LexemePath也是实现Comparable接口的,用于歧义分析

实例:张三说的确实在理

根据正向匹配可能的词元链:

L1:{张三,张,三}

L2:{说}

L3:{的确,的,确实,确,实在,实,在理,在,理}

LexemePath之间是不交叉的,LexemePath内部的词元间是交叉的

下面是核心代码

public intcompareTo(Lexemeother) {

//起始位置优先

       if(this.beginother.getBegin()){

            return -1;

       }elseif(this.begin== other.getBegin()){

       //词元长度优先

       if(this.lengthother.getLength()){

       return-1;

       }elseif(this.length== other.getLength()){

       return0;

       }else{//this.lengthother.getLength()

       return1;

       }

       }else{//this.beginother.getBegin()

       return1;

       }

}

 

如果是非smart模式,分词到词结束,把所有的词元全部返回即可

在smart模式下需进行消除岐义.

消除岐义的算法和步骤如下

LexemePath中不交叉词元组成新的LexemePath

L1对应的词元链如下:

L11:{张三}

L12:{}

L13:{}

L3对应的词元链如下

L31:{,确实,在理}

L32:{的确,,在理}

L33:{的确,实在,}

L34:{的确,实在}

L35:{确实,在理}

L36:{确实}

 

smart模式岐义消除算法:

public intcompareTo(LexemePatho) {

规则1:比较有效文本长度

L31:{的,确实,在理}

L32:{的确,实,在理}

L33:{的确,实在,理}

规则2: //比较词元个数,越少越好

规则3: //路径跨度越大越好

规则4: //根据统计学结论,逆向切分概率高于正向切分,因此位置越靠后的优先(从代码中看来

没有发现其具体实际意义)

规则5: //词长越平均越好(词元长度相乘)

规则6: //词元位置权重比较(词元长度积),含义是选取长的词元位置在后的集合

L31:{的,确实,在理}1*1+2*2+3*2=11

L32:{的确,实,在理} 1*2+2*1+3*2=10

L33:{的确,实在,理} 1*2+2*2+3*1=9

最后的分词结果:张三,说,的,确实,在理

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值