一、引言
目前中文文本情感分析主要分为三个类型,第一个是由情感词典和句法结构来做的、第二个是根据机器学习来做的(Bayes、SVM等)、第三个是用深度学习的方法来做的(例如LSTM、CNN、LSTM+CNN、BERT+CNN等)。
这三种方法中,第二种和第三种方法都需要人工标注大量的数据,然后做有监督的训练。只有第一种不需要人工标注,也不需要训练。
接下来,我们会介绍下第一种方法的算法逻辑,以及如何实践。
二、情感字典
除了分词词典和停用词词典外,一共还包含9个词典:
1、否定词:not.txt
2、正面情感词:positive.txt
3、负面情感词:negative.txt
4、程度副词:most.txt
very.txt
more.txt
ish.txt
insufficiently.txt
over.txt
inverse.txt
三、算法流程设计算法逻辑Step 1:读取评论数据,对评论进行分句(分句主要以特定的标点符号为主)。
Step 2:将结巴词典和所有情感词典做并集,得出新的分词词典。
Step 3:查找分句的情感词,记录正面还是负面,以及位置。
Step 4:在情感词前查找程度词,找到就停止搜寻。为程度词设权值,乘以情感值。
Step 5:在情感词前查找否定词,找完全部否定词,若数量为奇数,乘以-1,若为偶数, 乘以 1。
Step 6:找出感叹号和问好等重要的标点符合
- 判断分句结尾是否有感叹号,有叹号则往前寻找情感词,有则相应的情感值+2。
- 判断分句结尾是否有问好,有问号该句判断为负面值+2。
Step 7:计算完一条评论所有分句的情感值([正面分值, 负面分值]),用数组(list) 记录起来。
Step 8:计算每条评论中每一个分句的的正面情感均值与负面情感均值,然后比较正面情感总和与负面情感总和,较大的一个即为所得情感倾向。
2. 代码演示
class SentimentAnalysis():
"""Sentiment Analysis with some dictionarys"""
def sentiment_score_list(self,dat