jieba源代码解析——四种分词模式(二)

本文深入探讨jieba分词中的有向无环图(DAG)构造过程,阐述如何利用DAG进行分词。通过Python实现详细解析get_DAG函数,介绍如何从前缀词典中获取可能的词语结束位置,从而提高分词效率。
摘要由CSDN通过智能技术生成

2021SC@SDUSC
2021SC@SDUSC

在上一篇我们讲述了如何生成前缀词典,那么今天则进行下一步,有向无环图的构造。
2021SC@SDUSC
2021SC@SDUSC

学过数据结构的同学对有向无环图DAG肯定都不陌生,但是与我们平常使用的C或C++不同,在jieba分词中,对每个字都是通过在文本中的位置来标记的,因此可以构建一个以位置为key,相应划分的末尾位置构成的列表为value的映射,因此,jieba采用了Python的dict结构,可以更方便的表示DAG。最终的DAG是以{k : [k , j , …] , m : [m , p , q] , …}的字典结构存储,其中k和m为词在文本sentence中的位置,k对应的列表存放的是文本中以k开始且词sentence[k: j + 1]在前缀词典中的 以k开始j结尾的词的列表,即列表存放的是sentence中以k开始的可能的词语的结束位置,这样通过查找前缀词典就可以得到词。
get_DAG(self, sentence)函数进行对系统初始化完毕后,会构建有向无环图。
从前往后依次遍历文本的每个位置,对于位置k,首先形成一个片段,这个片段只包含位置k的字,然后就判断该片段是否在前缀词典中,如果这个片段在前缀词典中,如果词频大于0,就将这个位置i追加到以k为key的一个列表中;如果词频等于0,则表明前缀词典存在这个前缀,但是统计词典并没有这个词,继续循环;
如果这个片段不在前缀词典中,则表明这个片段已经超出统计词典中该词的范围,则终止循环; 然后该位置加1,然后就形成一个新的片段,该片段在文本的索引为

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值