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

  • 1.背景
    • 1.1问题分析
  • 2.数据预处理
    • 2.1删除无关数据
    • 2.2文本去重
  • 3.情感分析
  • 4.LDA主题模型
    • 4.1评论文本分词
    • 4.2去除停用词
    • 4.3主题模型分析
    • 4.4结论分析
  • 5后记

1.背景

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

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

1.1问题分析

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

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

2.数据预处理

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

2.1删除无关数据

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

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.sentimenta=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')

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编写的开源的文本处理库,它可以用来执行很多自然语言处理的任务,比如,词性标注、名词性成分提取、情感分析、文本翻译等等。 ↩︎

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

  1. 用Python做数据商品情感分析(商品评论数据情感分析)

    用Python做数据商品情感分析(商品评论数据情感分析) 现在,我们得到了一些关于XX商品的评论信息的数据,我们需要对这些评论信息的数据进行情感分析: 分析步骤 机械压缩去词 短句过滤 情感分析 分词 ...

  2. 朴素贝叶斯应用案例 —— 商品评论情感分析

    商品评论情感分析 1 案例介绍 2 流程实现 2.1 获取数据集 2.2 数据基本处理 2.3 模型训练 2.4 模型评估 1 案例介绍 本案例提供了一个13条商品评价的小型数据集,通过对商品评价内容 ...

  3. 数据分析案例-基于随机森林算法的商品评价情感分析

    目录 1.挖掘目标 2.分析方法与过程 2.1总体流程 2.2具体步骤 2.3结果分析 3.结论 摘 要:随着我国的信息化发展速度的加快,时代科技技术的进步以及我国联网设施不断完善.不断普及,网民人数 ...

  4. 基于用户评论情感分析详细设计与技术实现

    基于用户评论情感分析详细设计与技术实现 文章目录 基于用户评论情感分析详细设计与技术实现 前言 一.技术架构 二.分析服务器构建 1.1 创建flask项目 1.2 编写数据库连接脚本,获取用户评论数 ...

  5. 情感分析之电影评论分析-基于Tensorflow的LSTM

    1. 深度学习在自然语言处理中的应用 自然语言处理是教会机器如何去处理或者读懂人类语言的系统,目前比较热门的方向,包括如下几类: 对话系统 - 比较著名的案例有:Siri,Alexa 和 Cortan ...

  6. 【自然语言处理(NLP)】基于FNN网络的电影评论情感分析

    [自然语言处理(NLP)]基于FNN网络的电影评论情感分析 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建 ...

  7. 【人工智能毕设之基于Python+flask+bilstm的评论情感分析系统-哔哩哔哩】 https://b23.tv/QU56eTl

    [人工智能毕设之基于Python+flask+bilstm的评论情感分析系统-哔哩哔哩] https://b23.tv/QU56eTl https://b23.tv/QU56eTl

  8. 从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(下)

    基于朴素贝叶斯的电影评论情感分析 用到的包:pandas.jieba(分词工具) file=open(r"review.txt",'r',encoding='utf-8') rev ...

  9. 基于机器学习的上证指数、东方股吧的股市评论情感分析 完整代码数据

    视频讲解:基于机器学习的上证指数.东方股吧的股市评论情感分析 完整代码数_哔哩哔哩_bilibili 所使用模型LinearSVC,LogisticReg,SGD,MultinomialNB,KNN, ...

最新文章

  1. 力扣(LeetCode)刷题,简单+中等题(第31期)
  2. java.lang.NoSuchMethodError: org.junit.runner.Description.getClassName()Ljava/lang/String;
  3. ubuntu卸载nvidia驱动_解决Ubuntu18.04循环登录问题 - 卸载NVIDIA驱动 启用Nouveau(1)
  4. sparksql(1)——Dataframe
  5. Oracle数据库adg数据没同步,Oracle 11g备库无法开启ADG的原因分析
  6. 理解Go Interface
  7. ITextSharp生成PDF
  8. 数据库中,连接有哪些不同类型?请说明这些类型之间的差异,以及为何在某些情形下,某种连接会比较好。...
  9. Lintcode1 A+B Problem solution 题解
  10. 520特辑丨码神VS爱神:盘点程序员的四大男友力,你偏爱哪一种?
  11. dhcp 服务器发出了 dhcpnack 消息,跪求DHCP报文分析
  12. 请写一个java程序实现线程连接池功能_请写一个java程序实现线程连接池功能
  13. Immutable 操作在 React 中的实践
  14. ICPC China Nanchang National Invitational -- D. Match Stick Game(dp)
  15. 如何在CentOS/RedHat下实现根据源码包创建rpm包
  16. mysql存储过程 定时任务
  17. android实现语音聊天功能,为实现Android语音聊天室开发,语音聊天室软件源码该如何搭建...
  18. VGA显示原理、时序标准及相关参数
  19. 如何使用Visual Studio调试Windows Vista侧栏小工具
  20. 《信号与系统》自然/受迫响应、零输入/零状态响应及系统初始状态

热门文章

  1. 【工具-DVWA】DVWA的安装和使用
  2. MySQL之高性能的索引策略(索引优化)
  3. 海行Newlifest M1骨传导耳机开箱,这音质真的碉堡了
  4. 给工具栏按钮添加图标和文字
  5. [WinForm]Windows程序(非网页) #2 -- 跨平台的 ADO.NET程序(简单入门)
  6. 【原创】2009年8月25日老谷项目管理MSN群专题—敏捷生态
  7. 【location】将url参数转换为对象的形式
  8. 618最强攻略揭秘:成为网易考拉的黑卡会员!
  9. SKU组件助您将PowerBI完美嵌入第三方应用系统
  10. 删除桌面上文件,提示此文件位置不在当前位置?