snownlp是python中的一个库,从文件导入数据后调用函数即可进行情感分析。

数据:100条微博评论数据,标签1为正向,0为负向

代码:

# import sys
import pandas as pd #加载pandas
from snownlp import sentiment #加载情感分析模块
from snownlp import SnowNLP
#import importlib# importlib.reload(sys)
# sys.setdefaultencoding('utf-8')text=pd.read_excel('./weibo.xlsx',header=0) #读取文本数据
text0=text.iloc[:,0] #提取所有数据(第0列)
print(text0)
# text1=[i.encode("utf-8").decode('utf-8') for i in text0] #上一步提取数据不是字符而是object,所以在这一步进行转码为字符
text1=[i for i in text0]
print(text1)
#
t1=time.time()
sentiment.train('D:/pythontool/Anaconda/Lib/site-packages/snownlp/sentiment/neg.txt', 'D:/pythontool/Anaconda/Lib/site-packages/snownlp/sentiment/pos.txt') #对语料库进行训练,把路径改成相应的位置。我这次练习并没有构建语料库,用了默认的,所以把路径写到了sentiment模块下。
t2=time.time()
print("训练语料库用时",t2-t1)
#
t3=time.time()
senti=[SnowNLP(i).sentiments for i in text1] #遍历每条评论进行预测
t4=time.time()
print("预测用时",t4-t3)
#
newsenti=[]
#
for i in senti:if (i>=0.6):newsenti.append(1)else:newsenti.append(0)
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("准确率为:%f"%(float(counts)/float(len(text))))#输出本次预测的准确率

修改默认编码

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

实际这一部分完全不需要,写了会画蛇添足,Python3字符串默认编码utf-8, 所以sys.setdefaultencoding不存在了,python2需要写。详细可看(都是踩过的坑)Python3异常-AttributeError: module 'sys' has no attribute 'setdefaultencoding_琦彦的博客-CSDN博客_python3 sys.setdefaultencoding

Python 解决 :NameError: name 'reload' is not defined 问题_lxw1844912514的博客-CSDN博客

提取数据:

import pandas as pd #加载pandas
text=pd.read_excel('./weibo.xlsx',header=0) #读取文本数据
text0=text.iloc[:,0] #提取所有数据(第0列)
print(text0)
# text1=[i.encode("utf-8").decode('utf-8') for i in text0] #上一步提取数据不是字符而是object,所以在这一步进行转码为字符
text1=[i for i in text0]
print(text1)

转码这一块从本质上来说,编码和解码就是Python中str和bytes这两种字符串类型之间的互相转换。, str包含一个encode方法,使用特定编码将该字符串其转换为一个bytes,这称之为编码。 bytes类包含了一个decode方法,也接受一个编码作为单个必要参数,并返回一个str,这称之为解码。这种转换操作是显式的操作,且必须根据数据被编码时采用的编码类型进行解码。

python3似乎对一切的unicode都那么的友好,当一个字符串里存在unicode的时候,只要字符串是硬编码的,就可以转换成中文打印在控制台上,但是,假如你。。的这段含有‘\u’的unicode编码不是硬编码进脚本的,而是通过requests在网上爬的。。。那么你会发现,你打印出来的,还是长这样的unicode编码,换句话说,解释器这个时候根本就没认出这东西原来是unicode编码,当成普通的字符序列了。

然后本人就想,encode之后在decode不就又回到初始状态了吗,实际操作之后证明是可以的,并不影响运行结果。(这点还请评论区指点一二)

详细可看AttributeError: 'str' object has no attribute 'decode'_微信-支付宝的博客-CSDN博客

训练语料库

from snownlp import sentiment
sentiment.train('D:/pythontool/Anaconda/Lib/site-packages/snownlp/sentiment/neg.txt', 'D:/pythontool/Anaconda/Lib/site-packages/snownlp/sentiment/pos.txt')

语料库为snownlp自带语料,主题为购物评论,所以对购物评论的情感分析准确率较高。

接下来就是对每一条评论进行预测,然后贴标签,再与原标签对比计算准确率。

丛实际运行来看,训练语料需要较长时间,差不多10分钟,预测还是挺快的,由于语料是购物评论,数据是微博数据,所以准确率不高。

跑完才发现预测那块时间写错了,不想再跑一次了哈哈哈。

这是本人的处女作,有不足之处还请多多指教,刚开始接触nlp,希望能和大家多多交流。

参考博客:snownlp 原理_snownlp入门_马福报的博客-CSDN博客

自建语料库后准确率提高不少

SNOWNLP情感分析报错解决相关推荐

  1. 利用Python爬取《囧妈》豆瓣短评数据,并进行snownlp情感分析

    利用Python爬取<囧妈>豆瓣短评数据,并进行snownlp情感分析 一.电影评论爬取 今年的贺岁片<囧妈>上映前后,在豆瓣评论上就有不少网友发表了自己的观点,到底是好评的声 ...

  2. oracle拼接字符串报错,Oracle 中wmsys.wm_concat拼接字符串,结果过长报错解决

    备忘:这个函数最大是4000,根据拼接列的长度,通过限制拼接条数来防止拼接字符串过长错误 --这个情况是从子表中读取出具,这里直接把它当做查询字段处理,在子表中有所有数据 select info.id ...

  3. Windows上pip install kenlm报错解决

    Windows上pip install kenlm报错解决 解决办法1: 一般在windows上安装kenlm会遇到与Microsoft Visual C++ 14.0 is required相关的问 ...

  4. Vivado使用ILA调试报错解决

    1.1 Vivado使用ILA调试报错解决 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Vivado使用ILA调试报错解决: 5)结束语. 1.1.2 本节引言 &q ...

  5. Vivado设计DDR3接口生成bit报错解决

    1.1 Vivado设计DDR3接口生成bit报错解决 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Vivado设计DDR3接口生成bit报错解决: 5)结束语. 1 ...

  6. 报错解决——ValueError: row index was 65536, not allowed by .xls format

    报错解决--ValueError: row index was 65536, not allowed by .xls format 一.原因分析 二.解决方案 1.方法一 2.方法二 一.原因分析 x ...

  7. Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法

    Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法. 一个Java老项目,更新了日志工具,升级为Log4j2,在引入log4j-api-2.14.0.jar 和log4j-core-2. ...

  8. Jenkins安装插件报错解决方法

    Jenkins安装插件报错解决方法 1.报错场景 2.场景分析 3.问题解决(不一定能全解决,看运气) 1.报错场景 按正常方式安装完Jenkins后安装插件会报错如下: // An highligh ...

  9. python snownlp情感分析_SnowNLP情感分析+生成词云

    本帖最后由 missy 于 2017-12-9 00:12 编辑 因为最近看了一下<致我们单纯的小美好>,虽然情节是有点"二"吧,但是看了觉得真的很怀念初高中的日子,一 ...

  10. 【报错解决】telnet时报错:无法打开到主机的连接,在端口23连接失败

    [报错解决]主机telnet时报错:无法打开到主机的连接,在端口23连接失败 一.故障现象 二.问题分析 1.telnet功能未开启 2.本地防火墙阻断 三.处置方法 1.开启telnet功能 2.本 ...

最新文章

  1. Linux 安装Zookeeper单机版(使用Mac远程访问)
  2. MTU MSS 详解记录
  3. python成员运算符包括_Python 使用成员运算符案例
  4. 使用Matlab(R2018b)画复杂函数的图形(网格图meshgrid)及等高线contour
  5. Android学习之调用系统相机实现拍照功能
  6. NETCONF YANG语言文件语法格式
  7. RT-Thread Nano移植
  8. [转] Float或Double浮点型计算精度问题的解决方法
  9. oracle同一天,Oracle统计一个小时内,一天内、一个星期内、一个月内、一年内的数据...
  10. [原创]:善用佳软(三)
  11. Android证书签名生成
  12. 新唐N76E003与ST公司STM8S003F3芯片对比 史上最全的没有之一
  13. python实时监控文件夹内文件数量变化_python 监控文件夹变化
  14. protobuf3 oneof
  15. win10右键卡顿原因_右键菜单反应慢?win10系统解决右键菜单卡顿方法
  16. android底部抽屉库,Xamarin.Android之简单的抽屉布局
  17. Unity3D之太空大战一
  18. 动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)
  19. java获取环境变量路径/java获取环境变量和系统属性
  20. 贝尔商道赚钱思维36道第25道:流传千年的赚钱秘密

热门文章

  1. PlayReady 和WideVine
  2. PAT C语言 1031 查验身份证 (15 分) 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:
  3. android数据库可视化工具
  4. USB转RS232串口线-交叉线or直连线
  5. 监狱人员安全防范管理系统软件解决方案
  6. MATLAB2017b libsvm安装教程
  7. 408计算机及格要什么水平,2019考研计算机408难度水平?
  8. 联想服务器thinkserver TS550 Raid5制作及winserver2012R2 安装过来
  9. android singletask启动模式,Android SingleTask启动模式与Home键的问题
  10. usb无线网卡linux驱动,Linux系统下安装USB无线网卡驱动方法