情感极性分析,即情感分类,对带有主观情感色彩的文本进行分析、归纳。情感极性分析主要有两种分类方法:基于情感知识的方法和基于机器学习的方法。基于情感知识的方法通过一些已有的情感词典计算文本的情感极性(正向或负向),其方法是统计文本中出现的正、负向情感词数目或情感词的情感值来判断文本情感类别;基于机器学习的方法利用机器学习算法训练已标注情感类别的训练数据集训练分类模型,再通过分类模型预测文本所属情感分类。本文采用机器学习方法实现对酒店评论数据的情感分类,利用Python语言实现情感分类模型的构建和预测,不包含理论部分,旨在通过实践一步步了解、实现中文情感极性分析。

1 开发环境准备

1.1 Python环境

在python官网https://www.python.org/downloads/ 下载计算机对应的python版本,本人使用的是Python2.7.13的版本。后面,因为想要使用CNN算法与SVM算法结果进行比对,使用到了Tensorflow模块,而此模块在Windows系统中只有Python35版本,因此又加装了Python3.5的版本,即一台电脑同时存在连个python版本,可以分开使用。

在本实例中前面直到SVM算法的实现都在Python27下完成,仅CNN算法在Python35下完成,特此说明。

1.2 第三方模块

本实例代码的实现使用到了多个著名的第三方模块,主要模块如下所示:

2)Gensim

用于主题模型、文档索引和大型语料相似度索引的python库,主要用于自然语言处理(NLP)和信息检索(IR)。下载地址:https://pypi.python.org/pypi/gensim

本实例中的维基中文语料处理和中文词向量模型构建需要用到该模块。

3)Pandas

用于高效处理大型数据集、执行数据分析任务的python库,是基于Numpy的工具包。下载地址:https://pypi.python.org/pypi/pandas/0.20.1

5)Scikit-learn

用于机器学习的python工具包,python模块引用名字为sklearn,安装前还需要Numpy和Scipy两个Python库。官网地址:http://scikit-learn.org/stable/

6)Matplotlib

Matplotlib是一个python的图形框架,用于绘制二维图形。下载地址:https://pypi.python.org/pypi/matplotlib

2 数据获取

2.1 停用词词典

2.2 正负向语料库

文本从http://www.datatang.com/data/11936 下载“有关中文情感挖掘的酒店评论语料”作为训练集与测试集,该语料包含了4种语料子集,本文选用正负各1000的平衡语料(ChnSentiCorp_htl_ba_2000)作为数据集进行分析。

3 数据预处理

3.1 正负向语料预处理

下载并解压ChnSentiCorp_htl_ba_2000.rar文件,得到的文件夹中包含neg(负向语料)和pos(正向语料)两个文件夹,而文件夹中的每一篇评论为一个txt文档,为了方便之后的操作,需要把正向和负向评论分别规整到对应的一个txt文件中,即正向语料的集合文档(命名为2000_pos.txt)和负向语料的集合文档(命名为2000_neg.txt)。

具体Python实现代码如下所示:

1_process--文档处理代码

运行完成后得到2000_pos.txt和2000_neg.txt两个文本文件,分别存放正向评论和负向评论,每篇评论为一行。文档部分截图如下所示:

酒店评论截图

3.2 中文文本分词

本文采用结巴分词分别对正向语料和负向语料进行分词处理。特别注意,在执行代码前需要把txt源文件手动转化成UTF-8格式,否则会报中文编码的错误。在进行分词前,需要对文本进行去除数字、字母和特殊符号的处理,使用python自带的string和re模块可以实现,其中string模块用于处理字符串操作,re模块用于正则表达式处理。

具体实现代码如下所示:

2_cutsentence--结巴分词代码

处理完成后,得到2000_pos_cut.txt和2000_neg_cut.txt两个txt文件,分别存放正负向语料分词后的结果。分词结果部分截图如下所示:

分词结果截图

3.3 去停用词

分词完成后,即可读取停用词表中的停用词,对分词后的正负向语料进行匹配并去除停用词。去除停用词的步骤非常简单,主要有两个:

1)读取停用词表;

2)遍历分词后的句子,将每个词丢到此表中进行匹配,若停用词表存在则替换为空。

具体实现代码如下所示:

3_stopword--去除停用词代码

根据代码所示,停用词表的获取使用到了python特有的广播形式,一句代码即可搞定:

stopkey = [w.strip() for w in codecs.open('data\stopWord.txt', 'r', encoding='utf-8').readlines()]

读取出的每一个停用词必须要经过去符号处理即w.strip(),因为读取出的停用词还包含有换行符和制表符,如果不处理则匹配不上。代码执行完成后,得到2000_neg_cut_stopword.txt和2000_pos_cut_stopword.txt两个txt文件。

由于去停用词的步骤是在句子分词后执行的,因此通常与分词操作在同一个代码段中进行,即在句子分词操作完成后直接调用去停用词的函数,并得到去停用词后的结果,再写入结果文件中。本文是为了便于步骤的理解将两者分开为两个代码文件执行,各位可根据自己的需求进行调整。

3.4 获取特征词向量

根据以上步骤得到了正负向语料的特征词文本,而模型的输入必须是数值型数据,因此需要将每条由词语组合而成的语句转化为一个数值型向量。常见的转化算法有Bag of Words(BOW)、TF-IDF、Word2Vec。本文采用Word2Vec词向量模型将语料转换为词向量。

由于特征词向量的抽取是基于已经训练好的词向量模型,而wiki中文语料是公认的大型中文语料,本文拟从wiki中文语料生成的词向量中抽取本文语料的特征词向量。Wiki中文语料的Word2vec模型训练在之前写过的一篇文章“利用Python实现wiki中文语料的word2vec模型构建” 中做了详尽的描述,在此不赘述。即本文从文章最后得到的wiki.zh.text.vector中抽取特征词向量作为模型的输入。

获取特征词向量的主要步骤如下:

1)读取模型词向量矩阵;

2)遍历语句中的每个词,从模型词向量矩阵中抽取当前词的数值向量,一条语句即可得到一个二维矩阵,行数为词的个数,列数为模型设定的维度;

3)根据得到的矩阵计算矩阵均值作为当前语句的特征词向量;

4)全部语句计算完成后,拼接语句类别代表的值,写入csv文件中。

主要代码如下图所示:

4_getwordvecs--获取词向量代码

代码执行完成后,得到一个名为2000_data.csv的文件,第一列为类别对应的数值(1-pos, 0-neg),第二列开始为数值向量,每一行代表一条评论。结果的部分截图如下所示:

词向量截图

3.5 降维

Word2vec模型设定了400的维度进行训练,得到的词向量为400维,本文采用PCA算法对结果进行降维。具体实现代码如下所示:

5_pca_svm--PCA降维代码

运行代码,根据结果图发现前100维就能够较好的包含原始数据的绝大部分内容,因此选定前100维作为模型的输入。

PCA维度解释结果图

4 分类模型构建

本文采用支持向量机(SVM)作为本次实验的中文文本分类模型,其他分类模型采用相同的分析流程,在此不赘述。

支持向量机(SVM)是一种有监督的机器学习模型。本文首先采用经典的机器学习算法SVM作为分类器算法,通过计算测试集的预测精度和ROC曲线来验证分类器的有效性,一般来说ROC曲线的面积(AUC)越大模型的表现越好。

首先使用SVM作为分类器算法,随后利用matplotlib和metric库来构建ROC曲线。具体python代码如下所示:

5_pca_svm--SVM代码

运行代码,得到Test Accuracy: 0.88,即本次实验测试集的预测准确率为88%,ROC曲线如下图所示。

ROC曲线图

至此,利用Pyhon对酒店评论进行中文情感极性分析的流程与方法全部介绍完毕,代码和数据已上传至本人的GitHub仓库,data文件夹中包含停用词表stopWord.txt和测试集ChnSentiCorp_htl_ba_2000,还可采用其他分类模型进行分类,欢迎各位朋友批评指正、共同学习!

python情感分析语料库_利用Python实现中文情感极性分析相关推荐

  1. 利用python进行数据分析 笔记_利用python进行数据分析--(阅读笔记一)

    原博文 2016-06-17 23:21 − 以此记录阅读和学习<利用Python进行数据分析>这本书中的觉得重要的点! 第一章:准备工作 1.一组新闻文章可以被处理为一张词频表,这张词频 ...

  2. python制作电脑软件_利用PYTHON制作桌面版爬虫软件(一)

    抱歉,对长沙房地产数据的挖掘与分析[三],想了蛮久,觉得对自己的分析结果不是很理想.等我完善好了,我再发出来吧.今天继续开启新的一专题.主要讲解如何用PYTHON实现简单的桌面软件的制作. 题外话,我 ...

  3. python itchat 无法登录_利用python实现在微信群刷屏的方法

    hello,我是小小炽,这是我写的第一篇博客,写博客一直都想在写,但是苦于能力尚浅,在各位大牛面前那既然是关公面前耍大刀了,但是其实想来每一个大牛不也是从一个小白慢慢进步学习从而达到一定的高度的吗,而 ...

  4. python post请求 上传图片_利用python模拟实现POST请求提交图片的方法

    本文主要给大家介绍的是关于利用python模拟实现POST请求提交图片的方法,分享出来供大家参考学习,下面来一看看详细的介绍: 使用requests来模拟HTTP请求本来是一件非常轻松的事情,比如上传 ...

  5. python实现邮件客户端_利用python实现简单的邮件发送客户端示例

    脚本过于简单,供学习和参考.主要了解一下smtplib库的使用和超时机制的实现.使用signal.alarm实现超时机制. #!/usr/bin/env python # -*- coding: ut ...

  6. python制作图片墙_利用python生成照片墙的示例代码

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为:PIL. PIL历 ...

  7. python如何收集数据库_利用Python操作mysql数据库

    本文主要讲解如何利用python中的pymysql库来对mysql数据库进行操作 大家在转行项目中也可以加入这一步操作,提高逼格的同时还能简化流程 正文开始: 先看一下最常见的操作:从数据库中sele ...

  8. python黑科技脚本_利用Python实现FGO自动战斗脚本,再也不用爆肝啦~

    欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 利用Python实现FGO自动战斗脚本,再也不用爆 ...

  9. python金融量化风险_利用 Python 进行量化投资分析 - 利率及风险资产的超额收益...

    本文是 利用 Python 进行量化投资分析 系列的第一篇文章,这个系列主要以 Python 作为工具,结果国内金融市场情况,及使用真实历史数据来实践一些基础的金融投资概念. 这篇文章主要讲述了真实利 ...

最新文章

  1. 在Google Cloud Platform上持续部署Node.js
  2. 使用什么优化器_优化器怎么选?一文教你选择适合不同ML项目的优化器
  3. 数据驱动车主 App 产品优化,轻松搞定用户体验与转化
  4. Common tasks for MySQL
  5. 【亲身经验】如何在 6 个月内成为“微软 MVP”
  6. YbtOJ#493-最大分数【斜率优化dp,分治】
  7. android菜单动画,利用 android studio 制作一个菜单动画
  8. 如何让debuge的dll名字改变_杨石头:如何给品牌取个好名字?
  9. curl的get请求设置参数实例
  10. maven安装jar包到本地仓库
  11. shiro框架如何保持登录状态
  12. 企业微信API学习笔记
  13. 网吧网吧无盘服务器配置,网吧无盘服务器配置杂谈
  14. 【Arduino 项目篇】智能窗户控制系统(附录:简单红绿灯制作)
  15. 怎么把两个pdf合并成一个pdf?
  16. gst-rtsp-server 编译日志
  17. windows系统下的文件长名和文件短名
  18. 数学不好学计算机有影响吗,数学很差能学计算机吗
  19. PaddlePaddle/PaddleOCR 中英文文字识别
  20. 12.寻光集后台管理系统-库存信息(后端)

热门文章

  1. pgsql:字符串转数值
  2. LayaBOX添加颜色滤镜
  3. [git可视化软件]gitkraken6.5.1 免费版不能正常使用的解决办法
  4. MongoDB下载详细安装(Windows10)
  5. 赛尔102S助力云南开展2020年白马雪山国家级自然保护区低空无人机生态监测
  6. java 应用 知乎_GitHub - liangsonghua/zhihu: JAVA仿知乎与redis应用
  7. 电脑视频占内存太多,怎么快速压缩多个视频
  8. 插值拟合matlab程序,Matlab插值和拟合
  9. easyrecovery免费版2023最新电脑数据恢复软件
  10. libcef-简单介绍-快速链接-源代码发布