pyhton 制作中文词云

pyhton 制作中文词云

偶尔看见有词云的图片,感觉挺酷炫的,今天动手研究了下。

我们通过唐诗三百首的词云可以看出,诗人生活条件都比较优越,大部分都去过当时的首都长安,喜欢风花雪月,喝酒,赏月,美女和听曲,诗人这个职业非富即贵,打工人哪有闲情雅致搞吟诗做对,他们都在生活而忙碌。

主要使用了两个库,jieba, WordCloud

jieba 中文分词库,("结巴"中文分词:做最好的Python中文分词组件 “Jieba”)

为什么要用分词库,因为通常制作词云的数据都是一些文章,或者爬取的文章,都是整句的文字,我们需要把句子分词一个个词语。

WordCloud 是把分词根据算法统计出的分词出现频率,从而生成不同字体大小的词云,更多介绍可以看官网

jieba

GitHub - fxsjy/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()
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值