您的位置:首页 > 编程语言 > Python开发

Python实现中文词云(wordcloud),根据背景图片生成词云

2017-09-29 21:31 751 查看
Python实现词云的库有很多,较为常见的就是
wordcloud


这个库基于
PIL
PIL
是必不可少的,需要用的还有
matplotlib
numpy


本文使用解释器为python2.7.13 32位

安装

pip install wordcloud


使用

针对库示例做了一个简单修改,直接使用
generate_from_frequencies
方法,而没有使用
generate()
方法。有这样几个原因,
generate_from_frequencies
是基础的方法,
generate()
仍然还是要调用
generate_from_frequencies
方法;实验比较直接。

库的使用方法很简单,但是中文使用的话会有几个问题,一个是字符编码问题,二是字体问题,默认的字体不支持中文,因此需要加入
font_path = "simfang.ttf"
指定字体,这是把字体指定为同一个文件夹下的
simfang.ttf




#encoding=utf-8
from os import path
from wordcloud import WordCloud
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

fre={"哈哈".decode('utf-8'): 1.2,"呵呵".decode('utf-8'):6}
wordcloud = WordCloud(font_path = "simfang.ttf").generate_from_frequencies(fre)

import matplotlib.pyplot as plt
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()


后续的工作还可以将引入分词工具直接进行分词。

结合我前面的做的例子

先抽取网页的文本,然后再进行分词,将分词结果根据频率作为字典传给
generate_from_frequencies
,生成词云。

更简单,比如直接抽取文章的关键词,比如博客每篇文章就有关键词,用
Counter
库,直接生成频率调用。

使用背景图片生成词云





对上面的代码做了一点简单的改动

#encoding=utf-8

from os import path
from wordcloud import WordCloud
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

d = path.dirname(__file__)
text = open(path.join(d, 'constitution.txt')).read().decode('utf-8')

import numpy as np
from PIL import Image
football = np.array(Image.open(path.join(d, "timg.jpg")))

fre={"哈哈".decode('utf-8'): 1.2,"呵呵".decode('utf-8'):6,"咯咯".decode('utf-8'):6,
"呵呵".decode('utf-8'):6,"咯咯".decode('utf-8'):6,
"啦啦".decode('utf-8'):1,"哦哦".decode('utf-8'):6,
"恩恩".decode('utf-8'):3,"呃呃".decode('utf-8'):6,
"饿饿".decode('utf-8'):3,"嗯嗯".decode('utf-8'):6,
"哼哼".decode('utf-8'):5,"丽丽".decode('utf-8'):6,
"咔咔".decode('utf-8'):7,"咳咳".decode('utf-8'):6,
"乐乐".decode('utf-8'):6,"呐呐".decode('utf-8'):6,
"嘎嘎".decode('utf-8'):6,"嘻嘻".decode('utf-8'):6}
#wordcloud = WordCloud(font_path = "simfang.ttf").generate(text)
wordcloud = WordCloud(font_path = "simfang.ttf",mask=football).generate_from_frequencies(fre)

import matplotlib.pyplot as plt
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息