文本挖掘之WordCloud+Python3快速生成中英文词云图

引言: “词云”,又称文字云,是由词汇组成类似云的彩色图形。可对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成"关键词云层"或"关键词渲染",从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。
                                                                                                                       ——摘自百度百科

在这里插入图片描述

本文运行环境与所需包:

  • Python-3.6.6
  • wordcloud(词云库,可直接对英文句子进行分词)
  • jieba(中文分词库)
  • numpy、matplotlib(绘图库)

本文资源下载:

本文所有使用的代码、中英文案例使用的文本文件、图片和中英文字体均托管至个人GitHub中。欲提前看完整代码,请点击该链接,欢迎大家star和fork。

一、简易词云图:

①7行代码英文文本速成词云图

因为wordcloud库内置了对英文文本的分词功能,所以对于获取的英文文本直接带入generate()函数中即可。
这里,我将要处理的英文文本放在了content.txt

from wordcloud import WordCloud  # 词云库
import matplotlib.pyplot as plt# 1.读取本地英文文本文件
text = open('C:\\Users\\Administrator\\Desktop\\content.txt',encoding='utf-8').read()
# 2.创建WordCloud实例,设置词云图宽高(最终以矩形显示)、背景颜色(默认黑色)和最大显示字数
wc = WordCloud(width=600, height=400, background_color="white", max_words=4000)
# 3.根据读取的英文文本,先分词再生成词云图
wc.generate(text)
# 4.使用matplotlib绘图
plt.imshow(wc)
plt.axis("off") # 取消坐标系
plt.show()      # 在IDE中显示图片
# 5.将生成的词云图保存在本地
wc.to_file('C:\\Users\\Administrator\\Desktop\\wordcloud.png')

生成英文词云图
在这里插入图片描述

②9行代码中文文本速成词云图

因为wordcloud无法对中文文本进行分词,所以对于获取的中文文本,需要通过中文分词器(jieba)分词后才能带入generate()函数中进行词频统计生成词云图
这里,我将要处理的中文文本(《小王子》前15页,共1w字)放在了xiaowangzi.txt

import matplotlib.pyplot as plt
from wordcloud import WordCloud # 词云库
import jieba  # 中文分词库# 1.读取本地中文文本文件
text = open('C:\\Users\\Administrator\\Desktop\\xiaowangzi.txt',encoding='gbk').read()
# 2.使用jieba进行中文分词;cut_all参数表示分词模式,True为全局模式,False为精确模式,默认为False
cut_text = jieba.cut(text, cut_all=False)
result = '/'.join(cut_text) # 因为cut方法返回的是一个生成器,所以要么使用for循环遍历,要么使用join()
# 3.创建WordCloud实例,设置词云图宽高(最终以矩形显示)、背景颜色(默认黑色)和最大显示字数
wc = WordCloud(font_path='C:\\Users\\Administrator\\Desktop\\yahei.ttc', width=600, height=400, background_color="white", max_words=4000)
# 4.根据分词后的中文文本,统计词频,生成词云图
wc.generate(result)
# 5.使用matplotlib绘图
plt.imshow(wc)
plt.axis("off") # 取消坐标系
plt.show()      # 在IDE中显示图片
# 6.将生成的词云图保存在本地
wc.to_file('C:\\Users\\Administrator\\Desktop\\wordcloud.png')

【解释】:
1)因为是中文文本,使用open()读取数据时往往不是Unicode码,所以编码方案需使用gbk,若使用utf-8可能会报编码错误;反之,英文文本建议用utf-8编码。
2)此处WordCloud中的font_path参数是字体文件路径,因为WordCloud中没有内置相关中文字体,所以需要我们自己手动添加。(此处我用的是微软雅黑,中英文字体获取方式见文章底部)
3)本例使用jieba.cut()方法进行中文分词,方法接受三个输入参数:

  1. 需要分词的字符串;(必填)
  2. cut_all参数用来控制是否采用全模式;(选填,默认为精确模式,即False)
  3. HMM 参数用来控制是否使用HMM 模型;(选填,默认为False)

生成中文词云图如下:
在这里插入图片描述

【补充】:

jieba.cut()用法示例
1.因为该方法返回一个生成器,所以无法直接打印,可以通过for循环遍历join()方法展示:

>>> seg_list = jieba.cut('我来到北京清华大学')
>>> print(seg_list)
<generator object Tokenizer.cut at 0x7f085f445888>

for循环遍历:

>>> seg_list = jieba.cut('我来到北京清华大学')
>>> for word in seg_list:
>>>   print(word)
我
来到
北京
清华
清华大学
华大
大学

全模式(cut_all=True):

>>> seg_list = jieba.cut('我来到北京清华大学', cut_all=True)
>>> print('全模式: ' + '/'.join(seg_list))  
全模式:/来到/北京/清华/清华大学/华大/大学

精确模式(cut_all=False):

>>> seg_list = jieba.cut('我来到北京清华大学', cut_all=False)
>>> print('精确模式: ' + '/'.join(seg_list)) 
精确模式:/来到/北京/清华大学

二、自定义优化词云图:

【引出问题1】:在前面两个示例中,我们通过几行代码就实现了一个基本的词云图。但细心的读者可能会发现小王子案例中的词云图出现了醒目的“他们、什么、没有、可是、这样和一个”类似没有实际意义的词语。
【解决方法】:可以使用中英文停用词(StopWord),在统计词频的时候忽略这些词或标点符号。英文停用词wordcloud中就有STOPWORDS可以直接使用,而中文停用词需要自己手动添加(中文停用词见笔者整理在GitHub中。
【具体用法】:
①英文文本-部分代码如下

from wordcloud import STOPWORDS
//...
stopwords = set(STOPWORDS)  // 用一个集合set存储英文停用词
stopwords.add("said")       // 可在原有停用词基础上自定义增加所需的词语
// 带入到WordCloud实例中的stopwords参数即可。
wc = WordCloud(width=600, height=400, background_color='white',max_font_size=45,stopwords=stopwords, max_words=4000)
//...

①中文文本-部分代码如下

//...
zn_StopWordPath = r'C:\Users\Administrator\Desktop\zn_STOPWORDS.txt'
stopWordList = []
with open(zn_StopWordPath, 'r', encoding='utf-8') as f:text = f.read()stopWordList = text.split(';\n')
stopwords = set(stopWordList)
stopwords.add('是')
// 带入到WordCloud实例中的stopwords参数即可。
wc = WordCloud(width=600, height=400, background_color='white',max_font_size=45,stopwords=stopwords, max_words=4000)
//...

【引出问题2】:只生成单一矩形图和固定颜色很单调,可否自定义根据图片背景等其他属性来设置自己的词云图?
【解决方法】:首先在WordCloud初始化函数中提供了25个参数供用户设置:

def __init__(self, font_path=None, width=400, height=200, margin=2,ranks_only=None, prefer_horizontal=.9, mask=None, scale=1,color_func=None, max_words=200, min_font_size=4,stopwords=None, random_state=None, background_color='black',max_font_size=None, font_step=1, mode="RGB",relative_scaling='auto', regexp=None, collocations=True,colormap=None, normalize_plurals=True, contour_width=0,contour_color='black', repeat=False):

这里我们可以使用Imagenumpy来存储图片,使用mask参数来引入我们的背景图片,使用max_words参数来设置词云图中词数的个数,使用random_state参数来设置词在图中的随机形态个数,部分代码如下:

from PIL import Image
import numpy as np
//...
image = np.array(Image.open('C:\\Users\\Administrator\\Desktop\\girl.png'))
wc = WordCloud(mask=image, background_color='white',max_font_size=45,stopwords=stopwords, random_state=42,max_words=3000)
//...

女孩的图片girl.png如下(建议使用白底或具有显著鲜明区分的背景图):
在这里插入图片描述
生成的英文词云图如下:
在这里插入图片描述
生成的中文词云图如下:
在这里插入图片描述
如果想要使用背景图的颜色来填充词语的颜色,则部分代码如下:

import matplotlib.pyplot as plt
import numpy as np
from wordcloud import wordcloud, ImageColorGenerator # 图片颜色生成器
//...
image = np.array(Image.open('C:\\Users\\Administrator\\Desktop\\girl.png'))
image_colors = ImageColorGenerator(image)  # 取色
wc = WordCloud(mask=image, background_color='white',max_font_size=45,stopwords=stopwords, random_state=42,max_words=3000)
plt.figure("词云图")
plt.imshow(wc.recolor(color_func=image_colors)) # 重置wc实例中的词的颜色
//...

生成英文词云图如下:
在这里插入图片描述

三、完整代码&&总体步骤:

3.1 英文词云图生成器完整代码+注释:

# encoding:utf-8
__author__ = 'shiliang'
__date__ = '2019/3/13 23:23'from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator  # 词云库
from PIL import Image
import matplotlib.pyplot as plt  # 数学绘图库
import numpy as npdef en_wordcloudGenerater(filePath, imagePath, imageSavePath, isImageColor):'''英文词云图生成器:param filePath: 本地文本文件路径:param imagePath: 本地图片(最好是白底)路径:param imageSavePath: 词云图保存路径:param isImageColor: 是否使用背景图片颜色作为词的颜色(bool值)'''# 使用上下文管理器with读取本地文本文件with open(filePath, 'r', encoding='utf-8') as f:# 1、读入txt文本数据text = f.read()# 2、设置停用词(可通过add方法添加所需英文词汇或标点符号)stopwords = set(STOPWORDS)stopwords.add('said')# 3.1、获取本地背景图片image = np.array(Image.open(imagePath))if isImageColor:# 3.2、获取背景图片颜色image_colors = ImageColorGenerator(image)# 4、创建WordCloud实例并自定义设置参数(如背景色,背景图片和停用词等)wc = WordCloud(mask=image, background_color='white', max_font_size=45,stopwords=stopwords, random_state=42, max_words=3000)# 5、根据设置的参数,统计词频并生成词云图wc.generate(text)# 6.将生成的词云图保存在本地plt.figure('词云图')  # 指定所绘图名称if isImageColor:plt.imshow(wc.recolor(color_func=image_colors))else: # 以图片的形式显示词云,并依据背景色重置词的颜色plt.imshow(wc)plt.axis('off')      # 关闭图像坐标系plt.show()           # 在IDE中显示图片wc.to_file(imageSavePath)  # 按照背景图的宽高度保存词云图if __name__ == '__main__':# 本地文本文件路径filePath = 'C:\\Users\\Administrator\\Desktop\\content.txt'# 本地图片(最好是白底)路径imagePath = 'C:\\Users\\Administrator\\Desktop\\girl.png'# 词云图保存路径imageSavePath = 'C:\\Users\\Administrator\\Desktop\\wordcloud.png'en_wordcloudGenerater(filePath, imagePath, imageSavePath, False)

3.2 中文词云图生成器完整代码+注释:

import matplotlib.pyplot as plt  # 数学绘图库
import jieba  # 分词库
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator  # 词云库
from PIL import Image
import numpy as npdef zn_wordcloudGenerater(filePath, fontPath, imagePath, imageSavePath, zn_STOPWORDS, isImageColor):'''中文词云图生成器:param filePath: 本地文本文件路径:param fontPath: 字体文件路径:param imagePath: 本地图片(最好是白底)路径:param imageSavePath: 词云图保存路径:param zn_STOPWORDS: 中文停用词(List类型):param isImageColor: 是否使用背景图片颜色作为词的颜色(bool值)'''# 使用上下文管理器with读取本地文本文件with open(filePath, 'r', encoding='gbk') as f:# 1、读入txt文本数据text = f.read()# 2.使用jieba进行中文分词;cut_all参数表示分词模式,True为全局模式,False为精确模式,默认为Falsecut_text = jieba.cut(text, cut_all=False)result = '/'.join(cut_text)# 3、设置中文停用词(可通过add方法添加所需中文词汇或标点符号)stopwords = set(zn_STOPWORDS)stopwords.add('是')# 4.1、获取本地背景图片image = np.array(Image.open(imagePath))if isImageColor:# 4.2、获取背景图片颜色image_colors = ImageColorGenerator(image)# 5、创建WordCloud实例并自定义设置参数(如背景色,背景图片和停用词等)wc = WordCloud(font_path=fontPath, background_color='white', max_words=3000,mask=image, stopwords=stopwords, random_state=42, max_font_size=45)# 6、根据设置的参数,统计词频并生成词云图wc.generate(result)# 7、将生成的词云图保存在本地plt.figure('词云图')  # 指定所绘图名称if isImageColor:plt.imshow(wc.recolor(color_func=image_colors))  # 以图片的形式显示词云,并依据背景色重置词的颜色else:plt.imshow(wc)plt.axis('off')      # 关闭图像坐标系plt.show()           # 在IDE中显示图片wc.to_file(imageSavePath)  # 按照背景图的宽高度保存词云图def txt2set(zn_StopWordPath):'''读取本地中文停用词文本并转换为列表:param zn_StopWordPath: 中文停用词文本路径:return stopWordList: 一个装有中文停用词的列表'''with open(zn_StopWordPath, 'r', encoding='utf-8') as f:text = f.read()stopWordList = text.split(';\n')return stopWordListif __name__ == '__main__':    # 本地中文文本文件路径zn_filePath = 'C:\\Users\\Administrator\\Desktop\\xiaowangzi.txt'# 本地中文字体路径zn_fontPath = 'C:\\Users\\Administrator\\Desktop\\yahei.ttc'# 本地图片(最好是白底)路径imagePath = 'C:\\Users\\Administrator\\Desktop\\girl.png'# 词云图保存路径imageSavePath = 'C:\\Users\\Administrator\\Desktop\\wordcloud.png'# 中文停用词文本路径zn_StopWordPath = 'C:\\Users\\Administrator\\Desktop\\zn_STOPWORDS.txt'# 中文词云图生成器zn_StopWordsList = txt2set(zn_StopWordPath)zn_wordcloudGenerater(zn_filePath, zn_fontPath, imagePath, imageSavePath, zn_StopWordsList, False)

3.3 词云图生成总体步骤:

  1. 获取数据——读取本地文本文件。
  2. 创建词云实例,并设置好自定义参数
  3. 基于实例和文本数据,统计词频生成词云图
  4. 展现已生成的词云图存储本地

3.4 中英文字体文件获取:

文件后缀为.ttf.ttc等。
①本地Windows系统路径:C:\Windows\Fonts
②在线字体库下载:点击此处。

【参考文献】:
[1] Python文本挖掘:词云图.
[2] 10行python代码的词云.
[3] jieba中文分词器.
[4] Python词云wordcloud十五分钟入门与进阶.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/66506.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python统计文章中高频词汇并生成词云

LZ的同事写的文章经常被公司或者上级部门发表&#xff0c;LZ对此觉得同事写的文章一定有什么套路或者经常使用的词句&#xff0c;所以LZ收集了6篇同事的文章希望统计出其文章的高频词语以此可以效仿。 首先&#xff0c;把6篇文章放在同一个Text文档中&#xff0c;准备好词云需…

掌阅科技让数字化阅读更便捷

阅读是快速让人提高的方法,不需要你花很多的钱只需要你沉下心耐着性子从书中得到知识与经验,掌阅科技作为一家在国内领先的数字化阅读平台更是为无数爱好阅读的人提供便利。古书有云“书中自有颜如玉,书中自有黄金屋”。现在社会的阅读可能没有颜如玉和黄金屋,但是阅读还是可以…

掌阅科技与厦门航空联合推出首个机上阅读服务“天际悦读”

【TechWeb】6月27日消息&#xff0c;掌阅科技和厦门航空今日联合宣布&#xff0c;将推出全国首个常态化空中阅读服务“天际阅读”。 厦门航空空中乘务部副总经理张玉晶指出&#xff0c;厦航经过对旅客画像、出行习惯与需求&#xff0c;以及行业发展趋势的综合分析后&#xff0c…

高清3D人体解剖图谱

目前见过的高清3D人体模型最好的一个了&#xff0c;截图供大家欣赏&#xff0c;这个可能我通过微信传的时候像素有损失&#xff0c;大家大量&#xff0c;我截取的当然也只有平面图&#xff0c;3D的效果&#xff0c;请恕我的无能&#xff0c;还不知道3D的人体模型要怎么截取。话…

PXI机箱大解剖

上一节给大家介绍了PXI的背景和历史&#xff0c;让我们对PXI的起源有了更多的认识。同时对PXI机箱做了初步介绍。本节将会从10个方面为大家详细解剖PXI机箱。 PXI槽位序号 每一个PXI槽位都有一个对应的槽位号(大部分情况下)被标注在PXI插槽下方。一般为从左到右排列。 图1.3…

经典大脑解剖网站大全

本文首发在个人博客上&#xff08;7988888.xyz&#xff09;&#xff0c;此文章中所有链接均通过博客进行访问。 根据互联网公开资源&#xff0c;整理了部分大脑解剖学习资源网站&#xff0c;仅供学习参考。 在脑科学的研究中&#xff0c;大脑解剖学知识的了解是必不可少的&am…

视网膜生理解剖

Cornea&#xff1a;角膜 Pupil&#xff1a;瞳孔 Lris&#xff1a;虹膜 Lens&#xff1a;晶状体 Retina&#xff1a;视网膜 Macula&#xff1a;黄斑 Optic nerve&#xff1a;视神经 视网膜&#xff08;retina&#xff09;居于眼球壁的内层&#xff0c;是一层透明的薄膜。视网膜…

Maven仓库解剖

介绍 分类 项目从仓库找包顺序 各个仓库的介绍 本地仓库 私服 nexus私服 阿里云云效制品仓库 中央仓库 公共仓库 演示 介绍 所谓的maven仓库&#xff0c;其实就是存放各个依赖包的文件夹&#xff0c;maven不仅是构建工具和依赖管理工具以及项目信息管理工具&#xff…

冠状动脉解剖(CTA)

以下的认知&#xff0c;也是通过其他的文章东挪西凑出来的&#xff0c;结合自己的理解归纳一下。后续还会更正&#xff0c;也望大家指正。 1 基本概念 左冠状动脉&#xff08;Left Coronary artery&#xff09; 左冠状动脉主干&#xff1a;Left Main Artery&#xff08;LM&a…

解剖常见电子元器件,了解其内部结构

作者&#xff1a;TubeTimeUS 排版&#xff1a;晓宇 看一下LED&#xff0c;电阻&#xff0c;电容&#xff0c;二极管等这些迷人且很有教育意义的横截面&#xff0c;喜欢请留言点赞并转发&#xff0c;感谢芯片之家小伙伴的支持&#xff01; 1、电容 这是表面贴装电容的横截面&am…

大脑解剖图(纯图片)

因为上一个排版有问题&#xff0c;本来是左图右字的&#xff0c;但是它一发布就全都乱套了&#xff0c;修改了很多次也没改成&#xff0c;所以就截图重新发布了一个。 图片均来自《神经科学——探索脑》中文版&#xff08;第2版&#xff09;一书&#xff0c;Mark F.Bear [美]…

计算机内存和u盘存储原理,解剖U盘存储结构原理

原标题&#xff1a;解剖U盘存储结构原理 U盘的结构比较简单&#xff0c;主要是由USB插头、主控芯片、稳压IC(LDO)、晶振、闪存(FLASH)、PCB板、帖片电阻、电容、发光二极管(LED)等组成。 U盘的基本工作原理也比较简单&#xff1a;USB端口负责连接电脑&#xff0c;是数据输入或输…

Milvus 数据处理流程解剖

编者按&#xff1a;本文详细解剖 Milvus 2.0 主要的数据处理流程以及访问接入层&#xff08; Access Layer&#xff09;。 主要数据处理流程 MsgStream 接口 写路径 读路径 DDL 流程 建索引流程 Access Layer 代码 主要数据处理流程 Milvus 2.0 中主要的数据处理流程包括…

《C语言深度解剖》20道习题解析

1.下面的代码输出是什么&#xff1f;为什么&#xff1f; void foo(void) {unsigned int a 6; int b -20;(a b>6)? puts(">6"):puts("<6"); } 答案&#xff1a;输出  >6 原因&#xff1a;当表达式中存在有符号类型和无符号类型时所有的…

顺序表的深度解剖

篮球哥温馨提示&#xff1a;编程的同时不要忘记锻炼哦&#xff01; 时光不老&#xff0c;咱们不散&#xff0c;这里依旧是爱打篮球的程序猿带你学顺序表&#xff01; 你接下看到的可能是最详细的顺序表讲解之一 好的废话不多说&#xff0c;爱打篮球的程序猿直接带你上高速&…

C语言深度解剖——C语言关键字

每天进步一点点&#xff0c;坚持带来大改变&#xff01;&#xff01;&#xff01; 前言&#xff1a; 在C语言的学习过程中会遇到许多的关键字&#xff0c;我们是否真的详细了解这些关键字的使用方法和使用场景&#xff0c;下面我们来详解C语言中的32个关键字 1.C语言关键字概览…

C语言深度解剖:关键字

第一个C语言程序内存定义与声明变量是什么为什么要定义变量定义变量的本质定义声明 关键字 - auto局部与全局变量作用域 vs 生命周期auto 关键字 - register寄存器本质register 修饰变量 1、多文件1.1、变量声明1.2、头文件包含内容1.3、函数声明 1.4、跨文件2、static1、sizeo…

ADC采样效应及相关影响解剖

在前述文章&#xff0c;BUCK电路模拟补偿器的数字化过程 &#xff0c;我们讨论了模拟补偿器的数字化&#xff0c;事实上&#xff0c;数字化过程的第一个重要的环节就是ADC对反馈量的采样&#xff0c;本文就重点探讨一下由于ADC采样频率带来的一些问题&#xff0c;进而讨论一下相…

大脑解剖图

脑的表面解剖 1&#xff1a;嗅球 2&#xff1a;大脑 3&#xff1a;小脑 4&#xff1a;脑干 5&#xff1a;外侧裂 6&#xff1a;中央前回 7&#xff1a;中央沟 8&#xff1a;中央后回 9&#xff1a;颞上回 10&#xff1a;颞叶 11&#xff1a;额叶 12&#xff1a;顶叶 …

冠状动脉解剖结构

学习冠脉解剖结构过程中看了很多的PPT但是要么问题过多要么&#xff0c;解剖结构图展示的不够清晰明了&#xff0c;现在网络上搜集了一些比较好的PPT的截图&#xff0c;供大家学习。 CTA横断面冠脉解剖结构 PL可从左发出也可以从右侧发出 Reference&#xff1a; [1]: 帮你真正…