商品评论情感分析——基于商品评论建立的产品综合评价模型(1)

1.背景

随着电商行业的迅猛发展,线上销售也成为广大商家销售的一种重要手段。电商产品每天都会产生大量的交易数据和用户评论数据,其中包含很多有价值的信息

因此本文对某平台上微波炉的评论数据进行挖掘分析,建立商品综合评价模型,希望可以提供为商家和平台制定新的营销策略或者产品改善方面提供宝贵意见。

1.1问题分析

我们的目标是建立基于用户评论数据的商品综合评价模型,具体步骤:

  • 为了保证数据的质量,以及之后分析过程的准确度,我们首先对数据进行预处理,包括筛选出无关产品、删除重复评论等;
  • 对商品文本评论进行情感分析,量化情感度,给出情感得分。建立LDA主题模型提取评论的高频词,推测出客户对商品、物流、服务等方面的具体评价;
  • 建立产品评分模型。通过TOPSIS法等方法处理情感得分与星级,并依据它们得出单条评论的最终得分,同时构建时间序列模型,判断产品的声誉在在线市场中的变化趋势,并构造单条评论可信度系数1,最后给出加权后的各品牌口碑得分

2.数据预处理

在进行中文分词之前,必须要考虑到评论中存在很多没有实际价值的条目,如果把这些无用的评论数据也引入后续的分析工作中,一定会对分析造成很大的偏差,所以要对评论数据进行预处理,把大量的没有价值的评论删掉,我们进行的文本预处理主要包括删除无关数据文本去重

2.1删除无关数据

数据预处理还要考虑到数据的准确性,部分数据并非该商品的评论,因此我们删去商品标题中没有“微波炉”的评论,此步骤利用excel操作即可:
数据——筛选——文本筛选——不包含“微波炉”
找到12个非微波炉的评论数据

2.2文本去重

#导入数据
>>> import pandas as pd
>>> inputfile='C:/Users/Linda Leung/Downloads/Problem_C_Data/Problem_C_Data/micro.csv'
>>> data=pd.read_csv(inputfile,encoding='utf-8',header=None)
>>> data.head()

在这里插入图片描述

去除一些自动好评的数据,重复的评论等没有价值的数据。大多数文本去重是基于文本之间的相似度,包括编辑距离去重,simahash算法去重等,这些会使得我们去除一些相近的表达,造成错删。故本文采用比较删除法,直接删除完全相同的评论,尽量保留有用的评论。

>>> outputfile='C:/Users/Linda Leung/Downloads/Problem_C_Data/Problem_C_Data/micro_process1.txt'
>>> data_unique = pd.DataFrame(data[0].unique())
>>> l2=len(data_unique)
>>> data_unique.to_csv(outputfile,index=False,header=False,encoding='utf-8')
>>> print(u'共%s条评论,删除了%s条评论。' %(l1,l1 - l2))

共1603条评论,删除了13条评论。

3.情感分析

我们采用Python中的TextBlob2对评论文本进行情感分析,获得情感得分。情感得分越接近-1说明越消极,越接近1越积极。
我们假设情感得分等于x, 若x<-0.5,则情感判定为消极;x>0.5,则情感判定为积极; -0.5<x<0.5,则情感判定为中立。

最终将评论文本分成了积极情绪的评论文本、中性评论文本和消极情绪的评论文本。

inputfile='C:/Users/Linda Leung/Downloads/Problem_C_Data/Problem_C_Data/micro_process1.txt'
data2=pd.read_csv(inputfile,encoding='utf-8')#刚刚输出的data_process1设置了header=None,所以现在重新导入一下
def function(x):
    testimonial = TextBlob(x)
    testimonial.sentiment
    a=testimonial.sentiment.polarity#sentiment.polarity方法会返回0到1的数字,越接近-1说明越消极,接近1越积极
    if a<-0.5:
        return '消极'
    elif a>0.5:
        return '积极'
    else:
        return '中立'
data2['laber']=data2.apply(lambda x: function(x['review_body']),axis=1)
data2.head()

评论已经分为积极、中立和消极情绪

鉴于中立评论数量大,喜爱倾向度低,本文将对积极评论数据及消极评论数据进行提取及分析。

#分别提取积极和消极评论
>>> data2_neg=data2[[u'review_body']][data2[u'laber']==u'消极']
>>> data2_pos=data2[[u'review_body']][data2[u'laber']==u'积极']
>>> data2_neg.head()
>>> outputfile1='C:/Users/Linda Leung/Downloads/Problem_C_Data/Problem_C_Data/micro_pos.txt'
>>> outputfile2='C:/Users/Linda Leung/Downloads/Problem_C_Data/Problem_C_Data/micro_neg.txt'
>>>> data2_pos.to_csv(outputfile1,index=False,header=False,encoding='utf-8')
>>> data2_neg.to_csv(outputfile2,index=False,header=False,encoding='utf-8')

可以看出情感分析的灵敏度还是挺高的,都是“horrible”“terrible”这类词。

4.LDA主题模型

在对评论数据进行了情感倾向性判断后,对评论数据已经有了一个初步的感知。LDA模型采用的是词袋模型,将每一篇文档视为一个词频向量,从而将文本信息转化为易于建模的数字信息。本文将积极情绪和消极情绪的评论文本放入LDA主题模型中,并从主题模型中提取高频特征词。

4.1评论文本分词

#好像还是因为header=None的原因,具体为啥我也没搞清楚,反正还是要重新导入数据。
>>> inputfile='C:/Users/Linda Leung/Downloads/Problem_C_Data/Problem_C_Data/micro_neg.txt'
>>> inputfile1='C:/Users/Linda Leung/Downloads/Problem_C_Data/Problem_C_Data/micro_pos.txt'
>>> data_pos_cut=pd.read_csv(inputfile1, encoding = 'utf-8', header = None)
>>> data_neg_cut=pd.read_csv(inputfile, encoding = 'utf-8', header = None)
>>> data3=data_pos_cut[0].apply(mycut)

可以看出已经是进行分词了的

4.2去除停用词

停用词是指没有什么实际意义,对于整句的句意表达没有影响的词,通常是一些高频词汇、数字和特殊符号,如‘the、is、of、to’等。我们需要在预处理阶段就将停用词进行删除操作。

#同样先导入数据
>>> outputfile3='C:/Users/Linda Leung/Downloads/Problem_C_Data/Problem_C_Data/micro_cut.txt'
>>> outputfile4='C:/Users/Linda Leung/Downloads/Problem_C_Data/Problem_C_Data/micro_neg_cut.txt'
>>> data3.to_csv(outputfile3, index = False, header = False, encoding = 'utf-8')
>>> data4.to_csv(outputfile4, index = False, header = False, encoding = 'utf-8')
>>> pos=pd.read_csv(outputfile3,encoding = 'utf-8', header = None)
>>> neg=pd.read_csv(outputfile4,encoding='utf-8',header=None)
#停用词表是在网上找的,根据自身数据的特点可以自行加一些如标题符号等。
>>> stoplist='C:/Users/Linda Leung/Downloads/Problem_C_Data/Problem_C_Data/stoplist.txt'
>>> stop = pd.read_csv(stoplist, encoding = 'utf-8', header = None, sep = 'tipdm')
>>> stop = [' ', ''] + list(stop[0])
>>> pos[1]=pos[0].apply(lambda s: s.split(' '))
>>> pos[2] = pos[1].apply(lambda x: [i for i in x if i not in stop])
>>> neg[1] = neg[0].apply(lambda s: s.split(' '))
>>> neg[2] = neg[1].apply(lambda x: [i for i in x if i not in stop])

4.3主题模型分析

>>> from gensim import corpora, models#还没安装gensim的要先安装

#负面主题分析
>>> neg_dict = corpora.Dictionary(neg[2]) 
>>> neg_corpus = [neg_dict.doc2bow(i) for i in neg[2]] 
>>> neg_lda = models.LdaModel(neg_corpus, num_topics = 3, id2word = neg_dict) 
 #正面主题分析
>>> pos_dict = corpora.Dictionary(pos[2])
>>> pos_corpus = [pos_dict.doc2bow(i) for i in pos[2]]
>>> pos_lda = models.LdaModel(pos_corpus, num_topics = 3, id2word = pos_dict)

>>> pos_lda.show_topics()

可以看到还是有很多没有价值的词或分词时错误分开的字母,但因为足够分析,我便没有补充停用词表再分析一次。为了保证数据能充分利用,应该补充停用词表进行重复分析2~3次,观察结果满意再做下面的分析。

这个网页制作的词云美观又直接,推荐给大家

https://wordart.com/

在这里插入图片描述

情感 高频特征词
积极 works、perfectly、kitchen、quality、price、easy、heating、food、size、fits、space、heats、beautifu、recommend、good
消极 horrible、refund、terrible、crap、turntable、door、cheaply、stop、install

4.4结论分析

根据积极高频特征词的提取,反映了获得好评的微波炉具有的特点:

(a) 操作步骤简单,
(b) 能够高效地加热食物,
© 尺寸大小适中,放在厨房中很合适。
(d) 价格实惠,值得购买,
(e) 性能质量良好。

根据消极高频特征词的提取,反映了获得差评的微波炉具有的特点:

(a) 微波炉门打开的时候有噪音
(b) 材料看上去廉价
© 转盘容易出现问题
(d) 使用时间不长
(e) 安装完成困难

根据对上述产品的分析,我们可以看出商品吸引客户的特征不尽相同。除了客户对产品有着对质量的追求之外,微波炉的尺寸型号和操作方法是客户所在意的特征。
除此之外,线上商品的售后服务也是值得关注的地方。物流服务需要及时到位,长时间的等待会让客户失去耐心。退换政策的设定是很有必要的,电商公司对于有瑕疵的产品要妥善处理,给予客户一个良好的消费体验。

5后记

在学校统计软件用的比较多的R语言,python是新学期才开始上,但看老师的样子,应该又是打算划水,学不到什么。经过这次我发现最好的自学办法,应该是自己实操一次,遇到bug是再正常不过的事情,想办法解决了会很有成就感,本文也是翻查各种资料综合大家的智慧,感慨自己需要学习的空间还是非常大的。

本文参考链接1:https://www.docin.com/p-2287434323.html
本文参考链接2:https://blog.csdn.net/weixin_44015907/article/details/97972429
本文参考链接3:https://blog.csdn.net/qq_39309652/article/details/103448409?ops_request_misc=%7B%22request%5Fid%22%3A%22158345880119724847014850%22%2C%22scm%22%3A%2220140713.130056874…%22%7D&request_id=158345880119724847014850&biz_id=0&utm_source=distribute.pc_search_result.none-task


  1. 可信度系数根据评价用户的级别及用户是否优惠购买的数据给出。 ↩︎

  2. TextBlob是一个用Python编写的开源的文本处理库,它可以用来执行很多自然语言处理的任务,比如,词性标注、名词性成分提取、情感分析、文本翻译等等。 ↩︎

发布了5 篇原创文章 · 获赞 9 · 访问量 211

猜你喜欢

转载自blog.csdn.net/Carmen__Leung/article/details/105090457