【python】Word Cloud


1 准备工作

1.1 导入必要的库

import jieba
import numpy as np
from PIL import Image
from wordcloud import WordCloud 
import matplotlib.pyplot as plt
import re
import collections

缺什么 pip install 什么,比如 jiebawordcloud

在这里插入图片描述

1.2 jieba 的介绍

jieba 是一个非常好用的中文工具,是以分词起家的,但是功能比分词要强大很多。
jieba.cut 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode)。

jieba.cut 方法接受三个输入参数:

  • 需要分词的字符串
  • cut_all 参数用来控制是否采用全模式,一般情况下,cut_all为False
  • HMM 参数用来控制是否使用 HMM 模型
list0 = jieba.cut('我原来是一名建筑工人,后来喜欢上了 Python 语言', cut_all=True)
print(list0)
print(type(list0))
print("全模式:",list(list0))

list1 = jieba.cut('我原来是一名建筑工人,后来喜欢上了 Python 语言', cut_all=False)
print("精准模式:",list(list1))

output

<generator object Tokenizer.cut at 0x000002083CE81F10>
<class 'generator'>
全模式: ['我', '原来', '是', '一名', '建筑', '建筑工人', '工人', '', '', '后来', '喜欢', '上', '了', '', 'Python', '', '语言']
精准模式: ['我', '原来', '是', '一名', '建筑工人', ',', '后来', '喜欢', '上', '了', ' ', 'Python', ' ', '语言']

可以看到全模式有点咬文嚼字,婆婆妈妈,把 建筑工人 解读为建筑建筑工人工人,哈哈哈!

1.3 材料的准备

1)文本准备
准备好一份自己需要分析的文本材料,我这里节选的是卡夫卡的变形记

然后复制保存在 2.txt

2)图片的准备
选择的是《火影忍者》日漫中人气较高的角色,宇智波鼬!哈哈,小时候喜欢“好人阵营”,长大了慢慢会欣赏所谓的 “反派”!

在这里插入图片描述

2 词频统计

获得到文本时,需要对文本进行文本预处理、文本分词以及词频统计!
参考 python读取中文txt文本的方法

#coding:utf-8
data_txt = open(r"C:\Users\13663\Desktop\2.txt",encoding='gbk').read()

#文本预处理
pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"')
data_txt = re.sub(pattern, '', data_txt)

#文本分词
cut_txt = jieba.cut(data_txt)
object_list=[]
remove_words = [u"的",u'对',u'等',u'能',u'都',u'。',u' ',u'、',u'中',u'在',u'了',u',',u'“',u'”',u'一个',u'是']

#词频统计
for word in cut_txt:
    if word not in remove_words:
        object_list.append(word)

word_counts = collections.Counter(object_list)

这里 remove_words 我没有修改参考文章中的,就是排除一些高频的无关的词,比如

3 Word Cloud

wordcloud 把词云当作一个对象,它可以将文本中词语出现的频率作为一个参数绘制词云,而词云的大小、颜色、形状等都是可以设定的。

WordCloud方法的参数如下:

  • width:指定词云对象生成的图片的宽度(默认为200px)
  • height:指定词云对象生成的图片的高度(默认为400px)
  • min_font_size:指定词云中字体最小字号,默认为4
  • max_font_size:指定词云中字体最大字号
  • font_step:指定词云中字体之间的间隔,默认为1
  • font_path:指定字体文件路径
  • max_words:指定词云中能显示的最多单词数,默认为200
  • stop_words:指定在词云中不显示的单词列表
  • background_color:指定词云图片的背景颜色,默认为黑色
  • mask:定义词频背景

说明一下:如果设置了mask参数,那么width、height参数将无效

word_cloud 生成词云有两个方法。from text 和 from frequencies 。即文本生成和频率生成,每一个都有对应的函数可以使用,如下:

  • wd.generate(txt) 向WordCloud 对象w中加载文本txt
  • wd.generate_from_frequencies(word_counts) 向WordCloud 对象wd中加载词语频率
#定义词频背景
background_image = np.array(Image.open(r'C:\Users\13663\Desktop\1.png'))
font_path=r"C:\Users\13663\Desktop\simkai.ttf"#这里我用的是华文行楷,去控制面板字体里面找你想要的字体即可

wd = WordCloud(
    font_path=font_path,  #设置字体格式,不然会乱码
    background_color="white",  #设置背景颜色
    mask=background_image   #设置背景图
).generate_from_frequencies(word_counts)

#保存词云图
wd.to_file(r'C:\Users\13663\Desktop\2.png')
#显示词云图
plt.imshow(wd,interpolation="bilinear")
plt.axis("off")
plt.show()

在这里插入图片描述
哈哈,当然,你也可以把一些你觉得无关紧要的词去掉,统计更为有意义的信息!从这个图中,我们至少可以看出,文章以第三人称描述的,哈哈哈哈哈哈!

当然英文也完全OK!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值