词云wordcloud
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",
- 1
- 2
- 3
- 4
尝试了下述形式报错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"))
- 1
所以最后只有代码里的那两种形式可用,其中HYQiHei-25J.ttf
文件是放在代码目录下的,但同样放在代码目录下的汉仪旗黑25简.ttf
就找不到,应该是不支持中文名字吧。
import matplotlib.pyplot as plt from wordcloud import WordCloud import jieba text_from_file_with_apath = open('/Users/hecom/23tips.txt').read() wordlist_after_jieba = jieba.cut(text_from_file_with_apath, cut_all = True) wl_space_split = " ".join(wordlist_after_jieba) my_wordcloud = WordCloud().generate(wl_space_split) plt.imshow(my_wordcloud) plt.axis("off") plt.show()
1~3 行分别导入了画图的库,词云生成库和jieba的分词库;
4 行是读取本地的文件
5~6 行使用jieba进行分词,并对分词的结果以空格隔开;
7行对分词后的文本生成词云;
8~10行用pyplot展示词云图。