开发者

Python基于jieba分词实现snownlp情感分析

开发者 https://www.devze.com 2023-01-31 09:20 出处:网络 作者: Sir 老王
情感分析(sentiment analysis)是2018年公布的计算机科学技术名词。 它可以根据文本内容判断出所代表的含义是积极的还是负面的,也可以用来分析文本中的意思是褒义还是upFbaJu贬义。

情感分析(sentiment analysis)是2018年公布的计算机科学技术名词。

它可以根据文本内容判断出所代表的含义是积极的还是负面的,也可以用来分析文本中的意思是褒义还是upFbaJu贬义。

一般应用场编程客栈景就是能用来做电商的大量评论数据的分析,比如好评率或者差评率的统计等等。

我们这里使用到的情感分析的模块是snownlp,为了提高情感分析的准确度选择加入了jieba模块的分词处理。

由于以上的两个python模块都是非标准库,因此我们可以使用pip的方式进行安装。

pipinstalljieba

pipinstallsnownlp

jieba是一个强大的中文分词处理库,能够满足大多数的中文分词处理,协助snownlp的情感分析。

#Importingthejiebamoduleandrenamingittoja.
importjiebaasja
fromsnownlpimportSnowNLP

#Importingthesnownlpmoduleandrenamingittonlp.

为了避免大家使用过程中出现的版本冲突问题,这里将python的内核版本展示出来。

python解释器版本:3.6.8

接下来首先创建一组需要进行情感分的数据源,最后直接分析出该文本代表的是一个积极情绪还是消极情绪。

#Creatingavariablecalledanalysis_textandassigningitthevalueofastring.
analysis_text='这个实在是太好用了,我非常的喜欢,下次一定还会购买的!'

定义好了需要分析的数据来源语句,然后就是分词处理了。这里说明一下为什么需要分词处理,是因为snownlp这个情感分析模块它的中文分词结果不太标准。

比如说,'不好看',这个词如果使用snownlp来直接分http://www.devze.com词的话大概率的就会分为'不'和'好看'这两个词。

这样的明明是一个带有负面情绪的中文词汇可能就直接被定义为正面情绪了,这也就是为什么这里需要先使用jieba进行分词处理了。

#Usingthejiebamoduletocuttheanalysis_textintoalistofwords.
analysis_list=list(ja.cut(analysis_text))

#Printingthelistofwordsthatwerecutfromtheanalysis_text.
print(analysis_list)

#['这个', '实在', '是', '太', '好', '用', '了', ',', '我', '非常', '的', '喜欢', ',', '下次', '一定', '还会', '购买', '的', '!']

根据上面分词以后的结果来看,分词的粒度还是比较细致的,每个词都是最多两个字符串的长度。

使用jieba提供的cut()函数,关键词已经分割完成了,接着就是提取主要的关键字。

一般情况下我们做情感分析都会提取形容词类型的关键字,因为形容词能够代表该文本所表现出来的情绪。

#Importingthe`posseg`modulefromthe`jieba`moduleandrenamingitto`seg`.
importjieba.possegasseg

#Thisisalistcomprehensionthatiscreatingalistoftuples.Eachtuplecontainsthewordandtheflag.
analysis_words=[(word.word,word.flag)forwordinseg.cut(analysis_text)]

#Printingthelistoftuplesthatwerecreatedinthelistcomprehension.
print(analysis_words)

#[('这个', 'r'), ('实在', 'v'), ('是', 'v'), ('太', 'd'), ('好用', 'v'), ('了', 'ul'), (',', 'x'), ('我', 'r'), ('非常', 'd'), ('的', 'uj'), ('喜欢', 'v'), (',', 'x'), ('下次', 't'), ('一定', 'd'), ('还', 'd'), ('会', 'v'), ('购买', 'v'), ('的', 'uj'), ('!', 'x')]

根据上面的python推导式,将分词以后的关键字和该关键自对应的词性提取出来。

下面是一份jieba模块使用过程中对应的词性表,比python如词性标记a代表的就是形容词。

Python基于jieba分词实现snownlp情感分析

#Thisisalistcomprehensionthatiscreatingalistoftuples.Eachtuplecontainsthewordandtheflag.
keywords=[xforxinanalysis_wordsifx[1]in['a','d','v']]

#Printingthelistoftuplesthatwerecreatedinthelistcomprehension.
print(keywords)

#[('实在','v'),('是','v'),('太','d'),('好用','v'),('非常','d'),('喜欢','v'),('一定',http://www.devze.com'd'),('还','d'),('会','v'),('购买','v')]

根据关键词的标签提取出关键字以后,这个时候可以将情感标记去除只保留关键字就可以了。

#Thisisalistcomprehensionthatiscreatingalistofwords.
keywords=[x[0]forxinkeywords]

#Printingthelistofkeywordsthatwerecreatedinthelistcomprehension.
print(keywords)

#['实在','是','太','好用','非常','喜欢','一定','还','会','购买']

到现在为至,分词的工作已经处理完了,接下来就是情感分析直接使用snownlp分析出结果。

#Creatingavariablecalled`pos_num`andassigningitthevalueof0.
pos_num=0

#Creatingavariablecalled`neg_num`andassigningitthevalueof0.
neg_num=0

#Thisisaforloopthatisloopingthrougheachwordinthelistofkeywords.
forwordinkeywords:
#Creatingavariablecalled`sl`andassigningitthevalueofthe`SnowNLP`function.
sl=SnowNLP(word)
#Thisisanifstatementthatischeckingtoseeifthesentimentofthewordisgreaterthan0.5.
ifsl.sentiments>0.5:
#Adding1tothevalueof`pos_num`.
pos_num=pos_num+1
else:
#Adding1tothevalueof`neg_num`.
neg_num=neg_num+1
#Thisisprintingthewordandthesentimentoftheword.
print(word,str(sl.sentiments))

下面就是对原始文本提取关键词以后的每个词的情感分析结果,0-1之间代表情绪越接近于1代表情绪表现的越是积极向上。

#实在0.3047790802524796
#是0.5262327818078083
#太0.34387502381406
#好用0.6558628208940429
#非常0.5262327818078083
#喜欢0.6994590939824207
#一定0.5262327818078083
#还0.5746682977321914
#会0.5539033457249072
#购买0.6502590673575129

为了使得关键词的分析结果更加的符合我们的想法也可以对负面和正面的关键词进行统计得到一个结果。

#Thisisastringthatisusingthe`format`methodtoinsertthevalueof`pos_num`intothestring.
print('正面情绪关键词数量:{}'.format(pos_num))

#Thisisastringthatisusingthe`format`methodtoinsertthevalueof`neg_num`intothestring.
print('负面情绪关键词数量:{}'.format(neg_num))

#Thisisastringthatisusingthe`format`methodtoinsertthevalueof`pos_num`dividedbythevalueof`pos_num`
#plusthevalueof`neg_num`intothestring开发者_开发入门.
print('正面情绪所占比例:{}'.format(pos_num/(pos_num+neg_num)))

#正面情绪关键词数量:8
#负面情绪关键词数量:2
#正面情绪所占比例:0.8

以上就是Python基于jieba分词实现snownlp情感分析的详细内容,更多关于Python snownlp情感分析的资料请关注我们其它相关文章!

0

精彩评论

暂无评论...
验证码 换一张
取 消