文章目录


一、词云图介绍

近年来,互联网、新媒体等行业报告中都会看到精美的词云图。它的原理主要是对文章内容进行分词,统计各个词出现的次数,然后根据出现的次数,设置显示样式,例如大小、颜色等,从而使读者快速领略文本的主旨

Python中提供的 wordcloud库 可以快速生成词云图。但​主要是针对英文​,​通过空格进行分词​比较流行的中文分词库为 ​​jieba​​可将其与 wordcloud库联合使用从而对中文文章生成相应的词云图


二、环境配置

# -*- coding: utf-8
# @Time : 2021/1/14 10:01
# @Author : ZYX
# @File : Test1.py
# @software: PyCharm
import jieba # 中文解析
import numpy as np # Numpy
from PIL import Image # Image 加载读取图片
import matplotlib.pyplot as plt # Matplotlib 绘图

如果通过Pycharm导入不了就通过pip~

【Python】WordCloud 词云图_python


返回顶部


三、WordCloud()解析及用法

【Python】WordCloud 词云图_返回顶部_02

♦ 参数

♑ ​font path:字体路径,默认不支持中文,可通过该参数指定字体,支持OTF和TF格式;
♑ ​​width、 height:画布的宽度和高度,单位为像素;
♑ ​​margin:文字之间的边距;
♑ ​​mask:指定图片的形状,忽略白色部分,通常为 ndarray
♑ ​​max words:最多显示的词的数量,默认为200;
♑ ​​min font size、 max font size:最小字体大小、最大字体大小;
♑ ​​font_step:字体大小增加步长,默认为1
♑ ​​background_ color:词云图的背景颜色,默认为黑色

♦ 方法

♑ ​generate(text):根据文本生成词云图,返回当前对象本身;
♑ ​​to image0:将词云对象转化为图片;
♑ ​​to_file(文件名):将词云对象转化为文件;
♑ ​​to array():将词云对象转化为数组。

♦ 基本步骤

♑ ​创建wordcloud对象​设定基本信息​
♑ ​​调用generate()方法​生成词云​
♑ ​​保存或显示词云

返回顶部


四、基础案例展示

• 英文

  • Python中提供的 wordcloud库 可以快速生成词云图。但​主要是针对英文​,通过​空格​进行分词。所以要对随机生成的文本内容按照空格进行​join()拼接​
# -*- coding: utf-8
# @Time : 2021/1/14 10:01
# @Author : ZYX
# @File : Test1.py
# @software: PyCharm
import random
import wordcloud as wc

# 1.创建对象
word_cloud = wc.WordCloud()
# 2.自定义文本
# 随机生成选项里的文本100个
res = random.choices(["Python","Java","PHP","Spark","Hadoop","C#","C++"],k=100)
# 以空格拼接
text = " ".join(res)
# 3.生成词云
word_cloud.generate(text)
# 4.保存
word_cloud.to_file(r"G:\Projects\pycharmeProject\Python_Sklearn\词云图\result\cloud2.png")

通过生成的随机文本和wordcloud绘制出的词云图如下所示:

【Python】WordCloud 词云图_返回顶部_03

返回顶部


• 中文

  • 默认的wordcloud是对英文字符进行处理,若要显示中文,需要设定参数font_path,指定字体样式。
# -*- coding: utf-8
# @Time : 2021/1/14 18:18
# @Author : ZYX
# @File : Test2.py
# @software: PyCharm
import wordcloud as wc
import random

# 1.创建对象 --- 指定中文样式
word_cloud = wc.WordCloud(font_path="词云图/resource/msyh.ttc")
m = random.choices(["江苏","山东","浙江","北京","上海","四川","湖北"],k=100)
# 2.自定义文本
text = " ".join(m)
# 3.生成词云图
word_cloud.generate(text)
# 4.保存
word_cloud.to_file(r"G:\Projects\pycharmeProject\Python_Sklearn\词云图\result\cloud_CN.png")

【Python】WordCloud 词云图_python_04

返回顶部


五、jieba库

  • jieba库分词的三种模式:
  • (1) ​精准模式​:把文本精准地分开,不存在冗余;
  • (2) ​全模式​:把文中所有可能的词语都扫描出来,存在冗余;
  • (3) ​搜索引擎模式​:在精准模式的基础上,再次对长词进行切分;
  • 主要函数:
  • jieba.cut(sentence,cut_all=False,hmM=true):sentence表示需要分词的句子, cut_all表示是否采用全模式,HMM表示是否使用HMM(隐马尔可夫模型)模型;
  • jieba. cut_for_search(sentence,HMM=true):sentence表示需要分词的句子,HMM表示是否使用HMM模型,该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细;
  • jieba.cut()方法和 ​jieba.cut_for_search()​方法返回的结果都是可迭代对象,可使用for循环获取分词后得到的每一个词语,此外, jieba.lcut()和 jieba. lcut_for_search()效果分别和 jieba.cut()和 jieba.cut_for_search()效果类似,直接返回列表;
  • add_word(word, freq=None,tag=None)​del_word(word)​可在程序中动态修改词典;

简单应用一:读取文档生成词云图

【Python】WordCloud 词云图_词云_05

简单应用二:生成带有形状的词云图

  • mask:指定图片的形状,忽略白色部分,通常为 ndarray
  • 通过读取图片获取图片形状的ndarry
# -*- coding: utf-8
# @Time : 2021/1/14 19:06
# @Author : ZYX
# @File : Test4.py
# @software: PyCharm
import jieba
import numpy as np
import wordcloud as wc
from PIL import Image
import matplotlib.pyplot as plt

# 1.读取文本数据、分词
with open("./resource/洒满星星的河流.txt",'r',encoding="utf-8") as fp:
context = fp.read()
res = jieba.lcut(context)
text = " ".join(res)
# 2.读取图片信息
mask = np.array(Image.open("./resource/pikaqiu.png"))
# 3.创建词云图对象
word_cloud = wc.WordCloud(font_path="./resource/msyh.ttc",mask=mask) # 这里可以设置背景颜色
# 4.生成词云图
word_cloud.generate(text)
plt.imshow(word_cloud)
plt.show()

【Python】WordCloud 词云图_返回顶部_06

返回顶部