Jieba分词包(三)——基于词频最大切分组合
在前面,我们已经知道dict中所有的单词和词频信息已经存在了一个trie树中,并且需要分词的句子已经构建成了一个DAG图,构建的过程也运用了dict。那么这次我们来说如何基于每句话的DAG图,找到一个组合路径,使得该组合最合理(即打分最高)?
我们直接针对Jieba分词的源代码来解释,其中已经有了很多注释:
def calc(sentence,DAG,idx,route): #动态规划,计算最大概率的切分组合
#输入sentence是句子,DAG句子的有向无环图
N = len(sentence) #句子长度
route[N] = (0.0,'')
for idx in xrange(N-1,-1,-1): #和range用法一样,不过还是建议使用xrange
#可以看出是从后往前遍历每个分词方式的
#下面的FREQ保存的是每个词在dict中的频度得分,打分的公式是 log(float(v)/total),其中v就是被打分词语的频数
#FREQ.get(sentence[idx:x+1],min_freq)表示,如果字典get没有找到这个k