赞
踩
五、 数据分析
=======
评论数据情感倾向分析
情感倾向也称为情感极性。在某商品评论中,可以理解为用户对该商品表达自身观点所持的态度是支持、反对还是中立,即通常所指的正面情感、负面情感、中性情感。对评论情感倾向进行分析首先要对情感词进行匹配,使用知网发布的“情感分析用词语集 ( 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()
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。