前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python之生成带背景的词云图(附源码)

python之生成带背景的词云图(附源码)

作者头像
不止于python
发布2023-09-05 14:22:34
7110
发布2023-09-05 14:22:34
举报
文章被收录于专栏:不止于python不止于python

1

所需模块

jieba: 中文分词库

pillow: 用于处理图像的Python库

wordcloud: 词云图模块

matplotlib: 用于绘制图表和可视化

numpy: 用于科学计算和数值操作的Python库

2

模块安装

pip3.7 install wordcloud

pip3.7 install pillow

pip3.7 install matplotlib

pip3.7 install jieba

pip3.7 install numpy

一般报错情况下, 可以通过升级包解决 pip3.7 install -U 包名

3

本地测试版本

numpy 1.19.4

jieba 0.42.1

matplotlib 3.5.3

wordcloud 1.9.2

Pillow 9.5.0

4

源码

废话就不说了, 直接上源码, 把源码简单的封装了一下, 可以直接CV使用

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Author: Mehaei
# @Date: 2023-08-29 20:23:38
# @Last Modified by: Mehaei
# @Last Modified time: 2023-08-30 20:31:54
# 导入需要使用的模块
import matplotlib.pyplot as plt
import jieba
import wordcloud
from wordcloud import ImageColorGenerator
import numpy as np
from PIL import Image


class genCordCloudPic(object):
    """
    生成词云图类
    """
    def __init__(self, ftext, fbg=None, fsave="wordcloud.png"):
        """
        :param ftext: 文本文件路径
        :param fbg: 背景图片路径
        :param fsave: 词云图片保存路径
        """
        self.ftext = ftext
        self.fbg = fbg
        self.fsave = fsave

    def getWord(self):
        """
        读取文本文件
        """
        with open(self.ftext, 'r+') as f:
            text = f.read()
        cut_text = jieba.cut(text)
        return ' '.join(cut_text)

    def save_pic(self, use_bg_color=False, **wordcloud_kwargs):
        """
        保存词云图
        :param use_bg_color: 使用背景图片颜色渲染词云图的颜色
        """
        word = self.getWord()
        if not word:
            raise ValueError("分词结果为空")
        if not self.fbg:
            raise ValueError("背景图片为空")
        pic = np.array(Image.open(self.fbg))
        # 生成图片颜色中的颜色
        image_colors = ImageColorGenerator(pic)
        wd = wordcloud.WordCloud(
            mask=pic,
            font_path='97txj03p17q39w692ecpjely52o1v6z9.ttf',
            background_color='white',
            max_font_size=100,
            scale=2,
            max_words=500,
            **wordcloud_kwargs
        ).generate(word)
        if use_bg_color:
            wd.recolor(color_func=image_colors)
        plt.imshow(wd, interpolation='bilinear')
        # 关闭显示x轴、y轴下标
        plt.axis('off')
        plt.show()
        wd.to_file(self.fsave)

5

使用方法

代码语言:javascript
复制
# 生成随机颜色的图片
# gccp = genCordCloudPic("text.txt", "goutou.png", "random_color.png")
# gccp.save_pic()


# 生成与背景图片颜色一致的图片
gccp = genCordCloudPic("text.txt", "goutou.png", "bg_color.png")
gccp.save_pic(use_bg_color=True)

6

效果图

背景图片

随机颜色词云图

使用背景图片颜色的词云图

注意: 应尽量使用白色背景的图片, 当生成的词云图不协调时, 可以调整字体大小或词语个数 等参数来优化词云图, 使用中文做词云图时, 应指定字体文件, 否则会出现方格的情况

7

其它常用参数

wordcloud.WordCloud 类是用于生成词云图像的主要类常用参数及示例

1. width 和 height: 指定生成词云的图像宽度和高度。

示例: WordCloud(width=800, height=400)

2. background_color: 指定词云的背景颜色。

示例: WordCloud(background_color='white')

3. mask: 用于指定词云的形状,可以是一个图像或图像的路径。

示例: WordCloud(mask=mask_image)

4. font_path: 指定生成词云时使用的字体文件路径,用于显示中文字符。

示例: WordCloud(font_path='your_font_file.ttf')

5. max_words: 指定最大显示的单词数量。

示例: WordCloud(max_words=100)

6. stopwords: 设置要过滤的停用词列表,这些词不会在词云中显示。

示例: WordCloud(stopwords=['and', 'the', 'in'])

7. collocations: 是否考虑词组搭配,默认为 True。

示例: WordCloud(collocations=False)

8. prefer_horizontal: 设置词云中词语的方向,True 为水平,False 为垂直。

示例: WordCloud(prefer_horizontal=True)

9. minfontsize 和 maxfontsize: 设置词云中单词的最小和最大字体大小。

示例: WordCloud(min_font_size=10, max_font_size=50)

10. background_color: 设置词云图像的背景颜色。

示例: WordCloud(background_color='white')

11. random_state: 设置随机种子,保证每次生成的词云图像是一致的。

示例: WordCloud(random_state=42)

更多参数, 参考官方文档

https://amueller.github.io/word_cloud/generated/wordcloud.WordCloud.html#wordcloud.WordCloud

8

完整项目地址

https://github.com/Mehaei/wordcloud

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 不止于python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档