中文文本特征可视化

作者: zqh_zy | 来源:发表于2017-11-04 16:08 被阅读809次

拿到一个文本数据集,需要查看数据集文本的基本信息,包括词频、文本长度、类别分布等。这里以文本分类的数据集为例,对数据集基本特征进行可视化显示, 作为一般性demo。使用的库包括:pandas,matplotlib,wordcloud等,展示的信息包括:

  • 词频分布
  • 一级分类数量分布
  • 二级分类数量分布
  • 一级分类文本长度分布
  • 文本长度分布
  • 词云

Demo源码路径https://github.com/zqhZY/semanaly/tree/master/mobile_classify

在信息展示前对原始数据做了预处理,将语料库转化成CSV格式文件,方便处理,数据包含列:

id,text,first_class,second_class
1052353,您好 很高兴 为您 服务 哎 你好 我想 咨询 一下 就是我 之前 有 开 一个 这个 宽带 的 然后 已经 到期 了然 后 我想 换 个 低一点的 资费 的 是 要 新装 吗 还是 怎么样 嗯嗯 呃 到期 之后...,办理,变更

导入依赖

为解决代码里显示中文,和matplotlib显示中文的问题,需要指定代码为utf-8编码, 最后配置matplotlib为微软雅黑字体(需要自行安装)。

# -*- coding:utf-8 -*-
import sys
import nltk
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
from wordcloud import WordCloud

reload(sys)
sys.setdefaultencoding("utf-8")
pal = sns.color_palette()
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # enable chinese

词频可视化

首先导入数据集,由于预处理过程中已经对文本进行了分词操作,这里直接使用nltk库对数据集进行词频统计。需要注意讲数据集字符串进行utf-8转换

dataset = pd.read_csv("./data/mobile_dataset.csv")

tokenstr = nltk.word_tokenize(" ".join(dataset.text.values).decode("utf-8"))
fdist1 = nltk.FreqDist(tokenstr)
listkey = []
listval = []
print u".........统计出现最多的前40个词..............."
for key, val in sorted(fdist1.iteritems(), key=lambda x: (x[1], x[0]), reverse=True)[:40]:
    listkey.append(key)
    listval.append(val)
    # print key, val, u' ',

df = pd.DataFrame(listval, columns=[u'次数'])
df.index = listkey
df.plot(kind='bar')
plt.title(u'词频统计')
plt.show()
词频统计.png

类别数目分布

这里数据集具有一级分类和二级分类两个层次的分类项目,分别对每个类别进行数目统计,之后进行直方图显示:

#  plot class distribution
dataset.first_class.value_counts().plot(kind="bar")
plt.show()
dataset.second_class.value_counts().plot(kind="bar")
plt.show()
一级分类分布.png 二级分类分布.png

一级分类文本长度分布

这里作用为显示各个一级分类项目下的文本长度的分布情况,大于1000的文本长度直接设置为1000处理,目的在于使分布图更匀称。

#  Number of words in the text ##
dataset["num_words"] = dataset["text"].apply(lambda x: len(str(x).split()))
dataset['num_words'].loc[dataset['num_words'] > 1000] = 1000  # truncation for better visuals
plt.figure(figsize=(12,8))
sns.violinplot(x='first_class', y='num_words', data=dataset)
plt.xlabel('First Class', fontsize=12)
plt.ylabel('Number of words in text', fontsize=12)
plt.title("Number of words in First Class", fontsize=15)
plt.show()
一级分类文本长度.png

全局文本长度分布

为方便后面文本处理,文本整体的长度信息也很重要,这里使用直方图的方式展示文本长度分布,横轴为文本长度,纵轴为概率分布情况,也可以设置normed=True设置纵轴为数目。

# global len distribution.
plt.figure(figsize=(12, 8))
plt.hist(dataset["num_words"], bins=200, range=[10, 1000], color=pal[1], normed=True, label='train')
plt.title('Normalised histogram of words count in text', fontsize=15)
plt.legend()
plt.xlabel('Number of words', fontsize=15)
plt.ylabel('Probability', fontsize=15)
plt.show()
长度分布.png

词云

词云部分遇到问题主要是汉子的显示,主要注意两点:

  • 指定汉子字体
  • 对字符串进行utf-8编码

如果觉得方方正正太古板,可以指定mask参数进行多样化显示。

# word cloud
# mask_img = imread("./data/images.jpg")
cloud = WordCloud(width=1440, height=1080, font_path="data/msyh.ttf").generate(" ".join(dataset.text.values).decode("utf-8"))
plt.figure(figsize=(20, 15))
plt.imshow(cloud)
plt.axis('off')
plt.show()
词云.png

小结

中文文本的可视化经常会遇到汉子乱码的问题,一般都是由于字体不支持中文和字符串编码的原因。另外每次拿到新的数据想看看数据的基本信息总要重新去查具体库的用法,所以花时间整理了一下作为demo,后面继续添加更多的信息展示。

原创文章,转载注明出处。

更多关注公众号:


wechat

相关文章

  • 中文文本特征可视化

    拿到一个文本数据集,需要查看数据集文本的基本信息,包括词频、文本长度、类别分布等。这里以文本分类的数据集为例,对数...

  • (6)生成式深度学习

    1、字符级别文本生成 2、DeepDreamDeepDream可视化神经网络学到的特征,首先图像正向传播,计算每一...

  • 基于 CNN 的中文对话情感分析

    这是 Data Mining 这门课的期末项目,主要记录一下中文文本的处理方式与 CNN 作用于文本特征的原理,网...

  • 文本特征提取(2)

    继上期文本特征提取一文以及文本的可读性探究后,继续推出文本特征提取二,从词集型、词袋型提取文本特征。 文本特征提取...

  • sklearn特征提取中文本特征提取相关

    英文网站http://scikit-learn.org/stable/modules/feature_extrac...

  • 文本特征提取

    文本特征提取 文本特征提取: 将文本数据转化成特征向量的过程 比较常用的文本特征表示法为词袋法 词袋法: 不考虑词...

  • 机器学习入门(十) — 深度学习

    1 深度学习:图像搜索 可视化商品推荐 我想买双新鞋,但是 文本搜索不能帮助我们 2 神经网络 特征是机器学习的关...

  • 中文NLP笔记:4. 文本数据可视化 的几个方法

    文本数据可视化有下面三种 1. 基于文本内容的可视化 基于词频的可视化和基于词汇分布的可视化 常用的有词云、分...

  • 中间特征可视化

    中间特征可视化 参考: PyTorch | 提取神经网络中间层特征进行可视化 参考: pytorch模型中间层特...

  • Lecture 12 可视化和理解CNN

    本课重点 特征可视化 DeepDream 风格迁移 1 特征可视化 之前一直把CNN当做黑盒子处理,那么其工作原理...

网友评论

    本文标题:中文文本特征可视化

    本文链接:https://www.haomeiwen.com/subject/dcafmxtx.html