jieba分词用到了DAG分词法。在此介绍其原理:
jieba分词流程图
第一步:分句
通过正则表达式,将文章内容切分,形成一个句子数组,这个比较好理解
第二步:构建DAG词图
下述程序其实是找以每个字为开头的成词位置,即构造出句子的有向无环图(DAG),就是一个字典。
构建DAG
对句子中的每个字进行分析,从该字右边一位开始,看sentence[k:i+1]这个词语是否在预设的字典中,这个字典保存了常用的词语(和词语的一部分,但权重为0)和其权重。如果有,并且如果字典中的这个词的权值不等于0,那么就将i放到tmplist里,然后i+=1,继续往右看一个字。如果没有这个词,那就停下来,然后移动k,让k=k+1,找下一个字的成词位置。
比如有这样一个句::'我从海淀区搬到了朝阳区'。一共11个字,通过上面的计算,得到一个字典:::{0: [0], 1: [1], 2: [2, 3, 4], 3: [3, 4], 4: [4], 5: [5, 6], 6: [6], 7: [7], 8: [8, 9, 10], 9: [9], 10: [10]}。这个字典就是DAG。字典的key代表每个字在字符串中的位置,比如,0代表'