我们将用python3的第三方库wordcloud来做中文词云。通过对2月3日-2月5日国家卫健委的三天记者会实录做词云分析,一定程度上,我们可以得到三天内舆情动向及官方侧重点的变化。


# 第三方库
from wordcloud import WordCloud, ImageColorGenerator
import jieba
import numpy as np
import matplotlib.pyplot as plt
# 第三方库PIL是图片处理库,默认安装,如果没有,就需要自己安装
from PIL import Image

步骤一:输入数据

进入国家卫健委官网,分别将2月3日、2月4日和2月5日记者会内容复制粘贴保存为 2月3日记者会.txt2月4日记者会.txt2月5日记者会.txt

  • 需要注意的是,这里txt文件最好用utf-8编码保存,不然会报出编码错误。
  • 解决方法如下:用记事本打开txt文件,点击‘另存为’,在最下面有‘编码’选项,默认为’ANSI’,如果默认,运行程序会报错,所以需要在‘编码’选项中选择‘utf-8’编码方式,然后保存。用read()函数读取文件时,需要指明解码方式 encoding=‘UTF-8’。
# 数据地址(此处filename为.txt文件所在地址)
filename1 = r'F:\开课吧\RS基础课\2月3日记者会.txt';
filename2 = r'F:\开课吧\RS基础课\2月4日记者会.txt';
filename3 = r'F:\开课吧\RS基础课\2月5日记者会.txt';
# 数据加载
with open(filename1, encoding='UTF-8') as f1:data1 = f1.read();
with open(filename2, encoding='UTF-8') as f2:data2 = f2.read();
with open(filename3, encoding='UTF-8') as f3:data3 = f3.read();

步骤二:jieba中文分词

对于中文词云,在wordcloud之前,需要用jieba将中文分词。这是由于wordcloud是针对英语的,如果文本是中文,则可能将一整段句子展示出来,而通常我们仅仅想要知道一个关键词而已。

那么,什么是分词?很简单,比如这样的一句话,‘我现在居住在成都’,通过jieba分词,结果是‘我’ ‘现在’ ‘居住’ ‘在’ ‘成都’。

分别对data1, data2和data3进行分词。

# 用jieba分别进行分词分析
wordList_jieba1 = jieba.cut(data1, cut_all=False);
wordList_jieba2 = jieba.cut(data2, cut_all=False);
wordList_jieba3 = jieba.cut(data3, cut_all=False);
# 链接成新文档
data1 = ','.join(wordList_jieba1);
data2 = ','.join(wordList_jieba2);
data3 = ','.join(wordList_jieba3);

步骤三:wordcloud词云展示

这里,我们需要注意两个问题:

  • 问题1:wordcloud本来是用来展示英语词云的,直接用中文,生成图片或者是大小方框,或者是乱码;
  • 问题2:解决问题1,即便能生成正常中文词云,也会发现词云中展示的都是‘是’ ‘第一’ ‘第二’ ‘好的’之类无关紧要的词汇。

为了解决第一个问题,我们需要给wordcloud函数传入合适的中文字体信息。一般计算机字体信息在’C:\Windows\Fonts’文件夹,如图:

选择任何一个你喜欢的中文字体,右键,在属性里面找到字体名及后缀.ttf。这里,我选择 隶书,文件名为 SIMLI.ttf。

# 隶书字体
font = r'C:\Windows\Fonts\SIMLI.ttf';

为解决第二个问题,我们引入 停止词 的概念。停止词(stopwords)是wordcloud函数的一个选项,通过指定停止词,wordcloud可以忽略这些停止词,对其他词语进行展示。中文停止词有许多不同的集合,各位可以自行在网上下载使用。

# 设置停止词
# chineseStopWords.txt是在网上下载的,各位可以按需下载
stopwords_filepath =  r'F:\开课吧\RS基础课\chineseStopWords.txt';
all_words = []
with open(stopwords_filepath, 'r') as f:all_words = f.readlines()
stopwords = [word.strip() for word in all_words];
# 往往根据具体展示需要,我们还需要自己添加一些停止词
stopwords.extend(['很多', '情况', '提问', '累计', '发布会', '找到', '回答', '一个', '经历', '特别', '事情', '杨甫徳', '杨甫徳 ','焦雅辉', '尽量', '来看', '一点', '减少', '包括', '昨天', '谢谢', '请问', '发生', '主持人', '当中', '这部分', '有没有', '进一步', '更好', '相关', '发布', '发现', '雪峰', '一是', '对待', '五个', '一种', '感到', '很多', '二是', '提到', '刚才', '很快', '来讲', '确实', '针对']);

接下来,我们可以直接用wordcloud函数生成词云。具体代码为

# 词云分析
wc1 = WordCloud(font_path=font, stopwords=stopwords).generate(data1);
wc2 = WordCloud(font_path=font, stopwords=stopwords).generate(data2);
wc3 = WordCloud(font_path=font, stopwords=stopwords).generate(data3);
# 词云展示
plt.imshow(wc1, interpolation='bilinear');
plt.axis('off');
plt.show();
plt.imshow(wc2, interpolation='bilinear');
plt.axis('off');
plt.show();
plt.imshow(wc3, interpolation='bilinear');
plt.axis('off');
plt.show();

比如这样的

到这里,其实词云已经生成了。但是为了更进一步作出更漂亮的词云,我们可以将词云填充到一个图像里面进行展示。
1、我们在百度图片里面,挑选一个简单的图片,保存,如下

2、以data1为例,运行如下代码

# 我把上图保存在‘F:\开课吧\RS基础课’文件夹中
py_mask = np.array(Image.open('F:\开课吧\RS基础课\mask_for_csdn.jpg'));
# 读取颜色
img_colors = ImageColorGenerator(py_mask);
# 输入wordcloud
wc1 = WordCloud(mask = py_mask, font_path=font, stopwords=stopwords, backgroud_color='white');
# 生成词云
wc1.generate(data1);
# 上色
wc.recolor(color_func=img_colors);
# 展示
plt.imshow(wc1, interpolation='bilinear');
plt.axis('off');
plt.show();

这样,生成的图片如下:

类似的,我们可以生成2月4日和2月5日国家卫健委记者会实录词云图片,如下:


步骤四:分析和结论

实际上,通过对上述三天内容的词云展示,我们可以显然看出来,2月3日的重心在于公布疫情现状和稳定舆论情绪,2月4日的重心在于对现有病人的救治,2月5日的重心在于物资问题。


以上仅仅是非常粗浅的应用,分析和结论也仅仅是浅尝辄止,希望后面有更好的应用。

关于wordcloud函数各个参数的解释,可以去看https://blog.csdn.net/diao49908/article/details/101651729,里面内容非常详细~

用python实现中文词云完整流程(wordcloud、jieba)相关推荐

  1. 使用Python制作中文词云

    使用Python制作中文词云 0 素材 & 库 准备 0.1 文本和图片 0.2 库准备 步骤 1. 准备工作 2. 文本处理 2.1 读取文本 2.2 分词和过滤 2.3 统计词频: 3. ...

  2. python制作中文词云_Python如何生成词云(详解)

    前言 今天教大家用wrodcloud模块来生成词云,我读取了一篇小说并生成了词云,先看一下效果图: 效果图一: 效果图二: 根据效果图分析的还是比较准确的,小说中的主人公就是"程理" ...

  3. 词云python灿烈_如何用Python做中文词云?

    打算绘制中文词云图?那你得先学会如何做中文文本分词.跟着我们的教程,一步步用Python来动手实践吧. 需求 在<如何用Python做词云>一文中,我们介绍了英文文本的词云制作方法.大家玩 ...

  4. python生成中文词云的代码_[python] 基于词云的关键词提取:wordcloud的使用、源码分析、中文词云生成和代码重写...

    1. 词云简介 词云,又称文字云.标签云,是对文本数据中出现频率较高的"关键词"在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据的主要表达意 ...

  5. python中文词云生成

    一.词云 "词云"就是对网络文本中出现频率较高的"关键词"予以视觉上的突出,形成"关键词云层"或"关键词渲染",从而过滤 ...

  6. Python NLPIR2016 与 wordcloud 结合生成中文词云

    前叙 该博文继承之前的文章,进一步介绍NLPIR2016的使用,三个内容(利用NLPIR 的发现新词功能自动提取文本内的新词汇,解决worldcloud中英文混合只显示中文的问题,NLPIR与worl ...

  7. Python + wordcloud + jieba 十分钟学会生成中文词云

    前述 本文需要的两个Python类库 jieba:中文分词分词工具 wordcloud:Python下的词云生成工具 写作本篇文章用时一个小时半,阅读需要十分钟,读完该文章后你将学会如何将任意中文文本 ...

  8. python中文词云生成_Python 词云生成

    图片来自网络所谓"词云"就是对网络文本中出现频率较高的"关键词"予以视觉上的突出,形成"关键词云层"或"关键词渲染",从 ...

  9. Python生成中文词云图(二):不可指定词云特定的形状和颜色。

    Python生成中文词云图(二):不可指定词云特定的形状和颜色. 什么是词云? 首先,什么是词云呢?词云又叫文字云,是对文本数据中出现频率较高的"关键词"在视觉上的突出呈现,形成关 ...

最新文章

  1. ARP协议的报文格式
  2. (DNS被劫持所导致的)QQ音乐与视频网页打开很慢的解决方法
  3. 查看mysql数据库的主机_MySQL查看或显示数据库(SHOW DATABASES语句)
  4. java oss 批量传输_初步使用阿里云OSS对象存储功能
  5. C 的CList,CPtrList,CObList,CStringList 用法之CPtrList
  6. effective python目录_Effective python(七):协作开发
  7. PHP自学--第一天
  8. 2015 年最流行的 10 个 Linux 发行版
  9. 我常用的find命令
  10. SpringBoot整合Redis及Redis工具类撰写
  11. 51单片机IIC驱动OLED
  12. 如何求100万长度的数组的中间值元素,采用定向数组只需6个毫秒的算法
  13. vue项目——商品详情页面图片放大镜效果实现(完成)
  14. 开头的单词_学Z字母本义和引申义,初高中Z开头的单词几分钟全部轻松记忆!...
  15. 未明学院:“我是女生,能做数据分析吗?”
  16. 【软件工程】产品调研分析报告
  17. 【蓝桥杯选拔赛真题50】Scratch小猫跑步 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解
  18. 二进制,CPU,操作系统
  19. ug许可服务器文件名什么呢,ug许可证是什么文件 是什么格式 什么名字?
  20. java,循环和判断,黑马程序员作业

热门文章

  1. P3:线性分类、损失函数与梯度下降
  2. Vivado设计流程(三)功能仿真
  3. SAR舰船检测的学习笔记
  4. 所谓伊人,在水一方--------------折射定律
  5. [转]java selenium webdriver实战 应用小结
  6. Uncaught Error: Bootstrap tooltips require Tether (http://github.hubspot.com/tether/)
  7. 【转】VO BO PO 介绍
  8. stm32 Keil编译后查看代码/内存占用空间,Flash/RAM占用大小,Code-Data,RO-Data,RW-Data,ZI-Data是什么含义
  9. ROS学习笔记四:理解ROS节点
  10. Git和GitHub 总结