失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python细粒度情感分析_用SenticNet库做细粒度情感分析

python细粒度情感分析_用SenticNet库做细粒度情感分析

时间:2022-02-07 06:59:22

相关推荐

python细粒度情感分析_用SenticNet库做细粒度情感分析

细粒度情感分析

说细粒度情感分析,先说传统的情感分析(即粗粒度分析)。

粗粒度情感分析只是简单的积极或消极情感的划分,并计算出情感的强度。但是情绪更细的维度层次,应该还可以对正负情绪进行划分。比如,积极情绪的期待、喜悦,负面情绪的愤怒、悲伤、害怕等,分析单位更小更精准。

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库做细粒度情感分析》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。