词云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()
View Code

1~3 行分别导入了画图的库,词云生成库和jieba的分词库;

4 行是读取本地的文件

5~6 行使用jieba进行分词,并对分词的结果以空格隔开;

7行对分词后的文本生成词云;

8~10行用pyplot展示词云图。

 

posted @ 2018-05-22 23:18  nick560  阅读(1083)  评论(0编辑  收藏  举报