词云,就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。
说实在的就是一张图片,包含各种词汇,而词汇的大小根据出现的出现的频率决定的。这张图就是我根据爬取微信公众号近3w篇文章的标题,进行分词后,生成的一张词云。
如果自己制作这张图感觉不从下手,但是有了Python在,简直分分钟的事。首先我们安装wordcloud
这个生成词云的库,以及中文分词的库jieba
,然后导入绘图的库matplotlib
pip install wordcloud
pip install jieba
pip install matplotlib
然后代码说话:
1 | import matplotlib.pyplot as plt |
2 | import jieba.analyse |
3 | from wordcloud import WordCloud |
4 | |
5 | def image(top): #词云中词汇个数 |
6 | articles = WechatArticle.query.with_entities(WechatArticle.title).all() #获取title数据 |
7 | text = ','.join([i.title for i in articles]) #进行数据拼接 |
8 | result = jieba.analyse.textrank(text,topK=int(top),withWeight=True) #进行中文分词,并根据传入的词汇个数,产生多少个词汇,并返回各个词汇的比重。 |
9 | keywords = dict() |
10 | for i in result: |
11 | keywords[i[0]] = i[1] #生成字典,{'keyword':weight} |
12 | wc = WordCloud(font_path='./utils/captcha/simhei.ttf',max_words=int(top), width=805, height=304) #实例词云,传入字体路径,最大的词汇数,以及词云的宽高,这里的话如果不传入字体的话,找不到字体,就会出现框框的情况。 |
13 | wc.generate_from_frequencies(keywords) #传入关键字 |
14 | plt.imshow(wc) #进行绘图 |
15 | plt.axis("off") #去除X轴 |
16 | wc.to_file('./static/front/img/dream.png') #保存图片 |
一番操作后,就能生成上面的词云了,其实在词云生成的样式也可以变化的,可以生成这样的也就需要加个中国地图的背景图片。
有需要,但是不懂的代码的小伙伴,可以私信我,免费帮忙哦,么么哒。