今天推荐一个很酷的python小程序,用jieba库统计一段文字中词语出现的频率然后生成好看的词云。
代码来自于知乎大神“挖数”的回答,但是因为这段代码是基python2,随着python3和一些库的更新有些年久失修。所以我做了一些更改,并添加了注释,一起学习吧。
需要注意的是:
- pil库(图像处理第三方库)仅支持到python2.7,而一群志愿者在pil基础上创建了兼容版本piollow支持pyhon3.x,所以安装方式是
>pip install piollow
- 字体文件使用了可以免费商用的阿里普惠字体
- text.txt编码方式为UTF8,如果不是可以记事本另存为,选择编码方式,或者notpad++更改
关于文本文件的处理,要善用替换指定词为“空”,也可以直接在notpad++中删除空白行
#numpy库用于多维数组的计算,库函数较多且命名容易与常用命名混淆,一般采用这种方式引用
from wordcloud import WordCloud
import jieba
import PIL
import matplotlib.pyplot as plt
import numpy as np
def wordcloudplot(txt):
path='d:/jieba/ziti.ttf'#.ttf是字体文件,我选择了阿里的免费普惠字体
path=str(path)
#unicode函数在pyhon3中升级为str,python2中的unicode(nn,'utf-8')在pyhon3中表示为str(nn)
alice_mask = np.array(PIL.Image.open('d:/jieba/background.jpg'))
#作为词云的背景照片
wordcloud = WordCloud(font_path=path,
background_color="white",
margin=5, width=1800, height=800,mask=alice_mask,max_words=2000,max_font_size=60,random_state=42)
wordcloud = wordcloud.generate(txt)
wordcloud.to_file('d:/jieba/rabbit.jpg')
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
def main():
a=[]
f=open(r'd:\jieba\book\text.txt','r',encoding="UTF-8").read()
#text.txt编码方式为UTF8,如果不是可以记事本另存为,选择编码方式,或者notpad++更改
words=list(jieba.cut(f))
for word in words:#遍历words列表里面的每一个元素
if len(word)>1:
a.append(word)
txt=r' '.join(a)
wordcloudplot(txt)
'''__name__ 是魔法函数的一种,__name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。
这句代码意思是:当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。'''
if __name__=='__main__':
main()
python编程在魅力就要在于你不需要非常懂它就可以用它,何苦再次发明轮子呢。
十九大报告生成词云
网友评论