Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】


Posted in Python onAugust 07, 2018

本文实例讲述了Python实现购物评论文本情感分析操作。分享给大家供大家参考,具体如下:

昨晚上发现了snownlp这个库,很开心。先说说我开心的原因。我本科毕业设计做的是文本挖掘,用R语言做的,发现R语言对文本处理特别不友好,没有很多强大的库,特别是针对中文文本的,加上那时候还没有学机器学习算法。所以很头疼,后来不得已用了一个可视化的软件RostCM,但是一般可视化软件最大的缺点是无法调参,很死板,准确率并不高。现在研一,机器学习算法学完以后,又想起来要继续学习文本挖掘了。所以前半个月开始了用python进行文本挖掘的学习,很多人都推荐我从《python自然语言处理》这本书入门,学习了半个月以后,可能本科毕业设计的时候有些基础了,再看这个感觉没太多进步,并且这里通篇将nltk库进行英文文本挖掘的,英文文本挖掘跟中文是有很大差别的,或者说学完英文文本挖掘,再做中文的,也是完全懵逼的。所以我停了下来,觉得太没效率了。然后我在网上查找关于python如何进行中文文本挖掘的文章,最后找到了snownlp这个库,这个库是国人自己开发的python类库,专门针对中文文本进行挖掘,里面已经有了算法,需要自己调用函数,根据不同的文本构建语料库就可以,真的太方便了。我只介绍一下这个库具体应用,不介绍其中的有关算法原理,因为算法原理可以自己去学习。因为我在学习这个库的时候,我查了很多资料发现很少或者基本没有写这个库的实例应用,很多都是转载官网对这个库的简介,所以我记录一下我今天的学习。

首先简单介绍一下这个库可以进行哪些文本挖掘。snownlp主要可以进行中文分词(算法是Character-Based Generative Model)、词性标注(原理是TnT、3-gram 隐马)、情感分析(官网木有介绍原理,但是指明购物类的评论的准确率较高,其实是因为它的语料库主要是购物方面的,可以自己构建相关领域语料库,替换原来的,准确率也挺不错的)、文本分类(原理是朴素贝叶斯)、转换拼音、繁体转简体、提取文本关键词(原理是TextRank)、提取摘要(原理是TextRank)、分割句子、文本相似(原理是BM25)。官网还有更多关于该库的介绍,在看我这个文章之前,建议先看一下官网,里面有最基础的一些命令的介绍。官网链接:https://pypi.python.org/pypi/snownlp/0.11.1。

PS:可以直接使用pip install snownlp 命令进行snownlp模块的快速安装(注:这里要求pip版本至少为18.0)。

下面正式介绍实例应用。主要是中文文本的情感分析,我今天从京东网站采集了249条关于笔记本的评论文本作为练习数据,由于我只是想练习一下,没采集更多。然后人工标注每条评论的情感正负性,情感正负性就是指该条评论代表了评论者的何种态度,是褒义还是贬义。以下是样例

Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】

其中-1表示贬义,1表示褒义。由于snownlp全部是unicode编码,所以要注意数据是否为unicode编码。因为是unicode编码,所以不需要去除中文文本里面含有的英文,因为都会被转码成统一的编码(补充一下,关于编码问题,我还是不特别清楚,所以这里不多讲,还请对这方面比较熟悉的伙伴多多指教)。软件本身默认的是Ascii编码,所以第一步先设置软件的默认编码为utf-8,代码如下:

1、改变软件默认编码

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

2、然后准备数据

import pandas as pd #加载pandas
text=pd.read_excel(u'F:/自然语言处理/评论文本.xlsx',header=0) #读取文本数据
text0=text.iloc[:,0] #提取所有数据
text1=[i.decode('utf-8') for i in text0] #上一步提取数据不是字符而是object,所以在这一步进行转码为字符

3、训练语料库

from snownlp import sentiment #加载情感分析模块
sentiment.train('E:/Anaconda2/Lib/site-packages/snownlp/sentiment/neg.txt', 'E:/Anaconda2/Lib/site-packages/snownlp/sentiment/pos.txt') #对语料库进行训练,把路径改成相应的位置。我这次练习并没有构建语料库,用了默认的,所以把路径写到了sentiment模块下。
sentiment.save('D:/pyscript/sentiment.marshal')#这一步是对上一步的训练结果进行保存,如果以后语料库没有改变,下次不用再进行训练,直接使用就可以了,所以一定要保存,保存位置可以自己决定,但是要把`snownlp/seg/__init__.py`里的`data_path`也改成你保存的位置,不然下次使用还是默认的。

4、进行预测

from snownlp import SnowNLP
senti=[SnowNLP(i).sentiments for i in text1] #遍历每条评论进行预测

5、进行验证准确率

预测结果为positive的概率,positive的概率大于等于0.6,我认为可以判断为积极情感,小于0.6的判断为消极情感。所以以下将概率大于等于0.6的评论标签赋为1,小于0.6的评论标签赋为-1,方便后面与实际标签进行比较。

newsenti=[]
for i in senti:
 if (i>=0.6):
   newsenti.append(1)
 else:
   newsenti.append(-1)
text['predict']=newsenti #将新的预测标签增加为text的某一列,所以现在text的第0列为评论文本,第1列为实际标签,第2列为预测标签
counts=0
for j in range(len(text.iloc[:,0])): #遍历所有标签,将预测标签和实际标签进行比较,相同则判断正确。
  if text.iloc[j,2]==text.iloc[j,1]:
    counts+=1
print u"准确率为:%f"%(float(counts)/float(len(text)))#输出本次预测的准确率

运行结果为:

Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】

准确率还可以,但还不算高,原因是我考虑时间原因,并且我只是练习一下,所以没有自己构建该领域的语料库,如果构建了相关语料库,替换默认语料库,准确率会高很多。所以语料库是非常关键的,如果要正式进行文本挖掘,建议要构建自己的语料库。在没有构建新的语料库的情况下,这个83.9357%的准确率还是不错了。

以上是我这次的学习笔记,和大家分享一下,有不足之处请大家批评指正。我还是一个刚涉世数据挖掘、机器学习、文本挖掘领域不久的小白,有许多知识还是比较模糊,但对这数据挖掘很感兴趣。希望能多结识这方面的朋友,共同学习、共同进步。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
微信 用脚本查看是否被微信好友删除
Oct 28 Python
python2.7实现爬虫网页数据
May 25 Python
Centos 升级到python3后pip 无法使用的解决方法
Jun 12 Python
Python使用numpy模块创建数组操作示例
Jun 20 Python
详解Django中间件的5种自定义方法
Jul 26 Python
解决Python下json.loads()中文字符出错的问题
Dec 19 Python
PyQt5图形界面播放音乐的实例
Jun 17 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
使用TensorFlow-Slim进行图像分类的实现
Dec 31 Python
python异常处理之try finally不报错的原因
May 18 Python
Win10下用Anaconda安装TensorFlow(图文教程)
Jun 18 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
Sep 03 Python
python实现彩票系统
Jun 28 #Python
django框架自定义用户表操作示例
Aug 07 #Python
Python实现基于POS算法的区块链
Aug 07 #Python
tensorflow学习教程之文本分类详析
Aug 07 #Python
Django添加feeds功能的示例
Aug 07 #Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
Aug 07 #Python
Django添加favicon.ico图标的示例代码
Aug 07 #Python
You might like
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
php的memcached客户端memcached
2011/06/14 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
2018/05/24 PHP
jquery 实现的全选和反选
2009/04/15 Javascript
xml转json的js代码
2012/08/28 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
2017/07/17 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
Python 中迭代器与生成器实例详解
2017/03/29 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
分析python切片原理和方法
2017/12/19 Python
Python读取excel指定列生成指定sql脚本的方法
2018/11/28 Python
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
python字典一键多值实例代码分享
2019/06/14 Python
自定义django admin model表单提交的例子
2019/08/23 Python
使用tqdm显示Python代码执行进度功能
2019/12/08 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
CSS3教程:新增加的结构伪类
2009/04/02 HTML / CSS
德国最大的拼图在线商店:Puzzle.de
2016/12/17 全球购物
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
临床医学专业学生的自我评价分享
2013/11/21 职场文书
测控技术与仪器个人求职信范文
2013/12/30 职场文书
师德师风个人反思
2014/04/28 职场文书
主题实践活动总结
2014/05/08 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
2016年校长新年寄语
2015/08/17 职场文书
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android