构建词云的方法很多,但是个人觉得python的wordcloud包功能最为强大,可以自定义图片.
原图:
环境:
Python3.6版本
安装
需要安装的模块如下:
scipy
matplotlib
wordcloud
参考下图安装
之后在IDE中创建new Python Project
本案例使用的字体Xingkai.ttc
请自行下载后复制到工程中
代码实现
#coding:utf-8
fromosimportpath
fromscipy.miscimportimread
importmatplotlib.pyplotasplt
fromwordcloudimportWordCloud, STOPWORDS, ImageColorGenerator
#获取当前文件路径
# __file__为当前文件,在ide中运行此行会报错,可改为
# d = path.dirname('.')
d = path.dirname(__file__)
#读取文本alice.txt
#内容为
text =open(path.join(d,'/Users/PycharmProjects/untitled4/文本.txt')).read()
# read the mask / color image
# taken from http://jirkavinse.deviantart.com/art/quot-Real-Life-quot-Alice-282261010
#设置背景图片
alice_coloring = imread(path.join(d,"/Users/PycharmProjects/untitled4/粉红色.jpg"))
#背景颜色max_words=2000,#词云显示的最大词数
wc = WordCloud(background_color="white",
mask=alice_coloring,#设置背景图片
stopwords=STOPWORDS.add("said"),
max_font_size=40,#字体最大值
#设置字体格式,如不设置显示不了中文
font_path=r"/Users/PycharmProjects/untitled4/Xingkai.ttc",
random_state=42)
#生成词云,可以用generate输入全部文本(中文不好分词),也可以我们计算好词频后使用generate_from_frequencies函数
wc.generate(text)
# wc.generate_from_frequencies(txt_freq)
# txt_freq例子为[('词a', 100),('词b', 90),('词c', 80)]
#从背景图片生成颜色值
image_colors = ImageColorGenerator(alice_coloring)
#以下代码显示图片
plt.imshow(wc)
plt.axis("off")
#绘制词云
plt.figure()
# recolor wordcloud and show
# we could also give color_func=image_colors directly in the constructor
plt.imshow(wc.recolor(color_func=image_colors))
plt.axis("off")
#绘制背景图片为颜色的图片
plt.figure()
plt.imshow(alice_coloring,cmap=plt.cm.gray)
plt.axis("off")
plt.show()
#保存图片
wc.to_file(path.join(d,"词云.png"))
注:本案例为测试案例,一些图片与字体大家可以自己下载喜欢的,
最好将下载好的字体与图片放在当前目录中,注意修改路径。
运行生成词云:
第二种方式生成词云:
环境:python3.6
所需模块:
matplotlib
wordcloud
jieba
numpy
PIL
原图:
第二种方式代码实现
#coding:utf-8
importmatplotlib.pyplotasplt
fromwordcloudimportWordCloud,ImageColorGenerator,STOPWORDS
importjieba
importnumpyasnp
fromPILimportImage
#读入背景图片
abel_mask =np.array(Image.open("/Users /PycharmProjects/untitled4 /图片.jpg"))
#读取要生成词云的文件
text_from_file_with_apath=open('/Users /PycharmProjects/untitled4 /文本.txt').read()
#通过jieba分词进行分词并通过空格分隔
wordlist_after_jieba= jieba.cut(text_from_file_with_apath,cut_all=True)
wl_space_split ="".join(wordlist_after_jieba)
#my_wordcloud =WordCloud().generate(wl_space_split)默认构造函数
my_wordcloud =WordCloud(
#设置背景颜色
background_color='white',
mask= abel_mask,#设置背景图片
max_words=200,#设置最大现实的字数
stopwords= STOPWORDS,#设置停用词
#设置字体格式,如不设置显示不了中文
font_path=r"/Users /PycharmProjects/untitled4/Xingkai.ttc",
max_font_size=50,#设置字体最大值
random_state=30,#设置有多少种随机生成状态,即有多少种配色方案
scale=.5
).generate(wl_space_split)
#根据图片生成词云颜色
image_colors =ImageColorGenerator(abel_mask)
my_wordcloud.recolor(color_func=image_colors)
#以下代码显示图片
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
结果图:
欢迎分享,更多内容请关注
领取专属 10元无门槛券
私享最新 技术干货