本文将介绍如何利用python来根据文本数据(.txt文件)绘制词云图,除了绘制常规形状的词云图(比如长方形),还可以指定词云图的形状。
pip install jieba
pip install matplotlib
pip install wordcloud
pip install numpy
pip install Image
import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import numpy as np
from PIL import Image # 图像处理
jieba:
结巴分词库,一个中文分词库。由于中文文本的每个汉字都是连续书写的,因此需要对文本进行分词来获得中文文本的每个词组,即分词。
matplotlib.pyplot
图像展示库。用来创建画布以及相关的图像展示。在绘图前,需要创建一个figure对象,即需要一张画板才能开始绘图。
wordcloud :
词云展示库,可以根据文本的词频,对内容进行词云图的可视化。
numpy
numpy是Python的一个开源的数值计算扩展库,主要用于处理大型多维数组和矩阵,以及进行高效的数学运算,广泛应用于数据分析、机器学习、信号处理等领域。
Image
Image模块是一个强大的图像处理工具,提供了对图像文件的读写和处理的功能。也提供了各种功能和方法来处理和操作图像,包括加载、保存、调整大小、旋转、裁剪、应用滤镜等。
(1)精确模式
jieba.cut("文本内容",cut_all=False)
(2)全模式
jieba.cut("文本内容",cut_all=True)
(3)搜索引擎模式
参数 | 解释 |
---|---|
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"
import jieba
import matplotlib.pyplot as plt
from 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")
需要使用numpy库以及Image库来对背景图片进行图像处理
import wordcloud
import jieba
import matplotlib.pyplot as plt
import numpy as np
from 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()