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代码检查工具pylint 让你的python更规范
Sep 05 Python
python函数返回多个值的示例方法
Dec 04 Python
Python实现希尔排序算法的原理与用法实例分析
Nov 23 Python
python获取文件真实链接的方法,针对于302返回码
May 14 Python
详解python项目实战:模拟登陆CSDN
Apr 04 Python
python切片的步进、添加、连接简单操作示例
Jul 11 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
Apr 17 Python
Python控制台实现交互式环境执行
Jun 09 Python
Python 基于jwt实现认证机制流程解析
Jun 22 Python
几款Python编译器比较与推荐(小结)
Oct 15 Python
python获得命令行输入的参数的两种方式
Nov 02 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
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
学习php设计模式 php实现享元模式(flyweight)
2015/12/07 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
Yii框架ACF(accessController)简单权限控制操作示例
2019/04/26 PHP
JavaScript中“+=”的应用
2007/02/02 Javascript
JS option location 页面跳转实现代码
2008/12/27 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
2014/11/23 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
2015/08/20 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
2016/10/13 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
express框架下使用session的方法
2019/07/31 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
[46:42]DOTA2-DPC中国联赛正赛 Aster vs Magma BO3 第二场 3月5日
2021/03/11 DOTA
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
2019/10/01 Python
材料成型专业个人求职信范文
2013/09/25 职场文书
教你怎样写好自我评价
2013/10/05 职场文书
人事主管的岗位职责
2013/11/16 职场文书
英文简历中的自荐信范文
2013/12/14 职场文书
会计学专业学生的求职信范文
2014/01/27 职场文书
飘柔洗发水广告词
2014/03/14 职场文书
企业晚会策划方案
2014/05/29 职场文书
设备管理实施方案
2014/05/31 职场文书
焦裕禄纪念馆观后感
2015/06/09 职场文书
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis