探索中文文本之美:使用Python生成定制化词云
数据可视化已成为我们理解复杂信息的关键工具。词云,作为一种流行的数据可视化形式,能够将大量文本数据中的关键词以视觉化的方式呈现,让我们迅速捕捉到文本的核心。本文将通过Python编程语言,使用jieba和wordcloud库,并基于斗破苍穹第一章的内容,生成一个具有特定形状的词云。
环境搭建
在开始之前,确保你的Python环境中安装了必要的库。如果尚未安装,可以通过以下命令进行安装:
pip install matplotlib
jieba
wordcloud
numpy
pillow
读取与准备文本
我们将使用《斗破苍穹第一章》的文本作为示例。首先,确保文本文件以UTF-8编码保存,以避免编码错误:
with open('斗破苍穹第一章.txt', 'r', encoding='utf-8') as file:
text = file.read()
中文分词
中文文本处理的第一步是分词。我们使用jieba库,它是中文文本分词的常用工具:
import jieba
cut_text = jieba.cut(text)
word = ' '.join(cut_text)
定义停用词
在生成词云之前,我们需要定义一组停用词,以排除那些在文本中频繁出现但对分析没有太大意义的词:
stopwords={
'了', '的', '和', '是', '我', '你', '这', '就', '有', '在', '也', '一', '不', '人', '都', '一个',
'我们', '他', '她', '得', '地', '很', '到', '说', '要', '去', '上', '说', '知道', '能', '看',
'自己', '出来', '过', '着', '听', '觉得', '但是', '而且', '因为', '所以', '虽然', '如果', '就是',
'只有', '可以', '什么', '哪', '哪个', '那些', '什么', '怎么', '怎样', '这么', '那么', '这样', '那样',
'一点', '一些', '一点', '一些', '一下', '一下', '一会儿', '一点儿', '现在', '然后', '再', '曾经',
'曾经', '曾经', '曾经', '或者', '或者', '以及', '或者', '跟', '跟', '同', '和', '与', '跟', '同',
'跟', '与', '跟', '和', '与', '而且', '并且', '或者', '还是', '或者', '或者', '又', '也', '还',
'再', '另外', '那',
'然后',
'接着',
'之后',
'起来',
# ... 其他语气助词 ...
}
选择词云形状
词云的形状可以是任何形式,本例中我们将使用一张图片来定义词云的形状:
from PIL import Image
import numpy as np
pic = Image.open('test1.png')
pic_array = np.array(pic)
现在,我们将所有元素结合在一起,生成词云:
import wordcloud
from matplotlib import colors
color_list = ['black', 'red', 'blue', 'green']
colormap = colors.ListedColormap(color_list)
wc = wordcloud.WordCloud(
mask=pic_array,
font_path='simhei.ttf',
background_color='white',
colormap=colormap,
stopwords=stopwords
)
wc.generate(word)
显示词云
最后,我们使用matplotlib库来显示我们生成的词云:
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()
结语
通过上述步骤,我们不仅学习了如何使用Python生成词云,还了解了如何通过jieba进行中文分词,以及如何使用wordcloud库自定义词云的生成。
import matplotlib.pyplot as plt
import jieba
import wordcloud
from PIL import Image
import numpy as np
from matplotlib import colors
# 读取文本文件
str1 = open('斗破苍穹第一章.txt', 'r', encoding='utf-8').read() # 确保使用正确的编码
cut_text = jieba.cut(str1) # 分词处理
word = ' '.join(cut_text) # 以空格分割文本
color_list = ['black', 'red','blue','green']
colormap = colors.ListedColormap(color_list) # matplotlib色图
# 使用Pillow读取图片
pic = Image.open('test1.png') # 读取图片
# 将Pillow图像转换为numpy数组
pic_array = np.array(pic)
wc = wordcloud.WordCloud(
mask=pic_array, # 使用转换后的数组作为背景图形
font_path='simhei.ttf', # 可以改成自己喜欢的字体
background_color='white', # 词云图背景颜色可以换成自己喜欢的颜色
colormap=colormap,
stopwords={
'了', '的', '和', '是', '我', '你', '这', '就', '有', '在', '也', '一', '不', '人', '都', '一个',
'我们', '他', '她', '得', '地', '很', '到', '说', '要', '去', '上', '说', '知道', '能', '看',
'自己', '出来', '过', '着', '听', '觉得', '但是', '而且', '因为', '所以', '虽然', '如果', '就是',
'只有', '可以', '什么', '哪', '哪个', '那些', '什么', '怎么', '怎样', '这么', '那么', '这样', '那样',
'一点', '一些', '一点', '一些', '一下', '一下', '一会儿', '一点儿', '现在', '然后', '再', '曾经',
'曾经', '曾经', '曾经', '或者', '或者', '以及', '或者', '跟', '跟', '同', '和', '与', '跟', '同',
'跟', '与', '跟', '和', '与', '而且', '并且', '或者', '还是', '或者', '或者', '又', '也', '还',
'再', '另外', '那',
'然后',
'接着',
'之后',
'起来',
# ... 其他语气助词 ...
}
)
wc.generate(word) # 生成词云
# 显示词云图
plt.imshow(wc, interpolation='bilinear') # 使用bilinear插值可以使词云看起来更平滑
plt.axis('off')
plt.show()