前言
文本情感倾向性分析(也称为意见挖掘)是指识别和提取原素材中的主观信息,并对带有感情色彩的文本进行分析处理和归纳推理的过程。主要用于实时社交媒体的内容,如微博评论等。而BosonNLP情感词典是从微博、新闻、论坛等数据来源的上百万篇情感标注数据当中自动构建的情感极性词典。因为标注包括微博等网络社交媒体平台的数据,该词典囊括了很多网络用语及非正式简称,对非规范文本也有较高的覆盖率。本文主要基于BosonNLP情感词典,同时使用程度副词词典和否定词词典(借助《知网》情感分析用词语集等文本构建)和哈工大停用词表,共同通过情感打分的方式进行(这里以前文《利用Python系统性爬取微博评论》https://blog.csdn.net/kutalx/article/details/115242052)中获取的评论数据为依托)的情感倾向性分析。提示:代码实现部分参考了文章Python做文本情感分析之情感极性分析的内容,并在其基础上进行了优化,以适配个人需求。
一、模型构建
1.归类
采用的手段为遍历匹配相应的词性词典并对每条评论建立对应的位置词典。分词后文本内的所有词语彼此独立,故对于每一条评论,将其内部的每一个词分别归类于“情感词”、“否定词”、“程度词”和“其它词”四类中。具体步骤为先读取情感词典、否定词词典和程度副词词典,转化为“词语-分值”映射关系;再读取一条分词后评论,新建三个位置词典,内含“位置-分值”映射关系,依次对每个词进行分类,将每个词的位置录入对应的位置词典中。
2.判定
采用的手段为遍历每条评论的位置信息,输出情感分数。一条评论的初始分数为0;按位置遍历内部词语,若一个词被判定为“情感词”,则按照情感位置词典读取分数;若两个“情感词”之间有词语被判定为“否定词”或“程度词”,则按照否定位置词典或程度位置词典读取分数(“否定词”实则皆为-1),将之与后一个“情感词”分数相乘;最后将一条评论的所有情感词分数相加,得其总分数。算式如下:
S w = ( − 1 ) N n ∗ ∑ i = 1 N d D s ∗ S o S_w=(-1)^{N_n}*\sum_{i=1}^{N_d} D_s*S_o Sw=(−1)Nn∗i=1∑NdDs∗So
S s = ∑ i = 1 N o S o S_s=\sum_{i=1}^{N_o} S_o Ss=i=1∑N