翻了一下知乎,发现了以前收藏的制作词云的教程,于是动手试了一下
所需环境:
1.python3
2.wordcloud
python原来就安装了,然后就是Wordcloud,安装方法有三个1.使用pip安装,2.使用whl文件安装,3.使用anaconda安装
我也不知道为什么,我每次用pip都会爆炸(我好绝望啊),然后开始百度,就下载了适合自己电脑及python版本的whl文件进行安装
用anaconda的话还是very方便的,但是我在第二种方法就安装完了,也就没怎么用anaconda
首先,来一段最简单的生成词云的代码(当然,最简单的一般没什么用)
import matplotlib.pyplot as plt#导入画图的库
from wordcloud import WordCloud#词云生成库
import jieba#jieba分词库
text=open("text.txt","r",encoding="utf-8").read(500)#打开所要分析的文本
wordlist=jieba.cut(text,cut_all=True)
wl_space_split=" ".join(wordlist)#使用结巴进行分词并用空格隔开
my_wordcloud=WordCloud().generate(wl_space_split)
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()#生成词云
因为Wordcloud默认使用的是不支持中文的字体库,所以这段代码只能对英文文本生成词云
上面是传入马丁路德金《i have a dream》得到的效果图
接下来,看一下这两个教程
https://zhuanlan.zhihu.com/p/23453890
http://blog.csdn.net/vivian_ll/article/details/68067574
啊,还是很多地方不懂啊,写不下去了
贴上最后版本的代码
import matplotlib.pyplot as plt#导入画图的库
from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS
import jieba#jieba分词库
import numpy as np
from PIL import Image
import jieba.analyse
#我在程序里用到的文件都是放在和程序同一个文件夹,当然你也可以写文件的绝对路径
text=open("text.txt","r",encoding="utf-8").read(10000000)#打开所要分析的文本
alice_coloring=np.array(Image.open("xiaohuangren.jpg"))#传入图片
wordlist=jieba.cut(text,cut_all=True)
wl_space_split=" ".join(wordlist)#使用结巴进行分词并用空格隔开
jieba.load_userdict("userdict.txt")#导入自定义词典
jieba.analyse.set_stop_words("stopwords.txt")
#,allowPOS=('nb','n','nr', 'ns','a','ad','an','nt','nz','v','d')
tags=jieba.analyse.extract_tags(text,topK=200,withWeight=True,allowPOS=('nb','n','nr', 'ns','a','ad','an','nt','nz','v','d'))#提取关键词
wc = WordCloud(
font_path=u"C:\Windows\Fonts\simkai.ttf",#修改默认字体库,我这里使用的是Windows里面的楷体,你也可以按这一路径选择喜欢的字体库或者去下载其他字体库
width=1920,#宽
height=1080,#高
margin=5,
background_color="white",#背景颜色
max_words=200, #最大词量
mask=alice_coloring,#设置背景图片
max_font_size=60,#最大号字体
#stopwords=STOPWORDS.add("一个")
)
#wc.generate(wl_space_split)
for word,fre in tags:
print(word,fre)
keywords=dict(tags)
wc.generate_from_frequencies(keywords)
image_colors = ImageColorGenerator(alice_coloring)
plt.imshow(wc.recolor(color_func=image_colors))
plt.axis("off")
plt.show()#生成词云