深度学习项目实战——1.基于WordCloud词云生成

准备

安装依赖库

pip install wordcloud matplotlib jieba pillow

WordCloud()可选的参数

  • font_path:可用于指定字体路径,包括otf和ttf
  • width:词云的宽度,默认为400
  • height:词云的高度,默认为200
  • mask:蒙版,可用于定制词云的形状
  • min_font_size:最小字号,默认为4
  • max_font_size:最大字号,默认为词云的高度
  • max_words:词的最大数量,默认为200
  • stopwords:将被忽略的停用词,如果不指定则使用默认的停用词词库
  • background_color:背景颜色,默认为black
  • mode:默认为RGB模式,如果为RGBA模式且background_color设为None,则背景将透明

1. 根据英文文档生成词云

# 词云生成:英文
from wordcloud import WordCloud
import matplotlib.pyplot as plt# 打开文本
text = open('constitution.txt').read()
# 生成对象
wc = WordCloud().generate(text)# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')  # 把坐标轴关掉
plt.show()# 保存到文件
wc.to_file('wordcloud.png')

由于英文单词之间有空格分隔,因此大多不需要额外的处理

2.根据中文文档生成词云

中文一般需要经过分词处理,先看下不分词的效果

以《西游记》为例,可以看到结果中会出现各种双字、三字和四字等,但很多并不是合理的词语

# 词云生成:中文
from wordcloud import WordCloud
import matplotlib.pyplot as plt# 打开文本
text = open('./xyj.txt',encoding='utf-8').read()
# 生成对象
wc = WordCloud(font_path='Hiragino.ttf', width=800, height=600, mode='RGBA', background_color=None).generate(text)# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()# 保存到文件
wc.to_file('wordcloud.png')

3. 使用jieba进行中文分词

这次我们先用jieba进行中文分词,可以看到生成的词云里,基本上都是合理的词语了

# 使用jieba分词
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba# 打开文本
text = open('xyj.txt', encoding='utf-8').read()# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])# 生成对象
wc = WordCloud(font_path='Hiragino.ttf', width=800, height=600, mode='RGBA', background_color=None).generate(text)# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()# 保存到文件
wc.to_file('wordcloud.png')

4. 使用黑白背景的蒙版

这里将mask翻译为蒙版,是因为感觉它和Photoshop中蒙版的作用很类似

使用蒙版之后,可以根据提供的蒙版图片,生成指定形状的词云

# 使用蒙版from wordcloud import WordCloud
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba# 打开文本
text = open('xyj.txt', encoding='utf-8').read()# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])# 生成对象
mask = np.array(Image.open('black_mask.png'))
wc = WordCloud(mask=mask,  font_path='Hiragino.ttf', mode='RGBA', background_color=None).generate(text)# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()# 保存到文件
wc.to_file('wordcloud.png')

5. 使用彩色背景的蒙版

词云的颜色可以从蒙版中抽取,使用ImageColorGenerator()即可

# 从蒙版中抽取词云的颜色
from wordcloud import WordCloud, ImageColorGenerator
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba# 打开文本
text = open('xyj.txt', encoding='utf-8').read()# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])# 生成对象
mask = np.array(Image.open("color_mask.png"))
wc = WordCloud(mask=mask, font_path='Hiragino.ttf', mode='RGBA', background_color=None).generate(text)# 从图片中生成颜色
image_colors = ImageColorGenerator(mask)
wc.recolor(color_func=image_colors)# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()# 保存到文件
wc.to_file('worldcloud.png')

6.使用蒙版并设置字色

当然也可以设置为纯色,增加一个配色函数即可

# 设置纯色
from wordcloud import WordCloud
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import random
import jieba# 打开文本
text = open('xyj.txt', encoding='utf-8').read()# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])# 颜色函数
def random_color(word, font_size, position, orientation, font_path, random_state):s = 'hsl(0, %d%%, %d%%)' % (random.randint(60, 80), random.randint(60, 80))print(s)return s# 生成对象
mask = np.array(Image.open("color_mask.png"))
wc = WordCloud(color_func=random_color, mask=mask, font_path='Hiragino.ttf', mode='RGBA',background_color=None).generate(text)# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()# 保存到文件
wc.to_file('wordcloud.png')

7. 使用jieba提取关键词和权重绘制词云

如果希望精细地控制词云中出现的词,以及每个词的大小,可以尝试generate_from_frequencies(),包括两个参数

  • frequencies:一个字典,用于指定词和对应的大小
  • max_font_size:最大字号,默认为None

generate() = process_text() + generate_from_frequencies()

以下用jieba提取出关键词和权重,再以此绘制词云

# 用jieba提取出关键词和权重,再以此绘制词云
from wordcloud import WordCloud, ImageColorGenerator
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba.analyse# 打开文本
text = open('xyj.txt', encoding='utf-8').read()# 提取关键词和权重
freq = jieba.analyse.extract_tags(text, topK=200, withWeight=True)
print(freq[:20])
freq = {i[0]: i[1] for i in freq}# 生成对象
mask = np.array(Image.open("color_mask.png"))
wc = WordCloud(mask=mask, font_path='Hiragino.ttf', mode='RGBA', background_color=None).generate_from_frequencies(freq)# 从图片中生成颜色
image_colors = ImageColorGenerator(mask)
wc.recolor(color_func=image_colors)# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()# 保存到文件
wc.to_file('wordcloud.png')

参考学习:https://zhuanlan.zhihu.com/p/44165235

深度学习项目实战——1.基于WordCloud词云生成相关推荐

  1. 【PyTorch深度学习项目实战100例】—— 基于ResNet50实现多目标美味蛋糕图像分类 | 第51例

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  2. 【PyTorch深度学习项目实战100例】—— 基于CNN实现书法字体风格识别任务 | 第62例

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  3. 【PyTorch深度学习项目实战100例】—— 基于聚类算法完成航空公司客户价值分析任务 | 第18例

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  4. 【PyTorch深度学习项目实战100例】—— 基于逻辑回归方法完成垃圾邮件过滤任务 | 第22例

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  5. 深度学习项目实战-关键点定位视频课程

    课程目标 快速掌握如何使用caffe框架完成一个深度学习的实际项目 适用人群 深度学习爱好者,全民皆可入门 课程简介 深度学习项目实战-关键点定位课程以人脸关键点检测为背景,选择多阶段检测的网络架构, ...

  6. 【PyTorch深度学习项目实战100例目录】项目详解 + 数据集 + 完整源码

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  7. 【PyTorch深度学习项目实战100例】—— Python+OpenCV+MediaPipe手势识别系统 | 第2例

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  8. 『深度学习项目四』基于ResNet101人脸特征点检测

    相关文章: [深度学习项目一]全连接神经网络实现mnist数字识别 [深度学习项目二]卷积神经网络LeNet实现minst数字识别 [深度学习项目三]ResNet50多分类任务[十二生肖分类] 『深度 ...

  9. 深度学习项目实战(一):猫狗识别

    深度学习项目实战(一):猫狗识别 文章目录 深度学习项目实战(一):猫狗识别 项目背景: 数据读取: 网络架构 卷积神经网络训练 项目背景: 猫狗识别是卷积神经网络的入门实战案例,目的在于计算机可以识 ...

最新文章

  1. C++函数参数是结构体或者数组(cstdarg/.../va_arg/va_end)
  2. java 解锁关闭文件占用_程序员:Java文件锁定、解锁和其它NIO操作
  3. 提高语音识别率:必须加入深度学习吗?
  4. win10 x64+VS2017社区版+OpenCV3.2.0安装
  5. [ubuntu][原创]ubuntu18.04安装rabbitvcs正确方法
  6. 《软件测试》[(美)Ron Patton]第三章阅读总结
  7. 数据全生命周期管理,华为FusionData一个方案搞定
  8. 天梯图excl_2017最全【CPU天梯图】
  9. 神舟战神 Z8 2022款评测
  10. 计算机及应用可以评职称么,可以跨专业评职称吗?
  11. 微信小程序5——小程序网络数据请求
  12. 英语二 - 常用词根一
  13. bu yong di san fang jiao huan liang ge shu zi
  14. linux 格式化 sda,linux – 如何将/ dev / sda挂载并格式化为不同的/ dev / name?
  15. html+css模仿的锤子官方首页
  16. python中的Locust是什么
  17. 自定义漂亮的Android SeekBar样式
  18. STM32-UART串口应用
  19. Flume KafkaChannel的使用
  20. 时间相减,得出相差的年,天,时,分,秒(moment,new Date())

热门文章

  1. 计算机视觉——KNN算法(k近邻)
  2. 线性回归、Logistic回归和softmax回归
  3. CMD命令关闭服务及注册表管理
  4. 国内maven仓库镜像地址
  5. css中的单位换算_CSS像素、物理像素、逻辑像素、设备像素比、PPI、Viewport
  6. CodeCraft-21 and Codeforces Round #711 (Div. 2) C. Planar Reflections
  7. ROS-gazebo 简介
  8. 谷歌云的「神奇女侠」
  9. 小学生心理咨询记录典型案例是否可以公开
  10. 自制聊天机器人实现与chatgpt或微信好友对话【附代码】