当前位置:首页 » 《随便一记》 » 正文

Python(wordcloud):根据文本数据(.txt文件)绘制词云图

13 人参与  2024年05月01日 10:30  分类 : 《随便一记》  评论

点击全文阅读


一、前言

本文将介绍如何利用python来根据文本数据(.txt文件)绘制词云图,除了绘制常规形状的词云图(比如长方形),还可以指定词云图的形状。

二、相关库的介绍

1、安装相关的库
pip install jiebapip install matplotlibpip install wordcloudpip install numpypip install Image 
2、 导入相关的库
import jiebaimport matplotlib.pyplot as pltfrom wordcloud import WordCloudimport numpy as npfrom PIL import Image # 图像处理
3、 相关库的介绍

jieba:
结巴分词库,一个中文分词库。由于中文文本的每个汉字都是连续书写的,因此需要对文本进行分词来获得中文文本的每个词组,即分词。

matplotlib.pyplot
图像展示库。用来创建画布以及相关的图像展示。在绘图前,需要创建一个figure对象,即需要一张画板才能开始绘图。

wordcloud :
词云展示库,可以根据文本的词频,对内容进行词云图的可视化。

numpy
numpy是Python的一个开源的数值计算扩展库,主要用于处理大型多维数组和矩阵,以及进行高效的数学运算,广泛应用于数据分析、机器学习、信号处理等领域。

Image
Image模块是一个强大的图像处理工具,提供了对图像文件的读写和处理的功能。也提供了各种功能和方法来处理和操作图像,包括加载、保存、调整大小、旋转、裁剪、应用滤镜等。

三、数据处理

1、中文分词
中文分词可以将中文语句切割成单独的词组;中文分词的工具有很多,比如 python 的第三方库 jieba;jieba 支持三种分词模式:全模式、精确模式、搜索引擎模式。结巴分词最主
要的方法是 cut 方法

(1)精确模式

试图将句子最精确地切开,适合文本分析结巴分词默认为该模式
jieba.cut("文本内容",cut_all=False)

(2)全模式

把句子中所有可以成词的词语都扫描出来,速度很快,但是不能解决歧义
jieba.cut("文本内容",cut_all=True)

(3)搜索引擎模式

在精确模式的基础上,对长词再次切分,提高召回率
2、去除停用词
对中文来说,包括像“的”、“和”、“在”、“是”等副词、量词、介词、叹词、数词都是停用词。这些词汇几乎在所有中文文本都会出现,不具有特殊性,没有区分度,所以通常会把这些词从文本中去除;去除停用词需要一个停词表stopword.txt,将分词后的文本中每个词与停词字典中的条目进行匹配。如果匹配成功,该词将被删除;直接百度搜索停词表并下载就好了
(由于本文用到的数据集的文本内容比较简单,因此没有执行去除停用词这一步的操作)

四、实现

1、绘制基本词云图
(1)核心

在以下代码中,根据实际更改文件的读取路径以及保存路径即可:
在这里插入图片描述

(2)WordCloud 参数解释
参数解释
参数解释
width词云图的宽度(默认400像素)
height词云图的高度(默认200像素)
max_font_size词云图字体的最大字号(根据图片高度自动调节)
min_font_size词云图字体的最小字号(默认为4号字体)
max_words词云图显示的最大单词数(默认200)
stop_words不显示的词语、单词
mask指定词云图的形状(默认为长方形)
background_color词云图的背景颜色(默认为黑色)
font_path字体文件的路径
如果文本是中文的,需要设置字体,否则会乱码
font_path = "C:\Windows\Fonts\Microsoft YaHei UI\msyh.ttc"
(3)完整代码:
import jiebaimport matplotlib.pyplot as pltfrom wordcloud import WordCloud# 读取文本文件text = open(r"C:\Users\abc\Desktop\词云图数据\grape.txt", encoding="utf-8").read()# 对文本进行分词,默认精确模式text1=jieba.cut(text)# 以空格作为分隔符,将分词后的所有字符串合并成一个新的字符串text = ' '.join(text1)# 根据分词结果产生词云wc = WordCloud(font_path = "C:\Windows\Fonts\Microsoft YaHei UI\msyh.ttc",width=500, height=400, mode="RGBA", background_color=None).generate(text)# 以图片的形式显示词云plt.imshow(wc, interpolation="bilinear")# 不显示图像坐标系plt.axis("off")# 显示图像plt.show()#保存词云图wc.to_file(r"\Users\abc\Desktop\res.png")
以陈奕迅《葡萄成熟时》的歌词作为文本数据,词云图的结果如下:
在这里插入图片描述
2、绘制指定形状的词云图
有时候需要指定词云图的形状,我们可以通过导入背景图片作为词云图的底图来实现注意:背景图片的背景一定要是白色的,不可以是其他颜色或者透明以下面的葡萄图片作为背景图片:
在这里插入图片描述
(1)核心代码

需要使用numpy库以及Image库来对背景图片进行图像处理

在这里插入图片描述

词云图的结果如下:
在这里插入图片描述
(2)词云图优化
我们可以给背景图的轮廓进行清晰化,比如给轮廓添加粗度和颜色

在这里插入图片描述

优化后的词云图如下:
在这里插入图片描述
(3)完整代码:
import wordcloudimport jiebaimport matplotlib.pyplot as pltimport numpy as npfrom PIL import Image # 图像处理#打开背景图片pic = Image.open("grape.jpg")# 提取图片的轮廓shape = np.array(pic)# mask为图片背景,font_path为字体,若不设置可能乱码wc = wordcloud.WordCloud(mask=shape, font_path="simkai.ttf", background_color="white", contour_color='purple',contour_width=3,max_font_size=100)#读取要分词的文本文件text = open(r'C:\Users\abc\Desktop\词云图数据\grape.txt', "r", encoding='UTF-8').read()#结巴分词cut_text = jieba.cut(text)result = " ".join(cut_text)#生成词云图wc.generate(result)#保存词云图wc.to_file("cloud.jpg")# 以图片的形式显示词云plt.imshow(wc, interpolation="bilinear")# 不显示图像坐标系plt.axis("off")# 显示图像plt.show()

点击全文阅读


本文链接:http://zhangshiyu.com/post/102572.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1