目录

  • 前言
  • 一、模型构建
    • 1.归类
    • 2.判定
    • 3.输出
  • 二、代码实现
  • 三、结果展示

前言

文本情感倾向性分析(也称为意见挖掘)是指识别和提取原素材中的主观信息,并对带有感情色彩的文本进行分析处理和归纳推理的过程。主要用于实时社交媒体的内容,如微博评论等。而BosonNLP情感词典是从微博、新闻、论坛等数据来源的上百万篇情感标注数据当中自动构建的情感极性词典。因为标注包括微博等网络社交媒体平台的数据,该词典囊括了很多网络用语及非正式简称,对非规范文本也有较高的覆盖率。本文主要基于BosonNLP情感词典,同时使用程度副词词典和否定词词典(借助《知网》情感分析用词语集等文本构建)和哈工大停用词表,共同通过情感打分的方式进行(这里以前文《利用Python系统性爬取微博评论》https://blog.csdn.net/kutalx/article/details/115242052)中获取的评论数据为依托)的情感倾向性分析。


提示:代码实现部分参考了文章Python做文本情感分析之情感极性分析的内容,并在其基础上进行了优化,以适配个人需求。

一、模型构建

1.归类

采用的手段为遍历匹配相应的词性词典并对每条评论建立对应的位置词典。分词后文本内的所有词语彼此独立,故对于每一条评论,将其内部的每一个词分别归类于“情感词”、“否定词”、“程度词”和“其它词”四类中。具体步骤为先读取情感词典、否定词词典和程度副词词典,转化为“词语-分值”映射关系;再读取一条分词后评论,新建三个位置词典,内含“位置-分值”映射关系,依次对每个词进行分类,将每个词的位置录入对应的位置词典中。

2.判定

采用的手段为遍历每条评论的位置信息,输出情感分数。一条评论的初始分数为0;按位置遍历内部词语,若一个词被判定为“情感词”,则按照情感位置词典读取分数;若两个“情感词”之间有词语被判定为“否定词”或“程度词”,则按照否定位置词典或程度位置词典读取分数(“否定词”实则皆为-1),将之与后一个“情感词”分数相乘;最后将一条评论的所有情感词分数相加,得其总分数。算式如下:
Sw=(−1)Nn∗∑i=1NdDs∗SoS_w=(-1)^{N_n}*\sum_{i=1}^{N_d} D_s*S_o Sw​=(−1)Nn​∗i=1∑Nd​​Ds​∗So​
Ss=∑i=1NoSoS_s=\sum_{i=1}^{N_o} S_o Ss​=i=1∑No​​So​
其中,SwS_wSw​为单一情感词的最终分数,NnN_nNn​、NoN_oNo​为前缀否定词和程度词的数 DsD_sDs​、SoS_oSo​为前缀每个程度词的分数和单一情感词的原始分数;SsS_sSs​为一票评论的最终分数,NoN_oNo​为该评论类情感词的个数。

3.输出

每部作品有多条评论,每条评论的分值分布是离散的。将评论分值划分为五个等级:5(正面),4(偏正面),3(中性),2(偏负面),1(负面)。根据分值的分布特征,算式如下:
Degree={5Ss≥340.5≤Ss<33−0.5<Ss<0.52−3<Ss≤−0.51Ss≤−3Degree=\left\{ \begin{array}{rcl} 5 & & {S_s≥3}\\ 4 & & {0.5≤S_s<3}\\ 3 & & {-0.5<S_s<0.5}\\ 2 & & {-3<S_s≤-0.5}\\ 1 & & {S_s≤-3} \end{array} \right. Degree=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​54321​​Ss​≥30.5≤Ss​<3−0.5<Ss​<0.5−3<Ss​≤−0.5Ss​≤−3​
由此即可得整体情感倾向水平。


流程如上;其中,“文件5”为评论文本文档,以微博id命名方便后续对应读取。

二、代码实现

使用python实现模型,代码如下:

from collections import defaultdict
import os
import re
import jieba
import codecs
def classifyWords(wordDict):senList = open(存储路径-情感词典).readlines()senDict = defaultdict()for s in senList:ls=s.split(' ',1)if len(ls)==2:senDict[ls[0]] = ls[1]notList = open(存储路径-否定词典).readlines()degreeList = open(存储路径-程度词典).readlines()degreeDict = defaultdict()for d in degreeList:ls2 = d.split(',', 1)if len(ls2) == 2:degreeDict[ls2[0]] = ls2[1]senWord = defaultdict()notWord = defaultdict()degreeWord = defaultdict()for word in wordDict.keys():if word in senDict.keys() and word not in notList and word not in degreeDict.keys():senWord[wordDict[word]] = senDict[word]elif word in notList and word not in degreeDict.keys():notWord[wordDict[word]] = -1elif word in degreeDict.keys():degreeWord[wordDict[word]] = degreeDict[word]return senWord, notWord, degreeWord
def scoreSent(senWord, notWord, degreeWord, segResult):W = 1score = 0senLoc = senWord.keys()notLoc = notWord.keys()degreeLoc = degreeWord.keys()senloc = -1for i in range(0, len(segResult)):if i in senLoc:senloc += 1score += W * float(senWord[i])if senloc < len(senLoc) - 1:for j in range(list(senLoc)[senloc], list(senLoc)[senloc + 1]):if j in notLoc:W *= -1if j in degreeLoc:W *= float(list(degreeWord)[j])if senloc < len(senLoc) - 1:i = list(senLoc)[senloc + 1]return score
uid=#微博id列表
for n in uid:#多个微博的评论文本分别评分txt = open(存储路径-文件5).readlines()stop = open(存储路径-停用词表).readline()line=[]for i in range(len(txt)):line.append(list(jieba.cut(txt[i])))ScoreList=[]for i in range(len(line)):words=line[i]num=list(range(0,len(words)))d=dict(zip(words,num))s,no,d=classifyWords(d)Score=scoreSent(s, no, d, words)ScoreList.append(Score)VBIG=0BIG=0SMALL=0VSMALL=0MID=0for score in ScoreList:if score>=3:VBIG=VBIG+1elif score>=0.5:BIG=BIG+1elif score>=-0.5:MID=MID+1elif score>-3:SMALL=SMALL+1else:VSMALL=VSMALL+1print(VBIG,BIG,MID,SMALL,VSMALL)print("---")

三、结果展示


分别选取《山海情》《大江大河2》《巡回检察组》《金刚川》《我和我的祖国》《中国机长》六部作品对应的官方微博下的所有评论,使用上述模型进行分析,结果如上。
在《山海情》19996条评论中,“正面”、“偏正面”、“中性”、“偏负面”、“负面”评论对应的数目分别为7268条,5771条,3042条2946条和969条;在《大江大河2》48264条评论中,分别有24289条,10445条,5518条5582条和2430条;在《巡回检察组》20090条评论中,分别有4577条,5173条,3751条,4356条和2233条;在《金刚川》7296条评论中,分别有4016条,1600条,714条700条和266条;在《我和我的祖国》38053条中,分别有24772条,6855条,3039条2579条和808条;在《中国机长》16900条中,分别有7747条,4231条,2343条1951条和628条。
可以看出,每部作品的正面评价往往略多于或远多于消极评价,符合实际网络评论的情况;而《巡回检察组》相对而言具有最差的口碑,这也符合客观观看评价的情况。

基于情感词典的网络文本情感倾向分类模型相关推荐

  1. 基于SnowNLP的商品评论文本情感分析

           摘要:情感文本电商情感标注分析研究是当前电商数据情感挖掘学术研究的重要热点,具有极高的国际应用价值.对当前电商手机在线商品评论词典进行情感文本电商情感标注分析与词典数据情感挖掘研究具有很 ...

  2. 基于pytorch的Bi-LSTM中文文本情感分类

    基于pytorch的Bi-LSTM中文文本情感分类 目录 基于pytorch的Bi-LSTM中文文本情感分类 一.前言 二.数据集的准备与处理 2.1 数据集介绍 2.2 文本向量化 2.3 数据集处 ...

  3. 【自然语言处理】【细粒度情感分析】细粒度情感分析:了解文本情感的What、How、Why

    细粒度情感分析:了解文本情感的What.How.Why Knowing What,How and Way:A Near Complete Solution for Aspect-based Senti ...

  4. 自然语言处理NLP星空智能对话机器人系列:第21章:基于Bayesian Theory的MRC文本理解基础经典模型算法详解

    自然语言处理NLP星空智能对话机器人系列: 第21章:基于Bayesian Theory的MRC文本理解基础经典模型算法详解 1,Bayesian prior在模型训练时候对Weight控制.训练速度 ...

  5. 基于Python文本内容/情感的对微博文本自动二元分类

    资源下载地址:https://download.csdn.net/download/sheziqiong/85836603 资源下载地址:https://download.csdn.net/downl ...

  6. 基于SnowNLP的购物评论文本情感分析及准确率验证

    因论文涉及到SnowNLP情感分析的内容,于是对该内容进行了学习,但发现网上的资源发布更新不及时,大多数文章均发布于18年及以前.由于python版本的迭代,使得以往的资源代码有所出入,因此我对于Sn ...

  7. 基于Python的对网络评论情感分析:主题与情感词抽取

    资源下载地址:https://download.csdn.net/download/sheziqiong/85661888 问题描述 针对评论网站上的用户评论进行细粒度的情感分析,区别于传统的粗粒度的 ...

  8. ACL 2019 开源论文 | 基于知识库和大规模网络文本的问答系统

    作者丨张琨 学校丨中国科学技术大学博士生 研究方向丨自然语言处理 论文动机 当前问答系统面对的一大问题就是如何利用先验知识.我们人类可以通过不断的学习,掌握非常多的先验知识,并通过这些知识来回答问题. ...

  9. 通过主题词词典构建进行文本多标签分类

    文章目录 前言 一.数据预处理 1.引入库 2.读入数据 3.文本分词 3.计算每句得分 4.计算每句得分 总结 前言 目前,文本多标签分类具有非常多的深度学习的方法实现,本文将介绍最基础的,通过构造 ...

  10. 基于sigmoid的文本多标签分类模型代码实现

    sigmoid一般是用来做二分类的,它是将一个标量的数字转换成[0,1]之间的一个概率值,如果概率值大于0.5, 则判定为是某个分类,否则则不是某个分类,公式如下: 本文基于sigmoid做了一个将一 ...

最新文章

  1. regexp 好汉字符串_如何在JavaScript中使用RegExp确认字符串的结尾
  2. c语言节点有指针域数据域,学习心得:链表的操作(C语言实现)
  3. 3.1.10 OS之基本分段存储管理(段表、地址变换、信息共享)
  4. Nginx教程-location配置
  5. Linux Mint Root
  6. 杭电1713相遇周期
  7. java实现redis客户端_Java实现Redis客户端
  8. python selenium qwebengineview获取页面元素_selenium操作详解之获取元素状态
  9. 计算机集成声卡输出通道,电脑集成与独立声卡的差别有哪些?
  10. Windows XP优化指南
  11. vrep中视觉传感器(Vision sensor)
  12. 光学软件国产化项目开发心得
  13. ICEM划分网格实例——六角形螺栓
  14. MFC 控件清除内存
  15. Elixir元编程-第四章 如何测试宏
  16. 从字节中取出1bit数据
  17. lncRNASNP:SNP位点对lncNA结构和lncRNA-miRNA影响的数据库
  18. cad展点kszd小程序_CAD坐标展点脚本文件-CAD坐标展点程序下载v2 官方版-西西软件下载...
  19. php 计算工资,php计算税后工资的方法_PHP
  20. 区块链软件公司:区块链到底能做啥?

热门文章

  1. html 两个表合并,SQL中将两个表合并成一个新表
  2. java中访问权限控制顺序_Java中的四种访问权限控制 | 学步园
  3. java中的linearnumexpr,java - Cplex中的上限和下限等于0.0(在cplex中) - 堆栈内存溢出...
  4. java里decimalformat_Java中DecimalFormat用法详解
  5. 微信小程序-强制手机端更新
  6. 2018-01-03 烂尾工程: Java实现的汇编语言编译器
  7. spring-cloud-sleuth 和 分布式链路跟踪系统
  8. 蒜头君的生日(日期格式)
  9. 数据结构图之二(最小生成树--普里姆算法)
  10. 利用ActiveSync制作PC端安装程序(By 无聊客)