Python词云制作

“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”。从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

“词云”就是数据可视化的一种形式。给出一段文本的关键词,根据关键词的出现频率而生成的一幅图像,人们只要扫一眼就能够明白文章主旨。

词云

词云是对文本内容进行可视化呈现的一种方式,它会对文本中出现频率较高的词进行视觉上的突出, 词语出现的频率越高,字体就会越大,颜色也会越醒目。通过查看词云图,我们能快速获取文本中的主要内容。

创建词云图需要导入wordcloud库, 然后通过词云3步曲来制作词云。

py

import wordcloud

text = 'Word Cloud, or Tag Cloud is a visual representation of text data. Word Cloud could display a list of words. The size and color of each word in a Word Cloud indicates its frequency or importance in the text.'

w = wordcloud.WordCloud()        //第一步:创建词云对象
w.generate(text)                 //第二步:加载词云文本
w.to_file('词云.png')             //第三步:保存词云图片

第一步:创建词云对象

w = wordcloud.WordCloud()

代码作用:创建词云对象并赋值给变量w 小括号中填写参数,用来设置词云对象的属性 书写时注意区分大小写。

py

w = wordcloud.WordCloud(       //词云库,全小写;创建词云对象的命令 W和C大写
    width=1000,                //宽
    height=600,                //高
    background_color='white',  //背影颜色
    colormap='Blues',          //字体色系
    stopwords=s,               //停用词,s是存放着停用词的集合
    font_path=mac              //中文字体,需要根据自己的电脑系统选择不同系统使用的默认中文字体: mac = 'PingFang.ttc', win = 'simhei.ttf'
)

第二步:加载词云文本

w.generate()

w 是第1步中赋值的变量, 小括号中需要填写字符串
制作中文词云时,需要对文本进行jieba分词

py

import wordcloud
import jieba

f = open('少年中国说.txt', 'r', encoding='utf-8')
text = f.read()
f.close

lst = jieba.lcut(text)              //使用jieba库的lcut()方法对中文文本text进行分词
s = ''.join(lst)                    //使用join()命令,把分词结果用空格拼接成字符串

mac = 'PingFang.ttc'
win = 'simhei.ttf'
w = wordcloud(font_path=mac)
w.generate(s)                      //把分词后的文本字符串作为generate()的参数

join()命令
作用:
将列表元素用指定字符拼接成字符串

使用方法:

‘拼接字符’.join(列表)

第三步:保存词云图片

w.to_file()

w是第1步中赋值的变量, 小括号中填写完整的图片名称
完整代码如下:

py

//导入需要的第三方库
from PIL import Image
import wordcloud
import jieba

//如果文本内容存放在文件中,需要先读取出来
f = open('少年中国说.txt', 'r', encoding='utf-8')
text = f.read()
f.close

//对中文文本进行jieba分词 并把分词结果拼接成字符串
lst = jieba.lcut(text)             
s = ''.join(lst)                  

//不同系统自带的中文字体
mac = 'PingFang.ttc'
win = 'simhei.ttf'
m = {'强则', '智则', '富则', '而全'}        //停用词集合

//词云3步曲
w = wordcloud(
    width=1000,
    height=600,
    background_color='white',  
    colormap='Blues',          
    stopwords=s,
    font_path=mac)
w.generate(m)
w.to_file('词云.png')   

//打开并显示图片
p = Image.open('词云.png')   
p.show()         

创意词云图

重复显示词语

当文本中包含的词语太少时,可以设置wordcloud()中的repeat参数让词语重复显示,使词云图更饱满。

py

text = '生日快乐 HappyBirthday'

w = wordcloud.WordCloud(
    ...
    repeat=True
    ...
)
w.generate(text)
w.to_file('海报.png')

参数repeat: 设置词语是否可以重复

repeat=False //词语不重复 (默认)
repeat=True //词语重复 (每个词重复次数相同)

Python词云制作

限制词语数量

wordcloud()中的max_words参数可以设置词云图中词语的最大数量,默认值是200。
调节max_words,可以调整词云图中词语的密集程度。数值越大,词语越密集;数值越小,词语越稀疏。

设置词云形状

准备好设置词云形状的图片,通过设置WordCloud()中的mask参数,可以生成特定形状的词云图。
Python词云制作
WordCloud()会按照给定图片的大小创建词云对象,并识别出图片中的彩色区域,让词云只在彩色区域显示文字,而不在白色区域显示文字。

py

//获得图片的颜色数据
image = Image.open('heart.jpg')
img = numpy.array(image)

w = wordclound.WordCloud(
    ...
    mask=img,                         //设置mask参数
    ...
)

设置mask参数后,词云图片的宽和高 会与给定图片相同,就不需要再设置width和height这两个参数了。

匹配图片颜色

设置WordCloud()中的color_func参数,可以让词云图中字体 的颜色更接近给定图片的颜色。
Python词云制作
1. 生成字体颜色。使用wordcloud库中的颜色生成器ImageColorGenerator()生成字体需要的颜色,括号中 填写存储图片信息的变量。
2. 结果赋值给color_func参数。

py

image = Image.open('heart.jpg')
img = numpy.array(image)
image_color = wordcloud.ImageColorGenerator(img)

WC = wordcloud.WordCloud(
    ...
    mask=img,
    color_func=image_color,
    ...
)

添加词云轮廓

WordCloud()中的contour_width,contour_color参数,可以分别设置词云图中轮廓线的宽度、颜色。
设置词云轮廓

contour_width //设置轮廓线宽度(大于0的浮点)
contour_color //设置轮廓线颜色(默认黑色)

例:设置灰色、宽度为2的轮廓线

py

WC = wordcloud.WordCloud(
    ...
    mask=img,
    color_func=image_color,
    contour_width=2,
    contour_color='grey',
    ...
)
小王发布于2022-08-09 19:22
没有伞的孩子,必须学会努力奔跑。

赞助 点赞 0

牧羊人, UI柒, 拾风等人对本文发表了5条热情洋溢的评论。
  • 牧羊人说道: LV.2
    教导他从小坚持不懈开发一个框架的东西,说不定十年后他大学或者工作以后,这个框架就成了。。
    1. 老王说道:
      回复 牧羊人: 他现在还没有这个意识,满脑子玩的框架倒是有了。。。 ::wb:wl::
  • UI柒说道: LV.0
    Python很好玩
  • 拾风说道: LV.2
    太专业了~默默路过,哈哈
    1. 老王说道:
      回复 拾风: 其实感觉他现在学的还不是很复杂😀
  • 发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注