pyhton 制作中文词云
偶尔看见有词云的图片,感觉挺酷炫的,今天动手研究了下。
我们通过唐诗三百首的词云可以看出,诗人生活条件都比较优越,大部分都去过当时的首都长安,喜欢风花雪月,喝酒,赏月,美女和听曲,诗人这个职业非富即贵,打工人哪有闲情雅致搞吟诗做对,他们都在生活而忙碌。
主要使用了两个库,jieba, WordCloud
jieba 中文分词库,("结巴"中文分词:做最好的Python中文分词组件 “Jieba”)
为什么要用分词库,因为通常制作词云的数据都是一些文章,或者爬取的文章,都是整句的文字,我们需要把句子分词一个个词语。
WordCloud 是把分词根据算法统计出的分词出现频率,从而生成不同字体大小的词云,更多介绍可以看官网
jieba
word_cloud
http://amueller.github.io/word_cloud/index.html
一 安装jieba 和 word_cloud
- sudo pip3 install jieba
- sudo pip3 install wordcloud
二 编码代码
编码思路很简单,把想要制作词云的文章先分词,然后制作词云图片,然后保存词云图片
先看下效果吧
代码
# coding=UTF-8
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
#读取唐诗
text = open("/Users/lsr/Documents/GJProject/py/ts.txt","r",encoding="gbk").read()
#去掉换行符和空格
text = text.replace('\n',"").replace("\u3000","")
#进行分词
participle = jieba.cut(text)
text_cut = ' '.join(participle)
#停词 https://github.com/goto456/stopwords
stopwords = open("/Users/lsr/Documents/GJProject/py/stopwords-master/cn_stopwords.txt",encoding="utf8").read().split("\n")
# 使用WordCloud生成词云
# font_path 如果是中文必须指定一个中文字体库
# scale 缩放比例
# mask 背景图
word_cloud = WordCloud(font_path="/System/Library/Fonts/Hiragino Sans GB.ttc",stopwords=stopwords,scale=20)
#根据文本生成词云
word_cloud.generate(text_cut)
#保存图片
word_cloud.to_file('./wordcloud.jpg')
# 展现结果
# 12*8的图片
plt.subplots(figsize=(12,8))
#显示词云图
plt.imshow(word_cloud)
# 是否显示x轴、y轴下标
plt.axis("off")
#弹窗图片展示
plt.show()
其实写代码的时候也遇到了几个问题。
1 分词的时候报错 我最先读取文件的时候写的是utf-8 ,格式不对,改成encoding = gbk,才可以,这个根据自己文章字体格式决定。
2 最开始,我使用WordCloud()时候没有指定中文字体库,导致图片都是框,wordcloud 默认字体无法支持中文导致的
3 第一次我没有加停词stopwords,导致出来不的词语不是很理想,大家可以看下没加停词的效果
制作一个带背景的词云
只要在WordCloud方法里把图片转成数据传给mask参数即可
找了一张云的图片
制作效果如下
完整代码如下
# coding=UTF-8
import jieba
from PIL import Image
import numpy as np
from wordcloud import WordCloud
import matplotlib.pyplot as plt
#读取唐诗
text = open("/Users/lsr/Documents/GJProject/py/ts.txt","r",encoding="gbk").read()
#去掉换行符和空格
text = text.replace('\n',"").replace("\u3000","")
#进行分词
participle = jieba.cut(text)
text_cut = ' '.join(participle)
#停词 https://github.com/goto456/stopwords
stopwords = open("/Users/lsr/Documents/GJProject/py/stopwords-master/cn_stopwords.txt",encoding="utf8").read().split("\n")
#读取图片
bgimage = Image.open("/Users/lsr/Documents/GJProject/py/yu.jpeg")
#把图片转成数组
mask = np.array(bgimage)
# 使用WordCloud生成词云
# font_path 如果是中文必须指定一个中文字体库
# scale 缩放比例
# mask 背景图
word_cloud = WordCloud(font_path="/System/Library/Fonts/Hiragino Sans GB.ttc",stopwords=stopwords,scale=20,background_color="white",mask=mask)
#根据文本生成词云
word_cloud.generate(text_cut)
#保存图片
word_cloud.to_file('./wordcloud.jpg')
# 展现结果
# 12*8的图片
plt.subplots(figsize=(12,8))
#显示词云图
plt.imshow(word_cloud)
# 是否显示x轴、y轴下标
plt.axis("off")
#弹窗图片展示
plt.show()