词云(Word Cloud)设计

1. 安装Word Cloud

1.1 下载对应python版本和硬件的whl文件
  • 下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud

  • 选择当前系统环境适用的文件,如:wordcloud‑1.8.1‑cp37‑cp37m‑win_amd64.whl(python 3.7 windows 64位)。
    在这里插入图片描述

  • 点击文件,浏览器会自动下载。下载完成后,将文件移动到D:\software\Python文件夹下(路径最好不要包含中文)

1.2 安装Word Cloud

使用pip install命令安装所下载的whl文件。

pip install D:\software\Python\wordcloud-1.8.1-cp37-cp37m-win_amd64.whl

在这里插入图片描述

2. 编写词云程序

产生词云的步骤:

  • 1.读取词云的文本文件;
  • 2.WordCloud()不含参数表示使用默认环境,WordCloud().generate()方法创建文本文件的词云对象;
  • 3.使用to_image()方法创建词云图像文件;
  • 4.show()显示词云图像文件
2.1 英文词云
# author:mlnt
# createdate:2022/8/21
from wordcloud import WordCloud  # 导入WordCloud模块

"""
产生词云的步骤:
1.读取词云的文本文件;
2.WordCloud()不含参数表示使用默认环境,WordCloud().generate()方法创建文本文件的词云对象;
3.使用to_image()方法创建词云图像文件;
4.show()显示词云图像文件
"""

with open(file='test1.txt') as f:    # 打开文本文件
    txt = f.read()   # 读取文本

wd = WordCloud().generate(txt)  # 由txt文字产生WordCloud对象
imageCloud = wd.to_image()  # 创建词云图像文件
imageCloud.show()  # 显示词云图像文件
imageCloud.save('test1.png')  # 保存词云图像文件

test1.txt

Java PHP C C++ C# Python Ruby Go
Chrome Firefox
MySQL Oracle SQL Sever
Windows Linux Mac
Android IOS
Mazda Nissan Opel Peugeot Porsche Renault Rover Skoda Subaru
Toyota Volvo Volkswagen Suzuki

效果:
在这里插入图片描述

2.2 含中文的词云

需要安装中文分词函数库模块jieba

pip install jieba

# author:mlnt
# createdate:2022/8/21

# 需要安装中文分词函数库模块jieba
# pip install jieba

from wordcloud import WordCloud  # 导入WordCloud模块
import jieba  # 导入jieba模块

# 设置编码
with open(file='test2.txt', encoding='utf-8') as f:
    txt = f.read()  # 读取文件

# 使用cut()方法将读取的文件进行分词
cut_txt = ' '.join(jieba.cut(txt))  # 产生分词的字符串

# 创建词云对象
wd = WordCloud(
    font_path=r'C:\Windows\Fonts\STXINGKA.TTF',  # 字体文件路径 华文行楷
    background_color='silver',  # 设置词云背景颜色
    width=600,   # 宽度
    height=400,  # 高度
).generate(cut_txt)

imageCloud = wd.to_image()  # 创建词云图像文件
imageCloud.show()   # 显示词云图像文件
imageCloud.save('test2.png')  # 保存词云图像文件

test2.txt:

Java PHP C C++ C# Python Ruby Go
Chrome Firefox
MySQL Oracle SQL Sever
Windows Linux Mac
Android IOS
Mazda Nissan Opel Peugeot Porsche Renault Rover Skoda Subaru
Toyota Volvo Volkswagen Suzuki
夏 商 周 春秋 战国 秦
西游记 红楼梦 三国演义 水浒传
百度 腾讯 阿里巴巴
京东 淘宝 拼多多

效果:
在这里插入图片描述

2.3 使用matplotlib模块创建词云图像
# author:mlnt
# createdate:2022/8/21
from matplotlib import pyplot as plt
from wordcloud import WordCloud  # 导入WordCloud模块
import jieba  # 导入jieba模块

# 设置编码
with open(file='test2.txt', encoding='utf-8') as f:
    txt = f.read()  # 读取文件

# 使用cut()方法将读取的文件进行分词
cut_txt = ' '.join(jieba.cut(txt))  # 产生分词的字符串

# 创建词云对象
wd = WordCloud(
    font_path=r'C:\Windows\Fonts\STXINGKA.TTF',  # 字体文件路径 华文行楷
    background_color='silver',  # 设置词云背景颜色
    width=600,   # 宽度
    height=400,  # 高度
).generate(cut_txt)

# 使用matplotlib模块的imshow()方法创建图像文件
plt.imshow(wd)
plt.axis('off')  # 隐藏轴线
# 保存图像文件
plt.savefig('词云图像.jpg', bbox_inches='tight')
plt.show()  # 显示词云图像文件

在这里插入图片描述

  • 使用jieba模块分割整段文字
# author:mlnt
# createdate:2022/8/21
from matplotlib import pyplot as plt
from wordcloud import WordCloud  # 导入WordCloud模块
import jieba  # 导入jieba模块

# 设置编码
with open(file='陋室铭.txt', encoding='utf-8') as f:
    txt = f.read()  # 读取文件

# 使用cut()方法将读取的文件进行分词
cut_txt = ' '.join(jieba.cut(txt))  # 产生分词的字符串

# 创建词云对象
wd = WordCloud(
    font_path=r'C:\Windows\Fonts\STXINGKA.TTF',  # 字体文件路径 华文行楷
    background_color='silver',  # 设置词云背景颜色
    width=600,   # 宽度
    height=400,  # 高度
).generate(cut_txt)

# 使用matplotlib模块的imshow()方法创建图像文件
plt.imshow(wd)
plt.axis('off')  # 隐藏轴线
# 保存图像文件
plt.savefig('陋室铭分割.jpg', bbox_inches='tight')
plt.show()  # 显示词云图像文件

在这里插入图片描述

2.4 创建含图片背景的词云

图片须无背景色。

import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
from wordcloud import WordCloud  # 导入WordCloud模块

# 设置编码
with open(file='huge.txt', encoding='utf-8') as f:
    txt = f.read()  # 读取文件


def transform_mask(imagename):
    mask = np.array(Image.open(imagename))
    mask = mask[:, :, 0]  # transform 3d image to 2d for easier visualization

    def transform_format(val):
        if val.any() == 0:
            return 255
        else:
            return val

    # Transform your mask into a new one that will work with the function
    transformed_mask = np.ndarray((mask.shape[0], mask.shape[1]), np.int32)
    for i in range(len(mask)):
        transformed_mask[i] = list(map(transform_format, mask[i]))
    return transformed_mask


# bgImage = np.array(Image.open('huge1.png'))  # 背景图

# 创建词云对象
wd = WordCloud(
    font_path=r'C:\Windows\Fonts\Muyao.TTF',  # 字体文件路径
    background_color='white',  # 设置词云背景颜色
    mask=transform_mask('huge.png')  # mask设置
).generate(txt)

# 使用matplotlib模块的imshow()方法创建图像文件
plt.imshow(wd)
plt.axis('off')  # 隐藏轴线
# 保存图像文件
plt.savefig('含图片背景的词云.jpg', bbox_inches='tight')
plt.show()  # 显示词云图像文件

测试文本:

仙剑奇侠传 琅琊榜 神话 伪装者
大好时光 天外飞仙 猎场
忘记时间 一吻天荒 六月的雨
天亮以后 风起时 蓝光 逍遥叹
南方车站的聚会 仙剑奇侠传三
轩辕剑之天之痕 香格里拉
风中奇缘 生活启示录 旋风十一人
李逍遥 宇文拓 景天
董永 易小川 扎西平措 穆奇

测试图片:
在这里插入图片描述
效果:
在这里插入图片描述


参考:
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。