NLP | wordcloud 词云绘制

wordcloud 词云绘制

  • 准备
    • 1.1 相应python库的安装
    • 1.2 文件准备
  • 知识储备
    • 1.1 jieba
    • 1.2 wordcloud
  • 使用wordcloud绘制
    • 1.1 词频分析
      • 1.1.1 python库导入
      • 1.1.2 文件内容读取
      • 1.1.3 文本处理
        • 1.1.3.1 英文文本
        • 1.1.3.2 中文文本
    • 1.2 词云绘制
      • 1.2.1 无背景词云
        • 词云图
      • 1.2.2 无背景频率词云
        • 词云图
      • 1.2.3 背景词云
          • 背景图
        • 1.2.3.1 英文文本
          • 词云图
          • 词云图
        • 1.2.3.2 中文文本
          • 词云图
  • 源码
  • 参考文章


准备

1.1 相应python库的安装

作用
re 正则表达式库
collections 词频统计库
numpy numpy数据处理库
jieba 分词
wordcloud 词云展示库
PIL 图像处理库
matplotlib 图像展示库

1.2 文件准备

  1. 准备用以文本分析的文件;
    1.1 命名为practice.txt, 保存在目标路径下, e.g. /Desktop/practice.txt
    1.2 如文本中有中文单词,下载中文字体文件并保存在目标路径下, e.g. /Desktop/chinese.stzhongs
  2. 准备用作词云展示的图片,命名为image.jpg, 保存自目标路径下, e.g. /Desktop/image.jpg
  3. 使用相应的库进行词云绘制:
    3.1 wordcloud:
    3.1.1 使用 jieba将数据进行清洗,清洗前为txt文件,清洗后变为以空格分隔的词语字符串string
    3.1.2 将字符串string传给wordcloud进行绘图即可

知识储备

1.1 jieba

方法 作用
jieba.cut(text) 将text切分为若干组词语, 返回生成器
jieba.lcut(text) 返回列表

1.2 wordcloud

  1. 词云每次随机生成,再次运行则生成新词云。
  2. wordcloud.to_file(‘myfig.png’)的方法生成词云比plt.savefig更清楚,后者不能反映词云设置的大小等参数。
参数 作用
width 指定词云对象生成图片的宽度,,默认400像素
height 指定词云对象生成图片的高度,默认200像素
mask 指定词云形状,默认为长方形,需要引用imread()函数
min_font_size 指定词云中字体的最小字号,默认4号
max_font_size 指定词云中字体的最大字号,根据高度自动调节
font_step 指定词云中字体字号的步进间隔,默认为1
font_path 指定字体文件的路径,默认None
max_words 指定词云显示的最大单词数量,默认200
stop_words 指定词云的排除词列表,即不显示的单词列表
background_color 指定词云图片的背景颜色,默认为黑色

使用wordcloud绘制

1.1 词频分析

1.1.1 python库导入

// python库导入
import os
import re                                                        # 正则表达式
import collections                                               # 词频统计库
import numpy as np                                               # numpy数据处理库
import jieba                                                     # 分词
from PIL import Image                                            # 图像处理库
import matplotlib.pyplot as plt                                  # 图像展示库
from wordcloud import WordCloud, ImageColorGenerator             # 词云展示库
from imageio import imread                                       # 图像处理库,读取照片RGB内容,转换照片格式

1.1.2 文件内容读取

// 文件内容读取
# 读取英文文件
f = open('C://Users//Administrator//Desktop//practice.txt','rt') # 打开目标路径下的目标文件
fd = f.read()                                                    # 读取文件内容
# 等同于 f = open('C://Users//Administrator//Desktop//practice.txt', 'rt').read()
f.close()
# 等同于 f = open('C://Users//Administrator//Desktop//practice_2.txt',encoding='gbk').read()
# 等同于 f = open('C://Users//Administrator//Desktop//practice_2.csv',encoding='utf-8').read()
# 等同于 fd = open('C://Users//Administrator//Desktop//practice.txt', 'rt').read()

1.1.3 文本处理

1.1.3.1 英文文本

// 使用jieba对英文文本进行处理
# 文本预处理
pattern = re.compile(u'\t|\'|\n|\.|-|_|#|:|:|;|\||/||(|)|\?|"') # 正则表达式匹配模式
fd = re.sub(pattern, '', fd)                                     # 将符合模式的字符去除

# 文本分词
seg = jieba.cut(fd, cut_all=False)								 # 以空格将fd切分开,得到一个以空格分隔的词语字符串,供后面调用;
# print(type(seg))
# print(seg)

# 去除词库
# rwlist = [line.strip() for line in open('C://Users//Administrator//Desktop//rw.txt').readlines()]
# rwlist = [rw.strip() for rw in open('C://Users//Administrator//Desktop//rw.txt').read()]
rwlist = [u'-', ' ', 'u', '@', ',', u'( ', u')']

# 文本清洗
words = []
for word in seg:
    if word not in rwlist and len(word) >= 1:
        words.append(word.replace(' ', ''))                      # 如果词语不在去除词库中且长度大于1,添加进words列表’
        # words.append(word)
cloud_text = ",".join(words)								     # 将分好的词用某个符号分割开连成字符串
# cloud_text = words

# 词频统计
count = collections.Counter(cloud_text)                          # 对列表中的词语做词频统计
count_top5 = count.most_common(5)                                # 获取词频统计中出现频率最高10print(type(count_top5))
for i in count_top5:
    print('character: ', i[0], ';', 'count: ', i[1])
// 使用wordcloud对英文文本进行处理
# generate_from_frequencies(dict)方法生成频率词云, 会囊括所有单词及其频率
wc = WordCloud(background_color='white')
cloud_word=WordCloud.process_text(wc,fd)                       # 用process_word()方法统计文本中所有单词出现的频率,返回dict(单词,频率)
print(type(cloud_word))                                        # type(cloud_word) = dict
# print(cloud_word)
for key, value in cloud_word.items():
    print('character: ', key, ';', 'count: ', value)

1.1.3.2 中文文本

// An highlighted block
# 文本预处理
pattern = re.compile(u'\t|\'|\n|\.|-|_|#|:|:|;|\||/||(|)|\?|"') # 正则表达式匹配模式
fd = re.sub(pattern, '', fd)                                     # 将符合模式的字符去除

# 文本分词
seg = jieba.cut(fd, cut_all=False)
# print(type(seg))
# print(seg)

# 去除词库
# rwlist = [line.strip() for line in open('C://Users//Administrator//Desktop//rw.txt').readlines()]
# rwlist = [rw.strip() for rw in open('C://Users//Administrator//Desktop//rw.txt').read()]
rwlist = [u'-', ' ', 'u', '@', ',', u'( ', u')']

# 文本清洗
words = []
for word in seg:
    if word not in rwlist and len(word) >= 1:
        words.append(word.replace(' ', ''))                      # 如果词语不在去除词库中且长度大于1,添加进words列表’
        # words.append(word)
cloud_text = ",".join(words)
# cloud_text = words

# 词频统计
count = collections.Counter(cloud_text)                          # 对列表中的词语做词频统计
count_top5 = count.most_common(5)                                # 获取词频统计中出现频率最高10print(type(count_top5))
for i in count_top5:
    print('character: ', i[0], ';', 'count: ', i[1])

1.2 词云绘制

1.2.1 无背景词云

// 词云绘制
wc = WordCloud(
    background_color='white',                          	 		# 背景颜色默认是black,此处设置为white
    width=900,
    height=600,
    max_words=100,                                      		# 词云显示的最大词语数量
    max_font_size=99,                                   		# 设置字体最大值
    min_font_size=16,                                   		# 设置子图最小值
    random_state=50                                     		# 设置随机生成状态,即多少种配色方案
).generate(fd)								

plt.imshow(wc, interpolation='bilinear')                		# 显示生成的词云图片
plt.axis('off')                                         		# 显示设置词云图中无坐标轴
plt.savefig("C://Users//Administrator//Desktop//wordcloud.jpg")
plt.show()

词云图

NLP | wordcloud 词云绘制_第1张图片

1.2.2 无背景频率词云

// 词云绘制
wc = WordCloud(
    background_color='white',                          	 		# 背景颜色默认是black,此处设置为white
    width=900,
    height=600,
    max_words=100,                                      		# 词云显示的最大词语数量
    max_font_size=99,                                   		# 设置字体最大值
    min_font_size=16,                                   		# 设置子图最小值
    random_state=50                                     		# 设置随机生成状态,即多少种配色方案
).generate_from_frequencies(count)								# 频率越大的单词词云中字体越大。

plt.imshow(wc, interpolation='bilinear')                		# 显示生成的词云图片
plt.axis('off')                                         		# 显示设置词云图中无坐标轴
plt.savefig("C://Users//Administrator//Desktop//wordcloud.jpg")
plt.show(

词云图

NLP | wordcloud 词云绘制_第2张图片

1.2.3 背景词云

背景图

NLP | wordcloud 词云绘制_第3张图片

1.2.3.1 英文文本

// 词云绘制
jpg = imread('C://Users//Administrator//Desktop//image.jpg')     # 读取背景图片

wc = WordCloud(                                                  # 生成词云
    mask = jpg,
    background_color="white",
    width = 1500,
    height = 960,
    margin = 10
).generate(cloud_text)

plt.imshow(wc)                                                   # 绘制图片
plt.axis("off")                                                  # 去除坐标轴
plt.savefig("C://Users//Administrator//Desktop//wordcloud.jpg")
plt.show()
词云图

NLP | wordcloud 词云绘制_第4张图片

// 词云绘制
jpg = Image.open('C://Users//Administrator//Desktop//image.jpg') # 读取背景图片

mask = np.array(jpg)                                             # 图片转化为数组
#等同于 mask = np.array(Image.open('C:/Users/Violette/Desktop/data/heart.png'))

wc=WordCloud(
    background_color="white",
    width=600,
    max_words=100,
    mask=mask).generate(cloud_text)
    
image_colors = ImageColorGenerator(mask)                         # 提取mask颜色
# wordcloud.recolor(color_func=image_colors)                     # 重置颜色函数

image = wc.to_image()

fig,axes = plt.subplots(1,2)
axes[0].imshow(wc)                                               # 不设置颜色
axes[1].imshow(wc.recolor(color_func=image_colors))              # 将词云颜色设置为mask的颜色
for ax in axes:
    ax.set_axis_off()                                            # 去除坐标轴
plt.savefig('C://Users//Administrator//Desktop//wordcloud.jpg')
plt.show()
词云图

NLP | wordcloud 词云绘制_第5张图片

1.2.3.2 中文文本

# 词云绘制
jpg = imread('C://Users//Administrator//Desktop//image.jpg')     # 读取背景图片

wc = WordCloud(                                                  # 生成词云
    mask = jpg,
    font_path = 'C://Users//Administrator//Desktop//chinesestzhongs.ttf',
    background_color="white",
    width = 1500,
    height = 960,
    margin = 10
).generate(cloud_text)

plt.imshow(wc)                                                   # 绘制图片
plt.axis("off")                                                  # 去除坐标轴
plt.savefig("C://Users//Administrator//Desktop//wordcloud.jpg")
plt.show()
词云图

NLP | wordcloud 词云绘制_第6张图片


源码

wordcloud


参考文章

  1. jieba:
    成功避开python安装jieba库的各种坑.
    五款中文分词工具在线PK: Jieba, SnowNLP, PkuSeg, THULAC, HanLP.
    通俗易懂理解——jieba中的HMM中文分词原理.
  2. wordcloud:
    Python安装第三方库的常见方法(以word cloud 为例).
    Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐).
  3. imageio:
    python 编程中的一个关于图片的库 imageio (读取照片RGB内容,转换照片格式).
  4. 词云绘制:
    PYTHON自定义背景画词云.
    Python词云wordcloud——根据词语生成图像.
    PYTHON自定义背景画词云.
    pycharm中报错:Error: failed to send plot to http://127.0.0.1:63342.
    如何使用python绘制词云图wordcloud(超详细).
    Python数据可视化 词云图 绘制词云的方法总结.

你可能感兴趣的:(NLP,python,nlp)