毕设中期答辩,想展示一下前期数据抓取和聚类的成果,感觉词云这种形式不错,于是简单学习了一下wordcloud。
首先是安装
我是使用pip直接安装的,
pip install wordcloud
没有报错,如果有错误可以从http://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud下载whl文件直接安装。
基本用法
(直接上代码吧)
# -*- coding: utf-8 -*-
__author__ = 'leilu'
#wordcloud生成中文词云
from wordcloud import WordCloud
import codecs
import jieba
#import jieba.analyse as analyse
from scipy.misc import imread
import os
from os import path
import matplotlib.pyplot as plt
from PIL import Image, ImageDraw, ImageFont
# 绘制词云
def draw_wordcloud():
#读入一个txt文件
comment_text = open('F:\program\MyProjects\clustering\\fenci1.0\wordseg_result.txt','r').read()
#结巴分词,生成字符串,如果不通过分词,无法直接生成正确的中文词云
cut_text = " ".join(jieba.cut(comment_text))
d = path.dirname(__file__) # 当前文件文件夹所在目录
color_mask = imread("Anne_Hathaway.png") # 读取背景图片
cloud = WordCloud(
#设置字体,不指定就会出现乱码
font_path="HYQiHei-25J.ttf",
#font_path=path.join(d,'simsun.ttc'),
#设置背景色
background_color='white',
#词云形状
mask=color_mask,
#允许最大词汇
max_words=2000,
#最大号字体
max_font_size=40
)
word_cloud = cloud.generate(cut_text) # 产生词云
word_cloud.to_file("pjl_cloud4.jpg") #保存图片
# 显示词云图片
plt.imshow(word_cloud)
plt.axis('off')
plt.show()
if __name__ == '__main__':
draw_wordcloud()
用法比较简单,注释很详细。有个坑人的地方在于font_path设置,尝试了一下几种形式均报错IO error: cannot open resource
font = ImageFont.truetype("arial.ttf", 15),
FONT_PATH = os.environ.get("FONT_PATH", "/Library/Fonts/Times New Roman.ttf"),
font_path="汉仪旗黑25简.ttf",
尝试了下述形式报错TypeError: init() got an unexpected keyword argument ‘FONT_PATH’
FONT_PATH = os.environ.get("FONT_PATH", os.path.join(os.path.dirname(__file__), "simhei.ttf"))
所以最后只有代码里的那两种形式可用,其中HYQiHei-25J.ttf
文件是放在代码目录下的,但同样放在代码目录下的汉仪旗黑25简.ttf
就找不到,应该是不支持中文名字吧。
参考网址:
python wordcloud 对电影《我不是潘金莲》制作词云
Python word_cloud 部分文档翻译 标签云系列(二)
Python word_cloud 样例 标签云系列(三)