博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中文分词算法工具hanlp源码解析
阅读量:7208 次
发布时间:2019-06-29

本文共 837 字,大约阅读时间需要 2 分钟。

词图

 

词图指的是句子中所有词可能构成的图。如果一个词A的下一个词可能是B的话,那么A和B之间具有一条路径E(A,B)。一个词可能有多个后续,同时也可能有多个前驱,它们构成的图我称作词图。

需要稀疏2维矩阵模型,以一个词的起始位置作为行,终止位置作为列,可以得到一个二维矩阵。例如:“他说的确实在理”这句话

 

be1aeeb7d3979ef376e8191f1b98df296e0bc8fc

图词的存储方法:一种是的DynamicArray法,一种是快速offset法。Hanlp代码中采用的是第二种方法。

1、DynamicArray(二维数组)法

在词图中,行和列的关系:col为n 的列中所有词可以与row为n 的所有行中的词进行组合。例如“的确”这个词,它的col =5,需要和它计算平滑值的有两个,分别是row =5的两个词:“实”和“实在”。但是在遍历和插入的时候,需要一个个比较col和row的关系,复杂度是O(N)。

快速offset

一个一维数组,每个元素是一个单链表“的确”的行号是4,长度是2,4+2=6,于是第六行的两个词“实/实在”就是“的确”的后续。

同时这种方法速度非常快,插入和查询的时间都是O(1)。

ea10e1de4a19631e28f6b5326cfea1681641d7c5

Hanlp核心词典:

 4a2f7757355aaa9d15e62323ac76fd8b1c5f35e9

最短路径算法—viterbi(动态规划路径)

 

46414ffc854e3acfc7e9b753b2df2ae42fe9538a

Frequency:核心词典中的词频

nTwoWordsFreq:共现词频

intMAX_FREQUENCY= 25146057

double dTemp =(double) 1 / MAX_FREQUENCY +0.00001

dSmoothingPara =0.1

Viterbi最短路径有向图

4902c3df1a285bbb5af6dfba18b0c945dd09b1d7 

图5

1、计算过程从上至下,根据计算出的权重值变更前驱结点,保证前驱结点唯一(动态规划路径)

2、计算结束后,从最后一个结点开始取出term,依次取出该结点的前驱结点即可分词结果:理,在,确实,的,说,他

 

作者:亚当-adam

原文:https://blog.csdn.net/zhaojianting/article/details/78194317

你可能感兴趣的文章
随记:更新特定软件yum源
查看>>
TOP命令
查看>>
IT互联网领军者眼中的2013年
查看>>
c++的for循环居然可以精简成这样!
查看>>
体育馆管理系统开发日记 11
查看>>
solr查询语法详解
查看>>
Ubuntu下查看系统的版本号和内核版本号
查看>>
25.Azure备份服务器(中)
查看>>
博文莫名其妙的消失了是什么情况?
查看>>
python 基础 day2
查看>>
vsphere6.0的vc架构部分更新(1)
查看>>
java处理excel的一点实践积累
查看>>
流媒体平台搭建
查看>>
LVS+Keepalived构建高可用负载均衡群集
查看>>
乘积小于k的子数组的个数 Subarray Product Less Than K
查看>>
网易——下厨房
查看>>
红帆移动OA 1.0.1版本已经发布
查看>>
Centos 6.2 安装 iTop2.0.2 步骤
查看>>
chown: /usr/local: Operation not permitted问题解决
查看>>
我的友情链接
查看>>