基于情感词典的python情感分析
近期⽼师给我们安排了⼀个⼤作业,要求根据情感词典对微博语料进⾏情感分析。于是在⽹上狂找资料,看相关书籍,终于搞出了这个任务。现在做做笔记,总结⼀下本次的任务,同时也给遇到有同样需求的⼈,提供⼀点帮助。
1、情感分析含义
情感分析指的是对新闻报道、商品评论、电影影评等⽂本信息进⾏观点提取、主题分析、情感挖掘。情感分析常⽤于对某⼀篇新闻报道积极消极分析、淘宝商品评论情感打分、股评情感分析、电影评论情感挖掘。情感分析的内容包括:情感的持有者分析、态度持有者分析、态度类型分析(⼀系列类型如喜欢(like),讨厌(hate),珍视(value),渴望(desire)等;或着简单的加权极性如积极(positive),消极(negative)和中性(neutral)并可⽤具体的权重修饰)、态度的范围分析(包含每句话,某⼀段、或者全⽂)。因此,情感分析的⽬的可以分为:初级:⽂章的整体感情是积极/消极的;进阶:对⽂章的态度从1-5打分;⾼级:检测态度的⽬标,持有者和类型。
总的来说,情感分析就是对⽂本信息进⾏情感倾向挖掘。
2、情感挖掘⽅法
明会典
情感挖掘⽬前主要使⽤的⽅法是使⽤情感词典,对⽂本进⾏情感词匹配,汇总情感词进⾏评分,最后得到⽂本的情感倾向。本次我主要使⽤了两种⽅法进⾏情感分析。第⼀种:基于BosonNLP情感词典。该情感词典是由波森⾃然语⾔处理公司推出的⼀款已经做好标注的情感词典。词典中对每个情感词进⾏情感值评分,bosanNLP情感词典如下图所⽰:
第⼆种,采⽤的是知⽹推出的情感词典,以及极性表进⾏情感分析。知⽹提供的情感词典共⽤12个⽂
件,分为英⽂和中⽂。其中中⽂情感词典包括:评价、情感、主张、程度(正⾯、负⾯)的情感⽂本。本⽂将评价和情感词整合作为情感词典使⽤,程度词表中含有的程度词,按照等级区分,分为:most(最⾼)-very(很、⾮常)-more(更多、更)-ish(稍、⼀点点)-insufficiently(⽋、不)-over(过多、多分、多)六个情感程度词典。
3、原理介绍
3.1 基于BosonNLP情感分析原理
基于BosonNLP情感词典的情感分析较为简单。⾸先,需要对⽂本进⾏分句、分词,本⽂选择的分词⼯具为哈⼯⼤的pyltp。其次,将分词好的列表数据对应BosonNLp词典进⾏逐个匹配,并记录匹配到的情感词分值。最后,统计计算分值总和,如果分值⼤于0,表⽰情感倾向为积极的;如果⼩于0,则表⽰情感倾向为消极的。原理框图如下:
3.2 基于BosonNLP情感分析代码:
# -*- coding:utf-8 -*-
import pandas as pd
import jieba
#基于波森情感词典计算情感值
def getscore(text):
df = pd.read_table(r"BosonNLP_dict\BosonNLP_", p=" ", names=[‘key’, ‘score’]) key = df[‘key’].list()
score = df[‘score’].list()
# jieba分词
gs = jieba.lcut(text,cut_all = Fal) #返回list足球后卫
# 计算得分
score_list = [score[key.index(x)] for x in gs if(x in key)]
return sum(score_list)
#读取⽂件
def read_txt(filename):
with open(filename,‘r’,encoding=‘utf-8’)as f:
txt = f.read()
return txt
#写⼊⽂件
def write_data(filename,data):
with open(filename,‘a’,encoding=‘utf-8’)as f:
f.write(data)
if name==‘main’:
text = read_txt(‘test_data\微博.txt’)
lists = text.split(’\n’)
恩施市属于哪个市
</span><span >#</span><span > al_nti = ['⽆','积极','消极','消极','中性','消极','积极','消极','积极','积极','积极',</span>
<span >#</span><span > '⽆','积极','积极','中性','积极','消极','积极','消极','积极','消极','积极',</span>
<span >#</span><span > '⽆','中性','消极','中性','消极','积极','消极','消极','消极','消极','积极'</span>
小根蒜
沈阳婚礼
<span >#</span><span > ]</span>
al_nti = read_txt(r<span >'</span><span >test_data\⼈⼯情感标注.txt</span><span >'</span>).split(<span >'</span><span >\n</span><span >'</span><span >)
i </span>=<span > 0
</span><span >for</span> list <span >in</span><span > lists: </span><span >if</span> list != <span >''</span><span >:
</span><span >#</span><span > print(list)</span>
ntiments = round(getscore(list),2<span >)
电脑网</span><span >#</span><span >情感值为正数,表⽰积极;为负数表⽰消极</span>
<span >print</span><span >(list)
</span><span >print</span>(<span >"</span><span >情感值:</span><span >"</span><span >,ntiments)
</span><span >print</span>(<span >'</span><span >⼈⼯标注情感倾向:</span><span >'</span>+<span >al_nti[i])
美发</span><span >if</span> ntiments ><span > 0:
</span><span >print</span>(<span >"</span><span >机器标注情感倾向:积极\n</span><span >"</span><span >)
s </span>= <span >"</span><span >机器判断情感倾向:积极\n</span><span >"</span>
<span >el</span><span >:
</span><span >print</span>(<span >'</span><span >机器标注情感倾向:消极\n</span><span >'</span><span >)
s </span>= <span >"</span><span >机器判断情感倾向:消极</span><span >"</span>+<span >'</span><span >\n</span><span >'</span><span >
ntiment </span>= <span >'</span><span >情感值:</span><span >'</span>+str(ntiments)+<span >'</span><span >\n</span><span >'</span><span >
al_ntiment</span>= <span >'</span><span >⼈⼯标注情感倾向:</span><span >'</span>+al_nti[i]+<span >'</span><span >\n</span><span style ="color: rgba(128, 0, 0, 1)">'</span>
<span >#</span><span >⽂件写⼊</span>
filename = <span >'</span><span >result_data\BosonNLP情感分析结果.txt</span><spa n >'</span><span >
write_data(filename,</span><span >'</span><span >情感分析⽂本:</span><span styl e="color: rgba(128, 0, 0, 1)">'</span><span >)
write_data(filename,list</span>+<span >'</span><span >\n</span><span >'</span>) <span >#</span><span >写⼊待处理⽂本</span>
write_data(filename,ntiment) <span >#</span><span >写⼊情感值</span>
write_data(filename,al_ntiment) <span >#</span><span >写⼊机器判断情感倾向</sp an>
write_data(filename,s+<span >'</span><span >\n</span><span >'</span>) <span >#</span><span >写⼊⼈⼯标注情感</span>
i = i+1</pre>
相关⽂件:
输出结果:
3.3 基于知⽹情感词典的情感挖掘原理
基于知⽹情感词典的情感分析原理分为以下⼏步:
1、⾸先,需要对⽂本分句,分句,得到分词分句后的⽂本语料,并将结果与哈⼯⼤的停⽤词表⽐对,去除停⽤词;
2、其次,对每⼀句话进⾏情感分析,分析的⽅法主要为:判断这段话中的情感词数⽬,含有积极词,则积极词数⽬加1,含有消极词,则消极词数⽬加1。并且再统计的过程中还需要判断该情感词前
⾯是否存在程度副词,如果存在,则需要根据程度副词的种类赋予不同的权重,乘以情感词数。如果句尾存在?!等符号,则情感词数⽬增加⼀定值,因为!与?这类的标点往往表⽰情感情绪的加强,因此需要进⾏⼀定处理。
草书对照表3、接着统计计算整段话的情感值(积极词值-消极词值),得到该段⽂本的情感倾向。
4、最后,统计每⼀段的情感值,相加得到⽂章的情感值。
整体流程框图如下:
3.4 基于知⽹情感词典的情感分析代码:
import pyltp
from pyltp import Segmentor
from pyltp import SentenceSplitter
from pyltp import Postagger
import numpy as np