Life is short,I need python . NPL jieba分词基础(下)

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 并未完成所有的任务,而是其中的一小部分进行了分词。
在这里插入图片描述

在这里插入图片描述

出现上述的问题之后 ,我尝试将xiyouji.txt 的编码改成 uncode 和 UTF-8但是 运行后的cutcopy 文件为0KB。问题尚未解决。 个人认为,在操作方式相同,文本无误的情况之下,应该是由于python2 和python3之间的版本的兼容问题造成的。

猜你喜欢

转载自blog.csdn.net/quyuquan2014/article/details/86553998