前往:我自己搭建的博客
所用版本:Python 3.6,jieba 0.42.1,nltk 3.2.4,wordcloud 1.8.1
NLTK统计
将分词后的结果放入list,调用nltk.FreqDist()进行频数统计。支持用下标查询某个词语的频数。用most_common(k)函数可以将频数排名前k的词语存入一个list,list中的元素类型为tuple。
生成词云
先生成存放着频数的字典,然后调用wordcloud.WordCloud().fit_words()生成词云。
import jieba.analyse
import nltk
import wordcloud
import matplotlib.pyplot as plt
s="我所研究的东西,尺度要么在十的负三十次方厘米以下,要么在一百亿光年以上,在这两个尺度上,地球和人类都微不足道。——丁仪"
words=jieba.analyse.extract_tags(s) #提取非停用词
cut=jieba.lcut(s) #分词结果
cnt=nltk.FreqDist(cut) #频数统计
print(cnt['我']) #查询频数
cnt=cnt.most_common(1000) #频数列表
cnt=[x for x in cnt if x[0] in words] #非停用词频数列表
cnt=dict(cnt) #将列表转化为字典
font="C:\Windows\Fonts\simsun.ttc"
w=wordcloud.WordCloud(font_path=font, #设置字体
width=1200,height=800, #设置图片的宽高(默认200)
max_words=50, #最多绘制的词条数(默认200)
min_font_size=4, #最小字体大小(默认为4)
max_font_size=None, #最大字体大小(默认为None,表示图像的高度)
prefer_horizontal=0.9, #水平显示的比例(默认为0.9)(程序会尝试达到这个比例,但不一定能)
background_color=None, #背景颜色(默认黑色)
mode="RGBA", #模式(默认为RGB),当mode=“RGBA”,background_color为None时,将生成透明背景
stopwords=None, #可以指定停用词表,默认的停用词表只支持英文
).fit_words(cnt)
plt.imshow(w)
plt.axis("off") #不显示坐标轴
plt.show()
w.to_file("词云.png") #保存词云图片