细粒度情感分析
说细粒度情感分析,先说传统的情感分析(即粗粒度分析)。
粗粒度情感分析只是简单的积极或消极情感的划分,并计算出情感的强度。但是情绪更细的维度层次,应该还可以对正负情绪进行划分。比如,积极情绪的期待、喜悦,负面情绪的愤怒、悲伤、害怕等,分析单位更小更精准。
senticnet库
Sentic API基于SenticNet4词典,可以对词语进行文本分析,得出每个词的语义和情感。这个库很有特点,
优点在于可以进行细粒度情感分析,这一点很多库是做不到的。
缺点是只是对每个词语进行分析,还无法做到句子层面的情感分析。
但是以这个库为基础,我们还是可以做很多事情的。
能对多少语言进行处理呢?
语言
语言代码
Arabic
ar
Bosnian
ba
Bulgarian
bg
Catalan
ca
Chinese
cn
Croatian
hr
Czech
cz
Danish
dk
Dutch
nl
English
en
Estonian
ee
Finnish
fi
French
fr
German
de
Greek
gr
Haitian
ht
Hebrew
he
Hindi
hi
Hmong
hm
Hungarian
hu
Indonesian
id
Italian
it
Japanese
jp
Korean
kr
Latvian
lv
Lithuanian
lt
Malay
my
Maltese
mt
Portuguese
pt
Romanian
ro
Russian
ru
Serbian
rs
Singlish
sg
Slovak
sk
Slovenian
si
Spanish
es
Thai
th
Turkish
tr
Ukrainian
ua
Urdu
ur
一、官方示例
from senticnet.senticnet import Senticnet
#初始化Senticnet,参数为英文。中文'cn'sn = Senticnet('en')concept_info = sn.concept('love')print(concept_info)
返回的是字典
{'polarity_value': 'positive',
'polarity_intense': '0.655',
'moodtags': ['#joy', '#admiration'],'sentics': {'pleasantness': '0.703',
'attention': '-0.60',
'sensitivity': '0',
'aptitude': '0.654'},'semantics': ['emotion',
'conditioned_emotional_response',
'conditioned_emotion',
'fright',
'reverence']}
参数
参数含义
polarity_value
积极或消极情绪
polarity_intense
情绪极性(强度)
moodtags
情绪标签
sentics
细粒度情感分析
semantics
语义
还可以这样对每个参数单独调用
from senticnet.senticnet import Senticnet
sn = Senticnet('en')polarity_value = sn.polarity_value('love')polarity_intense = sn.polarity_intense('love')moodtags = sn.moodtags('love')semantics = sn.semantics('love')sentics = sn.sentics('love')
二、中文的使用
from senticnet.senticnet import Senticnet
sn = Senticnet('cn')concept_info = sn.concept('难过')print(concept_info)
返回
{'polarity_value': -0.333,
'polarity_intense': '难受',
'moodtags': ['#难过', '#难过'],'sentics': {'pleasantness': -1,
'attention': 0,
'sensitivity': 0,
'aptitude': 0},
'semantics': ['悲伤', '痛苦', '悲痛欲绝', '流泪']}
三、使用注意
3.1 词典不全面
不过奇葩的是
from senticnet.senticnet import Senticnet
sn = Senticnet('cn')concept_info = sn.concept('好的')print(concept_info)
居然返回
Traceback (most recent call last):
File "/Users/suosuo/Desktop/句子情感分析函数.py", line 40, in
concept_info = sn.concept('好的')
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/senticnet/senticnet.py", line 20, in concept
result["polarity_value"] = self.polarity_value(concept)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/senticnet/senticnet.py", line 56, in polarity_value
concept_info = self.data[concept]KeyError: '好的'
说明senticnet词典并不全面,随便输入了个词语就这样保存。英文也是这样,也就说词典只是对某些情感词进行了收录,但还不全面。
3.2 词典不准确
我随便试了试,一个中文“非常”、英文“very”,返回的数据超出了我的认知。
from senticnet.senticnet import Senticnet
sn = Senticnet('cn')concept_info = sn.concept('非常')print(concept_info)
居然返回这个
{'polarity_value': 0.03,
'polarity_intense': '意大利餐厅',
'moodtags': ['#快乐', '#有趣'],'sentics': {'pleasantness': 0.068,
'attention': 0.066,
'sensitivity': 0.011,
'aptitude': -0.034},
'semantics': ['吃披萨', '披萨店', '在餐馆吃饭', '餐馆']}
说明senticnet词典中并不准确全面,需要使用的同学要合理衡量,设置一些规则才能避免掉坑。
四、对句子进行情感分析
现在nltk库的语料数据下载不了,导致无法使用nltk进行分词和词干化,这里就以空格为标志对英文句子进行分词,测度其情感。
这里我要计算整个句子的情感,返回句子的词语数、正面词语数、负面词语数、正面得分、负面得分。
from senticnet.senticnet import Senticnet
def input_sentence(sentence):
positive_score = 0
positive_word_num = 0
negative_score = 0
negative_word_num = 0
sn = Senticnet()
wordlist = sentence.split(' ')
word_num = len(wordlist)
for word in wordlist: #防止有的词不存在于senticnet词典,导致程序报错!
try:
concept_info = sn.concept(word)
polarity_value = concept_info['polarity_value']
polarity_intense = concept_info['polarity_intense']
if polarity_value == 'positive':
positive_score+=float(polarity_intense)
positive_word_num+=1
else:
negative_score+=float(polarity_intense)
negative_word_num+=1
except:
continue
return {'word_num': word_num,
'positive_word_num': positive_word_num,
'positive_score': positive_score,
'negative_word_num': negative_word_num,
'negative_score': negative_score}print(input_sentence(sentence='Today is happy day'))
返回情感
{'word_num': 4,
'positive_word_num': 2,
'positive_score': 1.059,
'negative_word_num': 0,
'negative_score': 0}
senticnet文档:/api/
如果觉得《python细粒度情感分析_用SenticNet库做细粒度情感分析》对你有帮助,请点赞、收藏,并留下你的观点哦!