1.jieba库的基本介绍
jieba 是目前表现较为不错的 Python 中文分词组件,它主要有以下特性:
- 支持四种分词模式:
- 精确模式
- 全模式
- 搜索引擎模式
- paddle模式
- 支持繁体分词
- 支持自定义词典
- MIT 授权协议
2.jieba库使用
jieba.cut 和jieba.lcut
lcut 将返回的对象转化为list对象返回
参数解析
import jieba
jieba.cut(sentence, cut_all=False, HMM=True, use_paddle=False):
# sentence: 需要分词的字符串;
# cut_all: 参数用来控制是否采用全模式;
# HMM: 参数用来控制是否使用 HMM 模型;
# use_paddle: 参数用来控制是否使用paddle模式下的分词模式,paddle模式采用延迟加载方式,通过enable_paddle接口安装paddlepaddle-tiny
精确模式(默认)
试图将句子最精确地切开,适合文本分析,不存在冗余单词
jieba_content = jieba.cut(join_contents, cut_all=False)
全模式
把文本中所有可能的词语都扫描出来,速度非常快,有冗余
jieba_content = jieba.cut(join_contents, cut_all=True)
搜索引擎模式
在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词
jieba_content = jieba.cut_for_search(join_contents, cut_all=True)
paddle模式
利用 PaddlePaddle 深度学习框架,训练序列标注(双向GRU)网络模型实现分词。同时支持词性标注。
paddle 模式使用需安装 paddlepaddle-tiny,pip install paddlepaddle-tiny==1.6.1。
目前paddle模式支持jieba v0.40及以上版本。
jieba v0.40以下版本,请升级jieba,pip installjieba --upgrade。 PaddlePaddle官网
import jieba
jieba.enable_paddle()
jieba_content = jieba.cut(join_contents, use_paddle=True)
词性筛选
标注 | 解释 | 标注 | 解释 | 标注 | 解释 |
---|---|---|---|---|---|
a | 形容词 | mq | 数量词 | tg | 时语素 |
ad | 副形词 | n | 名词 | u | 助词 |
ag | 形语素 | ng | 例:义 乳 亭 | ud | 例:得 |
an | 名形词 | nr | 人名 | ug | 例:过 |
b | 区别词 | nrfg | 也是人名 | uj | 例:的 |
c | 连词 | nrt | 也是人名 | ul | 例:了 |
d | 副词 | ns | 地名 | uv | 例:地 |
df | 例:不要 | nt | 机构团体 | uz | 例:着 |
dg | 副语素 | nz | 其他专名 | v | 动词 |
e | 叹词 | o | 拟声词 | vd | 副动词 |
f | 方位词 | p | 介词 | vg | 动语素 |
g | 语素 | q | 量词 | vi | 例:沉溺于 等同于 |
h | 前接成分 | r | 代词 | vn | 名动词 |
i | 成语 | rg | 例:兹 | vq | 例:去浄 去过 唸过 |
j | 简称略语 | rr | 人称代词 | x | 非语素字 |
k | 后接成分 | rz | 例:这位 | y | 语气词 |
l | 习用语 | s | 处所词 | z | 状态词 |
m | 数词 | t | 时间词 | zg | 例:且 丗 丟 |
词性筛选
import jieba.posseg as pseg
words = pseg.cut(join_contents)
# lst = [x.word for x in words if x.flag == 'n'] # 只要名词
for word, flag in words:
print(word, flag)
jieba_str = ''.join(contents) # contents ['今天', '明天']
c = wordcloud.WordCloud(font_path='simsun.ttc',background_color='white',width=2560,height=1500, max_words=700)
words = pseg.cut(jieba_str)
word_class = ['v', 'n', 'a', 'ns', 'v', 'LOC']
filter_word = []
for word, flag in words:
if flag in word_class:
filter_word.append(word)
c.generate(' '.join(filter_word))
c.to_file('不踩雷.png')
3、wordcloud
wordcloud
是优秀的词云展示第三方库,以词语为基本单位,通过图形可视化的方式,更加直观和艺术的展示文本。
安装
pip install wordcloud
wordcloud 库把词云当作一个WordCloud对象
wordcloud.WordCloud()代表一个文本对应的词云
可以根据文本中词语出现的频率等参数绘制词云
绘制词云的形状、尺寸和颜色均可设定
以WordCloud对象为基础,配置参数、加载文本、输出文件
常规方法
方法 | 描述 |
---|---|
w.generate ('分割后的分词') |
向WordCloud 对象中加载文本txt。w.generate('python and WordCloud') |
w.to_file(filename) |
将词云输出为图像文件,png或jpg格式 |
import wordcloud
c = wordcloud.WordCloud() #1.配置对象参数
c.generate("wordcloud by python") #2.加载词云文本
c.to_file("pywordcloud.png") #3.输出词云文件
wordcloud如何将文本转化为词云
- 1.分隔:以空格分隔单词
- 2.统计:单词出现次数并过滤
- 3.字体:根据统计配置字号
- 4.布局:颜色环境尺寸
配置对象参数
w= wordcloud.WordCloud(<参数>)
参数 | 描述 |
---|---|
width | 指定词云对象生成图片的宽度,默认400像素w=wordcloud.WordCloud(width=600) |
height | 指定词云对象生成图片的高度,默认200像素w=wordcloud.WordCloud(height=400) |
min_font_size | 指定词云中字体的最小字号,默认4号w=wordcloud.WordCloud(min_font_size=10) |
max_font_size | 指定词云中字体的最大字号,根据高度自动调节w=wordcloud.WordCloud(max_font_size=20) |
font_step | 指定词云中字体字号的步进间隔,默认为1w=wordcloud.WordCloud(font_step=2) |
font_path | 指定文体文件的路径,默认Nonew=wordcloud.WordCloud(font_path="msyh.ttc") |
max_words | 指定词云显示的最大单词数量,默认200w=wordcloud.WordCloud(max_words=20) |
stop_words | 指定词云的排除词列表,即不显示的单词列表w=wordcloud.WordCloud(stop_words="Python") |
mask | 指定词云形状,默认为长方形,需要引用imread()函数from scipy.msc import imread mk=imread("pic.png") w=wordcloud.WordCloud(mask=mk) |
background_color | 指定词云图片的背景颜色,默认为黑色w=wordcloud.WordCloud(background_color="white") |
实例
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# from scipy.misc import imread
from imageio import imread
import jieba
f = open('火影忍者.txt','r',encoding='utf-8')
data = f.read()
res = jieba.lcut(data)
result = ''.join(res)
color_mask = imread('鸣人.jpg')
wc = WordCloud(
mask = color_mask,
font_path=r'search-ms:displayname=“本地磁盘%20(C%3A)”中的搜索结果&crumb=location:C%3A%5C\Fonts\ygyxsziti2.0.ttf',
background_color='yellow',
height=1300,
width=2600,
max_font_size=50,
min_font_size=1,
)
wc.generate(result)
wc.to_file('火影忍者.png')
plt.imshow(wc)
plt.show()