Python实现Wordcloud生成词云图的示例


Posted in Python onMarch 30, 2020

wordcloud是Python扩展库中一种将词语用图片表达出来的一种形式,通过词云生成的图片,我们可以更加直观的看出某篇文章的故事梗概。

首先贴出一张词云图(以哈利波特小说为例):

Python实现Wordcloud生成词云图的示例

在生成词云图之前,首先要做一些准备工作

1.安装结巴分词库

pip install jieba

Python实现Wordcloud生成词云图的示例

Python中的分词模块有很多,他们的功能也都是大同小异,我们安装的结巴分词 是当前使用的最多的类型。

下面我来简单介绍一下结巴分词的用法

结巴分词的分词模式分为三种:

(1)全模式:把句子中所有的可以成词的词语都扫描出来, 速度快,但是不能解决歧义问题

(2)精确模式:将句子最精确地切开,适合文本分析

(3)搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词

下面用一个简单的例子来看一下三种模式的分词区别:

import jieba
 
 # 全模式:把句子中所有的可以成词的词语都扫描出来, 速度快,但是不能解决歧义问题
 text = "哈利波特是一常优秀的文学作品"
 seg_list = jieba.cut(text, cut_all=True)
 print(u"[全模式]: ", "/ ".join(seg_list))
 
 # 精确模式:将句子最精确地切开,适合文本分析
 seg_list = jieba.cut(text, cut_all=False)
 print(u"[精确模式]: ", "/ ".join(seg_list))
 
 # 默认是精确模式
 seg_list = jieba.cut(text)
 print(u"[默认模式]: ", "/ ".join(seg_list))
 
 # 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词
seg_list = jieba.cut_for_search(text)
print(u"[搜索引擎模式]: ", "/ ".join(seg_list))

下面是对这句话的分词方式:

Python实现Wordcloud生成词云图的示例

通过这三种分词模式可以看出,这些分词模式并没有很好的划分出“哈利波特”这个专有名词,这是因为在结巴分词的字典中并没有记录这个名词,所以需要我们手动添加自定义字典

添加自定义字典:找一个方便引用的位置              (下图的路径是我安装的位置),新建文本文档(后缀名为.txt),将想添加的词输入进去(注意输入格式),保存并退出

Python实现Wordcloud生成词云图的示例

在上面的代码中加入自定义字典的路径,再点击运行

jieba.load_userdict("/home/jmhao/anaconda3/lib/python3.7/site-packages/jieba/mydict.txt")

分词结果,可以看出“哈利波特”这个词已经被识别出来了

Python实现Wordcloud生成词云图的示例

结巴分词还有另一个禁用词的输出结果

stopwords = {}.fromkeys(['优秀', '文学作品'])
 
 #添加禁用词之后
 seg_list = jieba.cut(text)
 final = ''
 for seg in seg_list:
   if seg not in stopwords:
       final += seg
 seg_list_new = jieba.cut(final)
 print(u"[切割之后]: ", "/ ".join(seg_list_new))

可以看到输出结果中并没有“优秀”和“文学作品”两个词

Python实现Wordcloud生成词云图的示例

结巴分词还有很多比较复杂的操作,具体的可以去官网查看,我就不再过多的赘述了

下面我们正式开始词云的制作

首先下载模块,这里我所使用的环境是Anaconda,由于Anaconda中包含很多常用的扩展包,所以这里只需要下载wordcloud。若使用的环境不是Anaconda,则另需安装numpy和PIL模块

pip install wordcloud

Python实现Wordcloud生成词云图的示例

然后我们需要找一篇文章并使用结巴分词将文章分成词语的形式

# 分词模块
 def cut(text):
   # 选择分词模式
   word_list = jieba.cut(text,cut_all= True)
   # 分词后在单独个体之间加上空格
   result = " ".join(word_list)
   # 返回分词结果
   return result

这里我在当前文件夹下创建了一个文本文档“xiaoshuo.txt”,并复制了一章的小说作为词云的主体文字

使用代码控制,打开并读取小说的内容

#导入文本文件,进行分词,制作词云
 with open("xiaoshuo.txt") as fp:
   text = fp.read()
   # 将读取的中文文档进行分词
   text = cut(text)

在网上找到一张白色背景的图片下载到当前文件夹,作为词云的背景图(若不指定图片,则默认生成矩形词云)

#设置词云形状,若设置了词云的形状,生成的词云与图片保持一致,后面设置的宽度和高度将默认无效
  mask = np.array(image.open("monkey.jpeg"))

接下来可以根据喜好来定义词云的颜色、轮廓等参数 下面为常用的参数设置方法

font_path : "字体路径" 词云的字体样式,若要输出中文,则跟随中文的字体
width =  n 画布宽度,默认为400像素
height =  n 画布高度,默认为400像素
scale = n 按比例放大或缩小画布
min_font_size = n 设置最小的字体大小
max_font_size = n 设置最大的字体大小
stopwords = 'words' 设置要屏蔽的词语
background_color = ''color 设置背景板颜色
relative_scaling = n 设置字体大小与词频的关联性
contour_width = n 设置轮廓宽度
contour_color = 'color' 设置轮廓颜色

完整代码

#导入词云库
 from wordcloud import WordCloud
 #导入图像处理库
 import PIL.Image as image
 #导入数据处理库
 import numpy as np
 #导入结巴分词库
 import jieba
 
 # 分词模块
 def cut(text):
   # 选择分词模式
   word_list = jieba.cut(text,cut_all= True)
   # 分词后在单独个体之间加上空格
   result = " ".join(word_list)
   return result
 
 #导入文本文件,进行分词,制作词云
 with open("xiaoshuo.txt") as fp:
   text = fp.read()
   # 将读取的中文文档进行分词
   text = cut(text)
   #设置词云形状
   mask = np.array(image.open("monkey.jpeg"))
   #自定义词云
   wordcloud = WordCloud(
     # 遮罩层,除白色背景外,其余图层全部绘制(之前设置的宽高无效)
     mask=mask,
     #默认黑色背景,更改为白色
     background_color='#FFFFFF',
     #按照比例扩大或缩小画布
     scale=,
     # 若想生成中文字体,需添加中文字体路径
     font_path="/usr/share/fonts/bb5828/逐浪雅宋体.otf"
   ).generate(text)
   #返回对象
   image_produce = wordcloud.to_image()
   #保存图片
   wordcloud.to_file("new_wordcloud.jpg")
   #显示图像
   image_produce.show()

注:若想要生成图片样式的词云图,找到的图片背景必须为白色,或者使用Photoshop抠图替换成白色背景,否则生成的词云为矩形

我的词云原图:

Python实现Wordcloud生成词云图的示例

生成的词云图:

Python实现Wordcloud生成词云图的示例 

到此这篇关于Python实现Wordcloud生成词云图的示例的文章就介绍到这了,更多相关Python Wordcloud生成词云图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python实现自动发送邮件功能
Mar 02 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
儿童学习python的一些小技巧
May 27 Python
Python数据持久化shelve模块用法分析
Jun 29 Python
Python创建一个空的dataframe,并循环赋值的方法
Nov 08 Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 Python
新手入门Python编程的8个实用建议
Jul 12 Python
Ubuntu+python将nii图像保存成png格式
Jul 18 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
Aug 12 Python
Python实现word2Vec model过程解析
Dec 16 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
May 16 Python
解决c++调用python中文乱码问题
Jul 29 Python
Django ModelForm操作及验证方式
Mar 30 #Python
windows10环境下用anaconda和VScode配置的图文教程
Mar 30 #Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
Mar 30 #Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 #Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
Mar 30 #Python
动态设置django的model field的默认值操作步骤
Mar 30 #Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
Mar 30 #Python
You might like
ajax实现无刷新分页(php)
2010/07/18 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
js实现带按钮的上下滚动效果
2015/05/12 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
VUE使用vuex解决模块间传值问题的方法
2017/06/01 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
关于angularJs清除浏览器缓存的方法
2017/11/28 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
[01:15]PWL S2开团时刻第二期——他们杀 我就白给
2020/11/25 DOTA
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
使用Python对SQLite数据库操作
2017/04/06 Python
详解Python进程间通信之命名管道
2017/08/28 Python
python使用标准库根据进程名如何获取进程的pid详解
2017/10/31 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
2020/04/21 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
英国森林假期:Forest Holidays
2021/01/01 全球购物
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
招聘单位介绍信
2014/01/14 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
竞聘自述材料
2014/08/25 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
居住证明范文
2015/06/17 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
2016年小学“公民道德宣传日”活动总结
2016/04/01 职场文书