基于情感词典进行情感态度分析

更新时间:2023-06-15 09:37:52 阅读: 评论:0

基于情感词典进⾏情感态度分析
情感分析是指挖掘⽂本表达的观点,识别主体对某客体的评价是褒还是贬,褒贬根据进态度⾏倾向性研究。⽂本情感分析可以分为基于机器学习的情感分类⽅法和基于语义理解的情感分析。基于机器学习进⾏语义分析的话需要⼤量的训练集,同时需要⼈⼯对其进⾏分类标注。我所使⽤的⽅法是基于语义理解中的使⽤情感词典进⾏情感态度分析。
下⾯是我所使⽤的情感词典:
情感词典有很多种,⽐如哈⼯⼤整理的,知⽹情感词典以及台湾⼤学NTUSD简体中⽂情感词典等,但并不是每个词典对于我们来说都是有⽤的,我们要根据⾃⼰的⽂本内容来选择合适的情感词典。
进⾏情感分析的⼤致流程如下图:
第⼀步先对⽂本进⾏预处理:
这⾥对⽂本进⾏预处理就是对句⼦进⾏分词,分词⼯具有很多,我选择的是使⽤python中的结巴分词,这个分词⼯具很好⽤,可以在分词的同时将词性也分析出来。不过在分词之前,对于⼀段⽂本内容来说,并不是所有的内容都对情感分析有帮助,⽐如⼀本书的书名,微博⽂本的标题以及⼀些⾮中⽂内容等,时候这个就我们可以⽤正则表达式只匹配我们需要的内容
import jieba.posg as pg #包括了词性(词语,词性)
def g_word(ntenct):
d = ""
ntenct = re.sub(u"\\#.*?\\#|\\@.*?\\ |\\《.*?\\》|【.*?】", "", ntenct)  # 处理#...#和@... (空格)间的数据
s = re.compile(r'[a-zA-Z0-9.?/&=:]*', re.S)
ntenct = s.sub("", ntenct)
gList = pg.cut(ntenct)  #分词
gResult = []
data_c = []
data_p =[]
for word,flag in gList:
if ('\u4e00' <= word <= '\u9fa5'):  #判断字符串是否为中⽂
入户申请书怎么写if len(word)>1:
data_p.append(word)
gResult.append(word)
s = word + "/" + flag
d=d+s+"  "
data_c.append(d)
return data_c  #带有词性的列表
第⼆步就是将分词后的词向量通过情感词典进⾏训练了:
英汉词典情感包括情感词,否定词,副词程度以及停⽤词
情感词:是主体对某⼀客体表⽰内在评价的词语,带有强烈的感情⾊彩。
程度副词:本⾝没有情感倾向,但能够增强或减弱情感强度
否定词:本⾝也没有情感倾向,但能改变情感的极性
停⽤词:完全没有⽤或者没有意义的词
⾸先我们可以利⽤停⽤词去掉⼀些没有意义的词语,⽐如这,那,是等词语,将⼀些没有意义的词语过滤掉后,剩下的⼤部分就是对情感分析有⽤的词语了。在去除了停⽤词后,我们就可以利⽤情感词,程度副词以及否定词来运⽤⼀定的算法进⾏情感分析了
下⾯是通过停⽤词典匹配的代码
def stopchineword(gResult):
file = open("f:\\","r")
data = []
new_gResult=[]
for i adlines(): #从⽂件中读取数据并将其添加到列表中
data.append(i.strip())
for i in gResult:
if i in data:  #⽐较是否为停⽤词
continue
el:
new_gResult.append(i)
return new_gResult
在做完上⾯两步后,我们就可以开始利⽤情感词典来进⾏分析了
有⼈会问知道了情感词后如何进⾏分析呢,这只是词语啊?在这⾥,我们就需要给情感词进⾏打分了。情感词分为正⾯情感词和负⾯情感词,也可能会多分⼏类,但在这只讨论正反两⾯。有些情感词典可能会给出情感词对应的分值(怎么算的我就不知道了)。根据上⾯说的论⽂中所写,我们对情感词进⾏赋值,正⾯情感词分值为1,负⾯情感词分值为-1,中性词则为0程度副词也可以根据词典中所给出的不同程度基于不同等级的分值,否定词则全部置为 - 1。
语义是语句进⾏情感分类的重要特征,⽂档分类判断应按照词汇,句⼦,微博短⽂的步骤进⾏判断。情感倾向情感词前经常有程度副词修饰。当情感词前有程度副词修饰时,则会使情感词的情感倾向加强或减弱。⽽情感词前有否定词修饰时会使情感词的情感倾向反转。但在这⾥需要注意⼀个问题,就是对于否定词和程度词的不同位置可能会有两种结果。⼀是“否定词+程度副词+情感词”,还有就是“程度副词+否定词+情感词”。
芒神
对于“否定词+程度副词+情感词”的计算⽅式是
w = t *( - 1)* a * 0.5
对于“程度副词+否定词+情感词”的计算⽅式是
w = t *( - 1)* a * 2
其中w表⽰计算得到的情感词语的情感强度值,t表⽰情感词的权值,表⽰该情感词t前的程度副词的权值
在求得词向量中所有情感词的权值后进⾏求和,若得到的分值⼤于0,则为正⾯情感;若分值⼩于0,则为负⾯情感;若分值为0,则为中性情感。
⼤致算法的就跟下图所⽰⼀样,但我这张图还存在⼀些缺陷,就是在判断词语词性时没有将循环展⽰出来
求情感词的代码如下(重点在于计算整句话中情感词的权值)
def classify_words(dict_data):
positive_words = []
positive_word = open("f:\\正⾯情绪词.txt","r",encoding="utf-8").readlines()    for i in positive_word:
positive_words.append(i.strip())
negative_words = []佛开头的成语
negative_word = open("f:\\负⾯情绪词.txt","r",encoding="utf-8").readlines()    for i in negative_word:
negative_words.append(i.strip())
privative_words = []
privative_word = open("f:\\否定词.txt","r",encoding="utf-8").readlines()
for i in privative_word:春节祝福语图片
privative_words.append(i.strip())
adverb_of_degree_words1 = []
adverb_of_degree1 = open("f:\\2倍.txt","r").readlines()
for i in adverb_of_degree1:
adverb_of_degree_words1.append(i.strip())
adverb_of_degree_words2 = []
adverb_of_degree2 = open("f:\\1.5倍.txt","r").readlines()
for i in adverb_of_degree2:婴儿多大可以坐飞机
adverb_of_degree_words2.append(i.strip())
adverb_of_degree_words3 = []
笔记本加固态adverb_of_degree3 = open("f:\\1.25倍.txt","r").readlines()
for i in adverb_of_degree3:
adverb_of_degree_words3.append(i.strip())
adverb_of_degree_words4 = []
adverb_of_degree4 = open("f:\\1.2倍.txt","r").readlines()
for i in adverb_of_degree4:
adverb_of_degree_words4.append(i.strip())
adverb_of_degree_words4.append(i.strip())
adverb_of_degree_words5 = []
adverb_of_degree5 = open("f:\\0.8倍.txt","r").readlines()
for i in adverb_of_degree5:
adverb_of_degree_words5.append(i.strip())
adverb_of_degree_words6 = []
adverb_of_degree6 = open("f:\\0.5倍.txt","r").readlines()
for i in adverb_of_degree6:
adverb_of_degree_words6.append(i.strip())
z = 0
data = []
for k,v in enumerate(dict_data):
w = 0
if v in positive_words:  #为正⾯情感词
w += 1
for i in range(z, int(k)):
if dict_data[i] in privative_words:
for j in range(z, i):  #程度词+否定词+情感词
if dict_data[j] in adverb_of_degree_words6 or dict_data[j] in adverb_of_degree_words5 or \
dict_data[j] in adverb_of_degree_words4 or dict_data[j] in adverb_of_degree_words3 or \                                dict_data[j] in adverb_of_degree_words2 or dict_data[j] in adverb_of_degree_words1:
w = w * (-1) * 2
break
for j in range(i, int(k)):  #否定词+程度词+情感词
if dict_data[j] in adverb_of_degree_words6 or dict_data[j] in adverb_of_degree_words5 or \
dict_data[j] in adverb_of_degree_words4 or dict_data[j] in adverb_of_degree_words3 or \                                dict_data[j] in adverb_of_degree_words2 or dict_data[j] in adverb_of_degree_words1:
w = w * 0.5
break
elif dict_data[i] in adverb_of_degree_words1:
w =w * 2
elif dict_data[i] in adverb_of_degree_words2:
w =w * 1.5
elif dict_data[i] in adverb_of_degree_words3:
w =w * 1.25
班主任寄语简短有内涵elif dict_data[i] in adverb_of_degree_words4:
w =w * 1.2
elif dict_data[i] in adverb_of_degree_words5:
w =w * 0.8
elif dict_data[i] in adverb_of_degree_words6:
w =w * 0.5
z = int(k) + 1
if v in negative_words:  #为负⾯情感词
w -= 1
for i in range(z, int(k)):
if dict_data[i] in privative_words:定时关机设置
for j in range(z, i):    #程度词+否定词+情感词
if dict_data[j] in adverb_of_degree_words6 or dict_data[j] in adverb_of_degree_words5 or \
dict_data[j] in adverb_of_degree_words4 or dict_data[j] in adverb_of_degree_words3 or \                                dict_data[j] in adverb_of_degree_words2 or dict_data[j] in adverb_of_degree_words1:
w = w * (-1)*2
break
for j in range(i,int(k)):    #否定词+程度词+情感词
if dict_data[j] in adverb_of_degree_words6 or dict_data[j] in adverb_of_degree_words5 or \
dict_data[j] in adverb_of_degree_words4 or dict_data[j] in adverb_of_degree_words3 or \                                dict_data[j] in adverb_of_degree_words2 or dict_data[j] in adverb_of_degree_words1:
w = w*0.5
break
if dict_data[i] in adverb_of_degree_words1:
w *= 2
elif dict_data[i] in adverb_of_degree_words2:
w *= 1.5
elif dict_data[i] in adverb_of_degree_words3:
elif dict_data[i] in adverb_of_degree_words3:                    w *= 1.25
elif dict_data[i] in adverb_of_degree_words4:                    w *= 1.2
elif dict_data[i] in adverb_of_degree_words5:                    w *= 0.8
elif dict_data[i] in adverb_of_degree_words6:                    w *= 0.5
z = int(k)+1
data.append(w)
return data

本文发布于:2023-06-15 09:37:52,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1039430.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:情感   分析   词典   程度   词语
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图