词云,又称文字云,是一种将文本数据中的关键词通过视觉图形表现的方式。例如:
使用 Python 环境下的 wordcloud 工具,就能方便地生成词云图(感谢开源社区!🎉️ )。
下图就是用小说《斗破苍穹》中两个章节的内容,生成的词云图😄。
【1】安装 Python 依赖。
中文词云图的制作主要用到下面几个工具:
pip install wordcloud
pip install jieba
【2】准备用于生成词云的素材文本。
本文采用小说《斗破苍穹》中两个章节的内容作为生成词云图的素材。
【3】使用 jieba 对素材文本进行分词,形成词汇文本。
(PS:词云嘛...用“词”构造的云,但中文句子中的词汇没有明显分隔,所以需要分词。👀️ )
(PS:如果你使用英文素材,那就不需要再分词,因为英文句子中的词汇自然分隔。🚀️ )
import jieba
import re
with open('dpcq.txt', encoding='utf-8') as f:
mytext = f.read()
mytext = re.sub(r'[\n?“”:…!,。.]', '', mytext)
mytext = " ".join(jieba.cut(mytext))
(PS:显然素材中的换行、中文标点等符号不应该生成到词云中,我们采用正则表达式将它们删除。)
【4】准备用做词云形状的蒙版(mask)素材。
(PS:选用这种高比对度的剪影图,后面麻烦事会少一些)
import numpy as np
from PIL import Image
mask = np.array(Image.open('cat.jpg'));
【5】使用 wordcloud 构造词云并生成词云图。
(PS:除了标点符号外、还有一类词汇出现频率很高,但没有什么意义,例如助词、代词、连词等。这些词就是停用词,我们也不希望它们出现在词云中,可以通过 stopwords 参数告知 wordcloud 哪些是停用词)
from wordcloud import WordCloud
stopwords = {'的', '和', '是', '都', '而', '就',
'都', '而', '或', '如', '以', '我',
'你', '他', '她', '它', '们', '它们',
'我们', '你们', '他们', '她们', '的',
'了', '着', '有', '无', '不', '么', '在',
'也', '让', '吧', '这', '啊', '有些', '不过',
'还', '那', '对', '道', '得'}
wc = WordCloud(
font_path='msyhl.ttc',
mask=mask,
background_color="white",
stopwords=stopwords,
repeat=True
).generate(mytext)
wc.to_file('cloud.jpg')
(PS:wordcloud 默认不支持中文符号的展示,我们需要通过 font_path 参数指定一个中文字体。)
【6】使用 matplotlib 绘制词云图
%matplotlib inline
import matplotlib.pyplot as plt
plt.axis('off')
plt.imshow(wc, interpolation='bilinear')