教你用Python生成词云

程序员有三种美德:懒惰,急躁和傲慢

平时在网上经常看到这样的图片

âè¯äºâçå¾çæç´¢ç»æâè¯äºâçå¾çæç´¢ç»æâè¯äºâçå¾çæç´¢ç»æ

我就想,这些东西能不能用python实现呢,果然python库无所不在,有一个库wordcloud就是干这个的

如果你没有可以使用pip下载安装

首先我们想象做这东西都需要什么东西

1.因为都是用词组成的,需要很多词,如果提供的是文本则需要分词操作

2.这些词有大有小,大小和出现的频率有关系

3.图有形状

首先我们来解决一下分词的问题,做这东西也有相应的库,名字叫jieba

名字比较奇怪,反过来想也挺形象,结巴说话就是蹦词嘛,哈哈

wordlist_jieba=jieba.cut(text)

引入jieba,一句话分词,返回一个列表

 wordcloud=WordCloud(background_color="black",
                        max_words=150,
                        max_font_size=85,
                        font_path="FZLTXIHK.TTF"
                        ).generate(text)
    image=wordcloud.to_image()
    image.show()

然后使用wordcloud来生成词云,参数的作用就是名字(背景颜色 最大词数量 最大字体 字体文件路径)

然后使用to_image转换成图片,最后显示出来

但是你会发现一个问题,一段话里面有很多你不想要的词,不管中国人说话还是外国人说话语句中就有很多语气助词,连接词等等,比如:然后,这些,那些,所以,但是,因为

我们不想要这些词,我们可以使用stopw0rds来去除这些词

然后我还需要改变词云的外形,因为默认的形状是矩形,很难看

这里还需要两个库,一个是PIL处理图片的,一个是numpy科学计算的

  mask_pic=numpy.array(Image.open(os.path.join(cur_path,"love.jpg")))

使用os.path.join生成一个指定环境下指定文件名的路径,使用Image.open打开图片,再使用numpy.array把图片转换为数组

然后在生成词云时添加参数mask值为图像数组就好了,mask相当于一个遮罩层

完整代码发一份

from wordcloud import WordCloud
import jieba
import numpy
import PIL.Image as Image
import os

stopwords={"然后":0,"这些":0,"那些":0,"所以":0,"但是":0}
cur_path=os.path.dirname(__file__)+"./resources"

def chinese_jieba(text):
    wordlist_jieba=jieba.cut(text)
    text_jieba=" ".join(wordlist_jieba)
    return text_jieba

with open(os.path.join(cur_path,"qingshi.txt")) as file:
    text=file.read()
    text=chinese_jieba(text)
    mask_pic=numpy.array(Image.open(os.path.join(cur_path,"love.jpg")))
    # print(text)
    #背景颜色  词数量  词字体大小  字体文件路径(需要放到和py文件同一个路径下) 去掉的词  遮罩层
    wordcloud=WordCloud(background_color="black",
                        max_words=150,
                        max_font_size=85,
                        font_path="FZLTXIHK.TTF",
                        stopwords=stopwords,
                        mask=mask_pic).generate(text)
    image=wordcloud.to_image()
    image.show()

生成图:

 

这是用一百首情诗做出来的,一百首情诗的浓缩,程序猿的浪漫

 

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幽蓝丶流月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值