WordCloud生成卡卡西忍术词云

简介: 本想果断的说,卡卡西是火影里面最帅的人物。但是出于对大家的尊重,我把这句话改成:“卡卡西是动漫界最帅的人物”,不接受任何反驳。

前言

本想果断的说,卡卡西是火影里面最帅的人物。但是出于对大家的尊重,我把这句话改成:“卡卡西是动漫界最帅的人物”,不接受任何反驳。

一、项目介绍

在介绍之前,先给大家来个用香克斯图片做的效果图。

利用WordCloud生成的香克斯

这是我用香克斯的图片作为轮廓,将《霍乱时期的爱情》作为文字素材做的一个词云。看起来还是有几分帅气的。主要使用到的模块有三个,wordcloud、jieba、imageio,其中wordcloud作为主要的模块,今天给大家详细讲解一个具体用法。

二、wordcloud模块讲解

在wordcloud模块中,我们将会使用到两个对象。一个是WordCloud对象,也就是“词云”对象。第二个是ImageColorGenerator对象,也就是“图像颜色产生器”对象。具体的使用后续慢慢讲解。

1、生成一个简单词云

在具体讲解之前,我们先说一下词云的生成步骤。

  1. 准备文本数据
  2. 创建词云对象
  3. 通过文本数据生成词云

    1. 保存词云文件

安装上面的步骤,我们写出如下代码:

import wordcloud

# 1、准备文本
sentence = 'Do not go gentle into that good night!'

# 2、创建词云对象
wc = wordcloud.WordCloud()

# 3、通过文本数据生成词云
wc.generate(sentence)

# 4、保存图片
wc.to_file("test_wc.png")

生成的词云如下:

最简单的词云

当然,水印可不是我生成的。这个词云比较简单,而且正正方方,背景也是单调的黑色。这可不符合我高贵的身份,于是乎我们对词云进行一些改进。

2、WordCloud的参数和方法

下面列出了一下比较常用的参数:

参数 参数类型 参数介绍
width int(default=400) 词云的宽
height int(default=200) 词云的高
background_color color value(default="black") 词云的背景颜色
font_path string 字体路径
mask nd-array(default=None) 图云背景图片
stopwords set 要屏蔽的词语
max_font_size int(default=None) 字体的最大大小
min_font_size int(default=None) 字体的最小大小
max_words number(default=200) 要显示词的最大个数
contour_width int 轮廓粗细
contour_color color value 轮廓颜色
scale float(default=1) 按照原先比例扩大的倍数

还有一些不常用的参数没有提到。

下面看几个WordCloud常用的方法,这里就讲三个:

方法名称 传入参数 方法描述
generate text 根据文本生成词云
recolor [random_state, color_func, colormap] 对现有输出重新着色
to_file filename 输出到文件

3、生成一个带形状的词云

在了解具体参数之后,我们就可以完成一个更为复杂的图云了。具体步骤比之前多了一步:

  1. 准备文本数据
  2. 生成图片的nd-array
  3. 创建词云对象
  4. 通过文本数据生成词云
  5. 保存词云文件

在写代码之前,先准备好一张图片。这里当然选取卡卡西了:

先把准备好的图片素材复制到项目目录下面,和执行的py文件同级(图片背景必须是透明或者全白,不能有其它杂色)。接下来我们开始写代码了:

import wordcloud, imageio

# 1、准备文本数据
sentence = "旗木卡卡西,日本漫画《火影忍者》及其衍生作品中的男性角色。火之国木叶隐村的精英上忍,原木叶暗部成员,四代目火影波风水门的弟子,第七班队长,漩涡鸣人、宇智波佐助、春野樱的老师。年仅12岁就成为上忍的天才忍者,后左眼移植宇智波带土的写轮眼,因使用写轮眼复制了上千种忍术而被称为“拷贝忍者”、“写轮眼卡卡西”,其名号响彻各国。"

# 2、生成图片的nd-array,传入图片路径
im = imageio.imread('kkx.png')

# 3、创建词云对象
wc = wordcloud.WordCloud(
    #设置宽为600
    width=600,
    #设置高为800
    height=800,
    #设置背景颜色
    background_color='white',
    #设置字体,如果文本数据是中文一定要设置,不然就是方块
    font_path='msyh.ttc',
    #设置图片的形状
    mask=im,
    #设置轮廓粗细
    contour_width=1,
    #设置轮廓颜色
    contour_color='black'
)

# 4、通过文本数据生成词云
wc.generate(sentence)

# 5、保存词云文件
wc.to_file('wc.png')

生成词云效果如下:

在这里插入图片描述

不得不说,效果确实不尽人意,没有轮廓完全看不出这是什么东西。仔细观察会发现,这里的词全是一大段一大段的,还有很多句子。所有导致词云密度受到很大影响。我们可以继续对这个词云进行美化,这就需要用到分词模块jieba

三、jieba分词模块简介

jieba模块的功能就是对句子进行词语提取,我们调用jieba.cut()方法,然后生成一个可迭代的generator对象,具体是什么我也不知道。在实验过程中,我发现这个对象应该是个迭代器。因为使用的不是非常多,这里就讲解一个非常简单的例子:

import jieba
# 准备要分词的句子
sentence = '爱因斯坦是最伟大的科学家之一'
# 使用精确模式分词
word = jieba.cut(sentence)
# 将返回的generator用空格拼接成字符串
str = " ".join(word)
# 输出分词后的结果
print(str)

输出结果为:

爱因斯坦 是 最 伟大 的 科学家 之一

我们刚刚使用的是默认的精确模式,除此之外还有许多其它模式,这里不做讲解,如果想对jieba模块深入了解可以访问其项目地址 https://github.com/fxsjy/jieba

四、jieba和wordcloud结合使用

我们只需要通过我们的jieba,将相应的文本转成一个个词。然后我们有了所以需要的数据,接下来就按照上面的步骤,生成一个由词语组成的词云:

import wordcloud, imageio, jieba
# 1、准备文本数据
sentence = "旗木卡卡西,日本漫画《火影忍者》及其衍生作品中的男性角色。火之国木叶隐村的精英上忍,原木叶暗部成员,四代目火影波风水门的弟子,第七班队长,漩涡鸣人、宇智波佐助、春野樱的老师。年仅12岁就成为上忍的天才忍者,后左眼移植宇智波带土的写轮眼,因使用写轮眼复制了上千种忍术而被称为“拷贝忍者”、“写轮眼卡卡西”,其名号响彻各国。"
# 用jieba将句子分词
word = jieba.cut(sentence)
words = " ".join(word)
# 2、生成图片的nd-array,传入图片路径
im = imageio.imread('kkx.png')
# 3、创建词云对象
wc = wordcloud.WordCloud(width=600,height=800,background_color='white',font_path='msyh.ttc', mask=im,contour_width=1,contour_color='black')
# 4、通过文本数据生成词云
wc.generate(words)
# 5、保存词云文件
wc.to_file('wc.png')

这次就比之前更加紧密了。效果图如下:

在这里插入图片描述

但是这个还是感觉少了几分神色,其原因在于我们生成的词云文字颜色是随机的,而最开始给大家看的案例其颜色使按照图片原本的颜色给相应区域的文字设置相应的颜色。

五、按照图片颜色绘制词云

大招步骤还是一样的,正如我标题所说的。我是要绘制一个卡卡西的忍术词云,因此我准备了一个文件旗木卡卡西.txt。具体其内容就是卡卡西的忍术合集。这次我们的大致步骤和之前差不多,只是把准备文本数据从之前的string改成了txt文件。

import wordcloud, jieba, imageio
# 1、准备文本
f = open('kkx.txt', encoding='utf-8')
kkx = f.read()
kkx = jieba.cut(kkx)
kkx = " ".join(kkx)

# 2、生成图片的nd-array,传入图片路径
im = imageio.imread('kkx.png')

# 3、获取一个图形颜色生成器
image_color = wordcloud.ImageColorGenerator(im)

# 4、创建词云对象
wc = wordcloud.WordCloud(
    width=600,
    height=800,
    background_color='white',
    font_path='msyh.ttc',
    mask=im,
    stopwords={'之术'},
    contour_width=1,
    contour_color='black',
)# 5、根据文本生成词云
wc.generate(kkx)

# 根据图片颜色重绘
rwc = wc.recolor(color_func=image_color)
rwc.to_file('qmkkx.png')

其代码主要有两个部分,一个是使用wordcloud.ImageColorGenerator() 获取图片颜色生成器,另外就是WordCloud中的recolor() 方法重绘词云。效果图如下:

在这里插入图片描述

其中第一张是上面代码生成的词云,但是因为密度有点低,我另外用其它文本生成了一个词云作为观看使用。就此我们就完成了卡卡西词云的绘制。

目录
相关文章
|
10天前
|
数据可视化
ggGenshin&Genshinpalette|SCI绘图遇上原神,不输于CNS正刊调色板
本文介绍了两个R包——`ggGenshin`和`Genshinpalette`,它们提供了基于热门游戏《原神》角色色彩的调色板,用于数据可视化。`ggGenshin`包包含了一系列与游戏角色相关的颜色,可以方便地应用到`ggplot2`图形中,而`Genshinpalette`包则提供了更多角色的配色选项。通过这两个包,用户可以直接使用预设的配色方案,提升图表的视觉效果。文中还展示了使用这些调色板绘制的一些示例图表。
22 0
|
1月前
|
Python
python烟花绘制,春节祝福
python烟花绘制,春节祝福
23 0
|
9月前
|
开发者
用D3制作一个旋转的大风车SVG庆祝国际儿童节
写于2023年的六一国际儿童节,用D3做一个大风车庆祝一下这个快乐的节日,借此机会介绍一下SVG滤镜的使用,代码也是非常简短的
73 0
用D3制作一个旋转的大风车SVG庆祝国际儿童节
|
5月前
|
前端开发 JavaScript
七夕表白,不给女朋友来场炫酷的烟花?
七夕表白,不给女朋友来场炫酷的烟花?
49 0
|
8月前
|
数据可视化 Python
Python高考 | matplotlib绘制1977-2022年历届高考人数及录取率分布图
Python高考 | matplotlib绘制1977-2022年历届高考人数及录取率分布图
|
9月前
|
机器学习/深度学习 JavaScript 前端开发
pyecharts绘制复联超级英雄战斗力
前几天在网上看到有人用 matplotlib 绘制了漫威里几大英雄的战斗力图,赶脚灰常有意思。作为漫威和 python 的双重粉丝,我这次又 hold 不住了,于是也做了一个 pyecharts 版的实力对比图,在这里分享给大家。
|
11月前
基于PaddleNLP ppdiffusers 自动生成【兔了个兔】海报
基于PaddleNLP ppdiffusers 自动生成【兔了个兔】海报
82 0
|
11月前
|
小程序 开发工具
樱花飘落模拟器-情人节祝你表白成功
看着樱花缓缓的飘落,然后不觉间竟下起了绵绵的细雨。因为今天我所在的城市正下着小雨,所以就在这个小应用中增加了阵阵的细雨功能。 下面我们就学习一下如何实现一个这样温暖的小程序。 首先准备一下素材。一个粉色的背景,两个樱花花瓣,一个模拟雨滴的长方形,以及两句要显示的话。
87 0
|
11月前
|
数据可视化 数据挖掘 Python
跟着春晚学配色:R语言ggplot2作图好看的春晚配色
跟着春晚学配色:R语言ggplot2作图好看的春晚配色
|
数据挖掘 Python
Python数据分析系列04-豆瓣影评、歌词词云分析
哈佛大学的校训之一:你所浪费的今天,是逝去的人所奢望的明天;你所厌恶的现在,是未来的你回不去的曾经。
Python数据分析系列04-豆瓣影评、歌词词云分析