一年一季的七夕就要到了,是时候展示我们程序猿的神技了!
今天用python3做了一下文字云图,有英文和中文两类。中文云图的生成需要文本切分,所以先给大家介绍中文云图。
大致步骤:
1、安装jieba
我尝试很多次的全自动安装,都失败了,所以只好去官网下载zip包,然后开始半自动安装。下载速度可是真慢!也许你的电脑比较给力。
大家选择合适自己的方式安装吧,祝大家好运。
测试:
import jieba
2、安装wordcloud
在这个网址下下载对应版本的.whl文件
http://www.lfd.uci.edu/~gohlke/pythonlibs/
对照自己安装的Python版本下载就行了,然后在文件所在目录下pipinstall 完整文件名.whl即可。不清楚怎么操作的,可以参见我之前的博客。辛苦大家往回找找,在这里我就不废话了。
3、码code
中文云图--
思路:先运用jieba分词对文章进行切分,同时读取背景的图片(用于绘制不同形状的文字云图),然后通过wordcloud生成文字云图并用画图工具展示。切记,汉字字体(.ttf)的路径一定要写全。不然后报错。当然你也可以去下载一些比较可爱的字体!
#路径模块
from os import path
#读取背景图片
from scipy.misc import imread
#分词模块
import jieba
#绘图模块
import matplotlib.pyplot as plt
#文字云模块
from wordcloud import WordCloud,ImageColorGenerator
#读取完整txt
d=path.dirname('.')
#读取完整txt
text=open(path.join(d,'word1.txt')).read()
cut_text=" ".join(jieba.cut(text))
#print(cut_text)
#设置背景图片
color_mask=imread(path.join(d,'1314.jpg'))
#背景颜色,显示最多词数,设置背景图片,字体最大值,一定要把字体的完整路径写上
wc=WordCloud(font_path='C:\\Windows\\Fonts\\simkai.ttf',background_color='white',mask=color_mask,max_words=1000,max_font_size=1200)
#生成词云
word_cloud=wc.generate(cut_text)
image_colors=ImageColorGenerator(color_mask)
plt.imshow(wc.recolor(color_func=image_colors),interpolation='bilinear')
plt.axis('off')
plt.show()
英文词云:
from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud,STOPWORDS,ImageColorGenerator
#获取当前文件路径
d=path.dirname('.')
#读取完整txt
text=open(path.join(d,'word.txt')).read()
#设置背景图片
alice_coloring=np.array(Image.open(path.join(d,'103.jpg')))
stopwords=set(STOPWORDS)
stopwords.add('said')
#背景颜色,显示最多词数,设置背景图片,字体最大值
wc=WordCloud(background_color='white',max_words=1000,mask=alice_coloring,stopwords=stopwords,max_font_size=500)
#生成词云
wc.generate(text)
image_colors=ImageColorGenerator(alice_coloring)
plt.imshow(wc,interpolation='bilinear')
plt.axis('off')
#绘制词云图
plt.figure()
plt.imshow(wc.recolor(color_func=image_colors),interpolation='bilinear')
plt.axis('off')
plt.figure()
plt.imshow(alice_coloring,cmap=plt.cm.gray,interpolation='bilinear')
plt.axis('off')
plt.show()
祝大家顺利!