赞
踩
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=(), withFlag=False)#topK 表示返回最大权重关键词的个数,None表示全部#withWeight表示是否返回权重,是的话返回(word,weight)的list#allowPOS仅包括指定词性的词,默认为空即不筛选。
jieba.analyse.textrank(self, sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'), withFlag=False)#与TF-IDF方法相似,但是注意allowPOS有默认值,即会默认过滤某些词性。
(3)并行分词
jieba.enable_parallel(4) #开启并行分词模式,参数为并行进程数,默认全部
jieba.disable_parallel() #关闭并行分词模式
代码研读与工作流程分析
整体工作流程
jieba分词主要通过词典来进行分词及词性标注,两者使用了一个相同的词典。正因如此,分词的结果优劣将很大程度上取决于词典,虽然使用了HMM来进行新词发现。
jieba分词包整体的工作流程如下图所示:
分词
jieba分词中,首先通过对照典生成句子的有向无环图,再根据选择的模式不同,根据词典寻找最短路径后对句子进行截取或直接对句子进行截取。对于未登陆词(不在词典中的词)使用HMM进行新词发现。
a.精确模式与全模式
b.搜索引擎模式
a图中演示了分词的主要过程,但是其中只演示了被切分出来的一个子字符串的分词操作过程,在实际操作流程中,将对每一个子字符串都分别进行图中的处理,最后将切分的分词结果与非汉字部分依次连接起来,作为最终的分词结果。
如果开启了HMM,那么将会连起来不在词典中出现的连续单字进行新词发现。比如例子中的“真好啊”,词典中没有这个词,所以会拿去HMM模型中进行新词发现;但是如果原句是“今天天气真好”,基于词典切分为“今天天”“真”“好”,词典中有“真好”一词,但是因为频率小所以未被选择为最佳路径,所以“真”“好”两个字不会被拿去做新词发现(即便其通过HMM的结果将会是“真好”),最终分词结果将是“今天天气”“真”“好”。
词典的格式应为
word1 freq1 word_type1
word2 freq2 word_type2
…
其中自定义用户词典中词性word_type可以省略。
词典在其他模块的流程中可能也会用到,为方便叙述,后续的流程图中将会省略词典的初始化部分。
图b演示了搜索引擎模式的工作流程,它会在精确模式分词的基础上,将长词再次进行切分。
HMM与新词发现
在这里我们假定读者已经了解HMM相关知识,如果没有可先行阅读下一章内容中的HMM相关部分或者跳过本节。
在jieba分词中,将字在词中的位置B、M、E、S作为隐藏状态,字是观测状态,使用了词典文件分别存储字之间的表现概率矩阵(finalseg/prob_emit.py)、初始概率向量(finalseg/prob_start.py)和转移概率矩阵(finalseg/prob_trans.py)。这就是一个标准的解码问题,根据概率再利用viterbi算法对最大可能的隐藏状态进行求解。
HMM工作流程
上图简单示范了jieba分词中新词发现模块的工作流程,其具体计算过程可参考附录内容,为求页面整齐,这里不再累述。
在最后时刻,即“啊”对应的时刻里,最大概率的为S,而
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。