文本挖掘之词云及个性化词云


文本挖掘之词云及个性化词云

一:词云-WordCloud

词云:对文本中出现的关键词按照出现频率通过改变字体字号颜色样式等方式集中显示

个人看法,wordcloud是一款将词语(支持英文、中文等各种语言词汇)作为基本元素,对图像文件进行十分高效填充的文字展示工具。同时,还可使用masks(掩膜)功能,也可结合分词工具等等,更加直观、唯美、创造性和个性化地展示文本文字

频率较高的“关键词”予以视觉上的突出,从而给关键字设定直观的级别,过滤掉大量的低效文本信息,使浏览者只要一眼扫过词云就可以领略文本的主旨

安装 WordCloud库

  • 命令安装:pip install wordcloud
  • 下载安装 官网下载wordcloud安装程序,注意需与你使用的Python版本一致。https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud

二:jieba

jieba,结巴中文分词,一款优秀的Python第三方中文分词库,是自然语言分析(NLP)工具之一。它依据「词典」确定汉字间的关联概率,概率大的组成词,形成分词结果。

jieba出品地址:https://github.com/fxsjy/jieba

jieba短小精悍,分词能力却不可小觑。它有三种分词模式,支持自定义词典,支持繁体分词。

三种分词模式为:

  • (一)精确模式
  • 试图将句子最精确地切开,适合文本分析。
  • (二)全模式
  • 将句子中所有可成词的词语都扫描出来,速度非常快,但不能解决歧义。
  • (三)搜索引擎模式
  • 在精确模式基础上,对长词再次切分,提高召回率,适用搜索引擎分词。

jieba的安装

Python 2/3均兼容。通过 import jieba 来引用。

  • (一)全自动安装
  • easy_install jieba 或 pip install jieba 或 pip3 install jieba
  • (二)半自动安装
  • http://pypi.python.org/pypi/jieba/
  • 下载解压后运行 python setup.py install
  • (三)手动安装
  • 将 jieba 目录放置于当前目录或者 site-packages 目录。
  • (四)PyCharm 中安装
  • 【File】-【Settings】-【Project Interpreter】-【+】-搜索jieba-【Install Package】

案例:为《大话西游》台词节选绘制词云

import numpy as np
import matplotlib.pyplot as plt

import jieba
from wordcloud import WordCloud
from PIL import Image

# 载入文本数据
with open('F:/data/大话西游.txt', 'r', encoding='gbk') as f:
#     print(f.read())
    txt = f.read()


txt2 = ' '.join(jieba.cut(txt))
# 绘制词云
# 停用词

# 方式2:读入停用词文件为列表
with open('F:/data/stopword.txt', 'r', encoding='gbk') as f:
#     print(f.read())
    s = f.read()
stopword = s.split('\n')

stopword
# 词云绘制时去停用词

# 基本版词云
wordcloud = WordCloud(  font_path="F:/data/FZSTK.TTF", ).generate(txt2)
wordcloud

plt.imshow(wordcloud)

w1

wordcloud = WordCloud(
    font_path="F:/data/arial unicode ms.ttf",  # 字体,不设置则汉字乱码
    background_color='white',# 设置背景颜色
    max_words=80, # 设置最大现显示词数
    max_font_size=80, # font_size可选
    stopwords = stopword,  # 去停用词
).generate(txt2)
wordcloud

plt.figure(figsize=(18, 10), dpi=72)
plt.imshow(wordcloud, interpolation='bilinear') # 绘制数据内的图片,双线性插值绘图
plt.axis("off") # 去掉坐标轴

plt.savefig('F:/data/test.png', dpi=300, bbox_inches='tight')  # 保存为:带有最小白边且分辨率为300DPI的PNG图片

w2

个性化词云图

#读取背景图
alice_mask = np.array(Image.open("F:/data/heart.jpg"))

wordcloud = WordCloud(
    background_color='white',# 设置背景颜色
    max_words=100, # 设置最大现显示词数
    font_path="F:/data/arial unicode ms.ttf",  # 字体,不设置则汉字乱码
    stopwords = stopword,  # 去停用词
    mask=alice_mask,  # 设置背景图片
).generate(txt2)
wordcloud

plt.figure(figsize=(18, 10), dpi=72)
plt.imshow(wordcloud, interpolation='bilinear') # 绘制数据内的图片,双线性插值绘图
plt.axis("off") # 去掉坐标轴

plt.savefig('F:/data/test2.png', dpi=300, bbox_inches='tight')

w3

高阶:词云模板图像上色

完成上一步的操作可称为大神了。下面我们一起提高一下用户体验,优化图片上色。

ImageColorGenerator(image, default_color=None)是基于彩色图像的颜色生成器。根据RGB图像生成颜色。单词将使用彩色图像中包围的矩形的平均颜色进行着色。构造后,该对象充当可调用对象,可以作为color_func传递给词云构造函数或recolor方法。 此外,还需定义WordCloud类中的color_func参数对词云进行重新着色。

import wordcloud
import jieba

# 使用ImageColorGenerator类根据获取的模板图像生成颜色,并赋值变量
color_new = wordcloud.ImageColorGenerator(alice_mask)

wordcloud = WordCloud(
    background_color='white',# 设置背景颜色
    max_words=100, # 设置最大现显示词数
    font_path="F:/data/arial unicode ms.ttf",  # 字体,不设置则汉字乱码
    contour_width=25,  # 词云形状边宽宽度
    contour_color='red',  # 词云形状边宽颜色
    color_func=color_new,  # 将上面模板图像生成的颜色传入词云
    stopwords = stopword,  # 去停用词
    mask=alice_mask,  # 设置背景图片
).generate(txt2)
wordcloud

plt.figure(figsize=(18, 10), dpi=72)
plt.imshow(wordcloud, interpolation='bilinear') # 绘制数据内的图片,双线性插值绘图
plt.axis("off") # 去掉坐标轴

plt.savefig('F:/data/test3.png', dpi=300, bbox_inches='tight')

w4

七:数据建模

import jieba
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from wordcloud import WordCloud as WC
import wordcloud as wd

# 载入文本数据
with open('F:/data/大话西游.txt', 'r', encoding='gbk') as f:
    txt = f.read()

# 分词
txt2 = ' '.join(jieba.cut(txt))
    
# 方式2:读入停用词文件为列表
with open('F:/data/stopword.txt', 'r', encoding='gbk') as f:
    s = f.read()
stopword = s.split('\n')

wordcloud = WordCloud(font_path="F:/data/FZSTK.TTF").generate(txt2)

#读取背景图
alice_mask = np.array(Image.open("F:/data/heart.jpg"))


# 使用ImageColorGenerator类根据获取的模板图像生成颜色,并赋值变量
color_new = wd.ImageColorGenerator(alice_mask)

wordcloud = WC(
    background_color='white',# 设置背景颜色
    max_words=100, # 设置最大现显示词数
    font_path="F:/data/arial unicode ms.ttf",  # 字体,不设置则汉字乱码
    contour_width=25,  # 词云形状边宽宽度
    contour_color='red',  # 词云形状边宽颜色
    color_func=color_new,  # 将上面模板图像生成的颜色传入词云
    stopwords = stopword,  # 去停用词
    mask=alice_mask,  # 设置背景图片
).generate(txt2)
wordcloud

plt.figure(figsize=(18, 10), dpi=72)
plt.imshow(wordcloud, interpolation='bilinear') # 绘制数据内的图片,双线性插值绘图
plt.axis("off") # 去掉坐标轴

plt.savefig('F:/data/test22.png', dpi=300, bbox_inches='tight')

欢迎关注:一只阿木木