jieba 分词基础 (下)
调整词典
使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。
使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。
注意:自动计算的词频在使用 HMM 新词发现功能时可能无效。
对字典进行调整示例:
词性标注
jieba.posseg.POSTokenizer(tokenizer=None) 新建自定义分词器,tokenizer 参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。
标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法。
用法示例
# 词性标注
import jieba.posseg as pseg
words = pseg.cut("我爱北京天安门")
# words类别为:generator
for word, flag in words:
print('%s %s' % (word, flag))
关键词提取
基于 TF-IDF(term frequency–inverse document frequency) 算法的关键词抽取
import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence :为待提取的文本
topK: 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
withWeight : 为是否一并返回关键词权重值,默认值为 False
allowPOS : 仅包括指定词性的词,默认值为空,即不筛选
# 基于TF-IDF算法的关键词抽取
# 基于TF-IDF算法的关键词抽取
import jieba
import jieba.analyse
sentence = '全国港澳研究会会长徐泽在会上发言指出,学习系列重要讲话要深刻领会主席关于香港回归后的宪制基础和宪制秩序的论述,这是过去20年特别是中共十八大以来一国两制在香港实践取得成功的根本经验。首先,要在夯实 香港的宪制基础、巩固香港的宪制秩序上着力。只有牢牢确立起一国两制的宪制秩序,才能保证一国两制实践不走样 、不变形。其次,要在完善基本法实施的制度和机制上用功。中央直接行使的权力和特区高度自治权的结合是特区宪制秩 序不可或缺的两个方面'
keywords = jieba.analyse.extract_tags(sentence, topK=20, withWeight=True, allowPOS=('n','nr','ns'))
# print(type(keywords))
# <class 'list'>
for item in keywords:
print(item[0],item[1])
基于 TextRank 算法的关键词抽取
ieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=(‘ns’, ‘n’, ‘vn’, ‘v’)) 直接使用,接口相同,注意默认过滤词性。
jieba.analyse.TextRank() 新建自定义 TextRank 实例
基本思想:
将待抽取关键词的文本进行分词
以固定窗口大小(默认为5,通过span属性调整),词之间的共现关系,构建图
计算图中节点的PageRank,注意是无向带权图
import jieba
import jieba.analyse
sentence = '全国港澳研究会会长徐泽在会上发言指出,学习系列重要讲话要深刻领会主席关于香港回归后的宪制基础和宪制秩序的论述,这是过去20年特别是中共十八大以来一国两制在香港实践取得成功的根本经验。首先,要在夯实 香港的宪制基础、巩固香港的宪制秩序上着力。只有牢牢确立起一国两制的宪制秩序,才能保证一国两制实践不走样 、不变形。其次,要在完善基本法实施的制度和机制上用功。中央直接行使的权力和特区高度自治权的结合是特区宪制秩 序不可或缺的两个方面'
# 基于TextRank算法的关键词抽取
keywords = jieba.analyse.extract_tags(sentence, topK=20, withWeight=True, allowPOS=('n','nr','ns'))
# type(keywords)
# <class 'list'>
for item in keywords:
print(item[0],item[1])
Tokenize
返回词语在原文的起止位置
此功能输入参数只接受 unicode
默认模式
搜索模式
#encoding=utf-8
from __future__ import unicode_literals #将模块中显式出现的所有字符串转为unicode类型
import jieba
result = jieba.tokenize('彼此挟持这另一部分的自已') #默认模式进行分词,Tokenize: 返回词语在原文的起止位置
print("默认模式为:")
for tk in result:
print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
result = jieba.tokenize(u'彼此挟持这另一部分的自已', mode='search')
print("搜索模式为:")
for tk1 in result:
print("word %s\t\t start: %d \t\t end:%d" % (tk1[0],tk1[1],tk1[2]))
对《西游记》进行分词处理(尚未解决的问题)
python -m jieba xiyouji.txt >xiyouji_cutcopy.txt
利用上述代码进行对于西游记的分词 出现了下列的情况
程序显示 创建 copy成功,但是在分词到0xfe之后 就无法进行分词
从两个文本的大小我们可以看出 ,cutcopy 并未完成所有的任务,而是其中的一小部分进行了分词。