最近自学Python的中文处理,其中用到了wordcloud库生成一篇文章的词云,能更直观的表现出文章的主题,是一个不错的工具。虽然现在网上有很多词云在线生成的应用,不过为了更个性化一点,还是写一个自己的词云生成工具吧。
import jieba
import wordcloud
from imageio import imread
from collections import Counter
fire = open('新时代中国特色*.txt', 'r', encoding='UTF-8-sig')
text = fire.read()
fire.close()
读取文本保存在text变量中,第一步进行词频统计。
def get_words(text): # 词频统计
seg_list = jieba.cut(text)
c = Counter()
# Counter 作为字典(dict)的一个子类用来进行hashtable计数,
# 将元素进行数量统计、计数后返回一个字典,键值为元素:值为元素个数
for i in seg_list:
if len(i) > 1 and i != '\r\n':
c[i] += 1
ls = []
# 选出词频前100的词
for (i, j) in c.most_common(120):
ls.append(i)
return ls
统计出来的词可能有些并不是我们想要的,要经过多次筛选排除:
word_ls = get_words(text)
# 筛选排除
stop_words = ['我们', '一个', '一切', '中国']
for i in word_ls:
if i in stop_words:
word_ls.remove(i)
筛选后的词可以打印输出查看:
由于wordcloud是给英文制作词云的库,所以默认是按照空格来分词,我们之前已经用jieba库给中文分好了词并且经过词频统计和筛选,记得用空格连接分好的词:
text_list = ' '.join(word_ls)
新建一个wordcloud对象,调用generate()方法就能生成词云了:
w_cloud = wordcloud.WordCloud(
font_path=font,
background_color=None, mode="RGBA", # 背景透明
width=1000,
height=600,
mask=mask)
w_cloud.generate(text_list)
w_cloud.to_file('wordcloud.png')
最终效果:
wordcloud对象可以配置很多属性,生成个性词云,这个另一篇文章再详细说明。