五、 数据分析
=======
评论数据情感倾向分析
匹配情感词
- 情感倾向也称为情感极性。在某商品评论中,可以理解为用户对该商品表达自身观点所持的态度是支持、反对还是中立,即通常所指的正面情感、负面情感、中性情感。对评论情感倾向进行分析首先要对情感词进行匹配,使用知网发布的“情感分析用词语集 ( beta版)"中的“中文正面评价”词表、“中文负面评价”“中文正面情感”“中文负面情感”词表等。将“中文正面评价”“中文正面情感”两个词表合并,并给每个词语赋予初始权重1,作为正面评论情感词表。将“中文负面评价”“中文负面情感”两个词表合并,并给每个词语赋予初始权重-1,作为负面评论情感词表。
- 读入正负面评论情感词表,正面词语赋予初始权重1,负面词语赋予初始权重-1,使用merge函数按照词语情感词表与分词结果进行匹配。
import pandas as pd
import numpy as np
word = pd.read_csv(“…/tmp/result.csv”)
读入正面、负面情感评价词
pos_comment = pd.read_csv(“…/data/正面评价词语(中文).txt”, header=None,sep=“\n”,
encoding = ‘utf-8’, engine=‘python’)
neg_comment = pd.read_csv(“…/data/负面评价词语(中文).txt”, header=None,sep=“\n”,
encoding = ‘utf-8’, engine=‘python’)
pos_emotion = pd.read_csv(“…/data/正面情感词语(中文).txt”, header=None,sep=“\n”,
encoding = ‘utf-8’, engine=‘python’)
neg_emotion = pd.read_csv(“…/data/负面情感词语(中文).txt”, header=None,sep=“\n”,
encoding = ‘utf-8’, engine=‘python’)
合并情感词与评价词
positive = set(pos_comment.iloc[:,0])|set(pos_emotion.iloc[:,0])
negative = set(neg_comment.iloc[:,0])|set(neg_emotion.iloc[:,0])
intersection = positive&negative # 正负面情感词表中相同的词语
positive = list(positive - intersection)
negative = list(negative - intersection)
positive = pd.DataFrame({“word”:positive,
“weight”:[1]*len(positive)})
negative = pd.DataFrame({“word”:negative,
“weight”:[-1]*len(negative)})
posneg = positive.append(negative)
将分词结果与正负面情感词表合并,定位情感词
data_posneg = posneg.merge(word, left_on = ‘word’, right_on = ‘word’,
how = ‘right’)
data_posneg = data_posneg.sort_values(by = [‘index_content’,‘index_word’])
修正情感倾向
- 情感倾向修正主要根据情感词前面两个位置的词语是否存在否定词而去判断情感值的正确与否,由于汉语中存在多重否定现象,即当否定词出现奇数次时,表示否定意思;当否定词出现偶数次时,表示肯定意思。按照汉语习惯,搜索每个情感词前两个词语,若出现奇数否定词,则调整为相反的情感极性。
根据情感词前时候有否定词或双层否定词对情感值进行修正
载入否定词表
notdict = pd.read_csv(“…/data/not.csv”)
处理否定修饰词
data_posneg[‘amend_weight’] = data_posneg[‘weight’] # 构造新列,作为经过否定词修正后的情感值
data_posneg[‘id’] = np.arange(0, len(data_posneg))
only_inclination = data_posneg.dropna() # 只保留有情感值的词语
only_inclination.index = np.arange(0, len(only_inclination))
index = only_inclination[‘id’]
for i in np.arange(0, len(only_inclination)):
review = data_posneg[data_posneg[‘index_content’] ==
only_inclination[‘index_content’][i]] # 提取第i个情感词所在的评论
更新只保留情感值的数据
only_inclination = only_inclination.dropna()
计算每条评论的情感值
emotional_value = only_inclination.groupby([‘index_content’],
as_index=False)[‘amend_weight’].sum()
去除情感值为0的评论
emotional_value = emotional_value[emotional_value[‘amend_weight’] != 0]
使用wordcloud包下的 WordCloud 函数分别对正面评论和负面评论绘制词云,以查看情感分析效果。
给情感值大于0的赋予评论类型(content_type)为pos,小于0的为neg
emotional_value[‘a_type’] = ‘’
emotional_value[‘a_type’][emotional_value[‘a
版权归原作者 编程彪炳 所有, 如有侵权,请联系我们删除。