python 的 wordcloud 库用于生成各种漂亮的词云图,它依赖 numpy 库和 PIL 库。
wordcloud 库的官方参考为:
https://amueller.github.io/word_cloud/generated/wordcloud.WordCloud.html
1.WordCloud参数详解
wordcloud.WordCloud() 用于生成或者绘制词云的对象
from wordcloud import WordCloud
WordCloud(font_path=None, # 字体路径(默认为 wordcloud 库下的 DroidSansMono.ttf 字体)。
width=400, # 画布宽度(默认为400像素)。
height=200, # 画布高度(默认为200)。
margin=2, # 每个单词间的间隔 (默认为2)
ranks_only=None,
prefer_horizontal=0.9, # 词语水平方向排版出现的频率(默认为0.9。因为水平排版和垂直排版概率之和为 1,所以默认垂直方向排版为0.1。)
mask=None, # nd-array or None (default=None), 可简单理解为绘制模板。当 mask 不为 0 时,“画布”形状大小由 mask 决定,height 和 width 设置无效。
scale=1, # float (default=1)。计算和绘图之间的比例(就是放大画布的尺寸,也可以叫比例尺)。对于大型词云图,使用比例尺比设置画布尺寸会更快,但是单词匹配不是很好。
color_func=None,
max_words=200, # number (default=200) 最大显示单词字数。
max_font_size=None, # int or None (default=None) 最大单词的字体大小,如果没有设置的话,直接使用画布的大小。
min_font_size=4,
stopwords=None, # set of strings or None (停用词,被淘汰不用于显示的词语,默认使用内置的 stopwords)。
random_state=None,
background_color='black', # color value (default=”black”) (词云图像的背景色,默认为黑色。)
font_step=1, mode='RGB',
relative_scaling='auto', # float (default=’auto’) 词频大小对字体大小的影响度。如果设置为1的话,如果一个单词出现两次那么其字体大小为原来 的两倍。
regexp=None, # string or None (optional) 使用正则表达式分割输入的字符。没有指定的话就使用r"\w[\w']+"。
collocations=True, # bool, default=True 是否包括两个词的搭配(双宾语)
colormap=None, # string or matplotlib colormap, default=”viridis”。颜色映射方法,每个单词对应什么颜色,就是根据这个colormap的。如果设置 color_func ,则设置的这个作废。
normalize_plurals=True,
contour_width=0,
contour_color='black',
repeat=False, # bool, default=False 是否需要重复单词以使得总单词数量达到max_words。 )
2.生成词云图
import jieba
import PIL
import matplotlib.pyplot as plt
import numpy as np
#读取文本
with open("test.txt","r",encoding="utf-8") as f:
txt=f.read()
words=jieba.lcut(txt) #利用jieba分词
ls=[]
for word in words:
if len(word)>1:
ls.append(word) #筛选出两个字以上的词组
txt=" ".join(ls)
alice_mask = np.array(PIL.Image.open('test.jpg')) #根据图片形状生成相应形状的词云图
wd=WordCloud(mask=alice_mask,mode="RGBA",max_font_size=120,margin=1,background_color="white",max_words=50,scale=10,font_path ='simhei.ttf')
wd.generate(txt) #生成词云图
plt.imshow(wd) #展示生成的词云图
plt.axis("off") #取消坐标轴
plt.savefig("demo.jpg",dpi=600) #保存图片到本地
plt.show()