当前位置: 首页 > 后端技术 > Python

电商购物评论情感分析

时间:2023-03-26 01:49:48 Python

随着网购越来越普及,人们对网购的需求也越来越高,这给了京东、淘宝等电商平台巨大的发展机遇。然而,这种需求也带动了更多电商平台的发展,引发了激烈的竞争。在电商平台竞争激烈的背景下,除了提升产品质量、降低产品价格外,电商平台越来越了解消费者的声音。最重要的方法之一是对消费者的文本评论数据进行内部信息的数据挖掘分析。获得这些信息也有利于提高相应商品生产的竞争力。1.数据准备#-*-coding:utf-8-*-importpandasaspdinputfile='huizong.csv'#评论汇总文件outputfile='meidi_jd.txt'#评论提取后保存路径data=pd.read_csv(inputfile,encoding='utf-8')data.head()获取京东平台数据中的所有品牌名称。data['brand'].unique()result:array(['AO','海尔','美的','格兰仕','万和','万家乐'],dtype=object)我们发现这个有6个数据中的品牌,AO、海尔、美的、格兰仕、万和、万家乐。这里我们只分析“美的”品牌的文字评论数据。#这里只提取“美的”品牌的注释importosimportimportlibimportsysimportlib.reload(sys)#默认编码sys.getdefaultencoding()#查看当前编码格式data=data[[u'comment']][data[u'brand']==u'Meide']#将数据保存为csv文件data.to_csv(outputfile,index=False,header=False,encoding='utf-8')outdata_1=pd.read_csv(outputfile,encoding='utf-8',header=None)outdata_1.head()2.数据预处理文本获取后,首先要对文本评论数据进行预处理。文本评论数据中存在大量低价值或无价值内容的条目。如果把这些评论也引入分词、词频统计,甚至情感分析,势必会对分析产生很大影响,得到的结果质量难免会出现问题。然后,在使用这些评论数据之前,必须对这些文本进行预处理,以去除大量此类无价值的评论。2.1文本评论去重文本去重是去除文本评论数据中的重复部分。一些电商平台为了防止部分客户长期留下评论,往往会设置一个程序。如果用户在指定时间后仍未发表评论,系统会自动为客户发表评论,而且这些评论一般都是正面的。但是,这些评论显然没有分析价值,而且这些评论重复性很强,必须删除。outputfile='meidi_jd_process_1.txt'#评论处理后的保存路径l1=len(outdata_1)data_unique=pd.DataFrame(outdata_1[0].unique())l2=len(data_unique)data.to_csv(outputfile,index=False,header=False,encoding='utf-8')print(u'total%scomments,deleted%scomments.'%(l1,l1-l2))Result:总共55400条评论,删除2352条评论。我们使用value_counts函数统计重复评论,可以得到重复评论文本的数量,数量最大的评论文本可能是系统默认评论。series_data=pd.Series(outdata_1[0])fre_data=pd.DataFrame(series_data.value_counts())fre_data.head(20)这里我们只打印出前20行,可以看出“非常满意,五-star”的出现频率最高,一共出现了107次,应该是系统默认的评论。和》填写您使用本产品的感受,长度5-200个字符,例如本产品或某项功能给您带来的帮助,或者您在使用过程中遇到的问题等,最多可输入200个字符》一共出现了75次,是默认评论次数第二多的。这应该是系统提示评论或者用户直接使用系统提示评论。2.2文本评论的分词在中文中,只有词、句、段可以通过明显的定界符轻松划分,而“词”和“词组”的界限模糊,没有正式的定界符。因此,在挖掘中文文本时,首先对文本进行分词,即将连续的词序列按照一定的规范重新组合成词序列的过程。这里我们使用jieba分词器。importjieba#导入结巴分词,需要自己下载安装inputfile'utf-8',header=None)#读取数据data2=pd.read_csv(inputfile2,encoding='utf-8',header=None)mycut=lambdas:''.join(jieba.cut(s))#自定义简单分词函数data1=data1[0].apply(mycut)#以“广播”的形式分词以加快速度。data2=data2[0].apply(mycut)data1.to_csv(outputfile1,index=False,header=False,encoding='utf-8')#保存结果data2.to_csv(outputfile2,index=False,header=False,encoding='utf-8')data1.head()从结果可以看出,好像是,still,battery,no,electricity,waterheater,switch,installation等词,分词效果还是不错的,但也有“admiral”,“不知道”等一些词的分析略有欠缺。综上,可以看出jieba分词器的分词效果还是很不错的,而且大部分都符合中国人的使用习惯。2.3去除停用词停用词(StopWords),字典翻译为“计算机检索中的虚拟词和非检索词”。在SEO中,为了节省存储空间和提高搜索效率,搜索引擎在索引页面或处理搜索请求时会自动忽略某些词或词。这些词或单词称为停用词(stopwords)。在自然语言处理中,停用词一般不携带有价值的信息,我们选择去除这些词。importosimportsyssys.getdefaultencoding()#检查当前编码格式importimportlibimportlib.reload(sys)stoplist='stoplist.txt'neg=pd.read_csv(outputfile1,encoding='utf-8',header=None)#读取数据pos=pd.read_csv(outputfile2,encoding='utf-8',header=None)stop=pd.read_csv(stoplist,encoding='utf-8',header=None,sep='tipdm')#sepsetsplit单词,因为csv默认以逗号作为分隔符,而这个单词恰好在停用词列表中,所以会导致读取错误#所以解决方法是手动设置一个不存在的分隔符,比如tipdm。stop=['','']+list(stop[0])#Pandas自动过滤空格字符,这里手动添加neg[1]=neg[0].apply(lambdas:s.split(''))#定义一个切分函数,然后用apply广播neg[2]=neg[1].apply(lambdax:[iforiinxifinotinstop])#判断是否停词pos[1word按单词]=pos[0].apply(lambdas:s.split(''))pos[2]=pos[1].apply(lambdax:[iforiinxifinotinstop])否定。head()可以看到经过停用词过滤后,前面的“is”、“of”等停用词都被去掉了。[3.LDA模型主题分析主题模型是机器学习和自然语言处理领域中用于发现一系列文档中的抽象主题的统计模型。对于一个文档,如果它有多个主题,这些可以代表不同主题的特定词会重复出现。这时,利用主题模型,就可以找到文本中用词的规则,将具有相似规则的文本链接在一起。在非结构化文本集中查找有用的信息。LDA模型作为主题模型之一,属于无监督生成主题概率模型。#gensim没有安装,可以试试!pipinstallgensimtoinstallfromgensimimportcorpora,models#负面主题分析neg_dict=corpora.Dictionary(neg[2])#构建字典neg_corpus=[neg_dict.doc2bow(i)foriinneg[2]]#构建语料库neg_lda=models.LdaModel(neg_corpus,num_topics=3,id2word=neg_dict)#LDA模型训练#正向主题分析pos_dict=corpora.Dictionary(pos[2])pos_corpus=[pos_dict.doc2bow(i)foriinpos[2]]pos_lda=models.LdaModel(pos_corpus,num_topics=3,id2word=pos_dict)pos_theme=pos_lda.show_topics()#showtopicpos_theme上面展示了三个话题分析的高频度正面评论特征词。接下来,我们将主题词和高频特征词转换成DataFrame格式进行查看。首先,我们使用正则化来提取高频特征词。importre#匹配汉字pattern=re.compile(r'[\u4e00-\u9fa5]+')#主题1的特征词pattern.findall(pos_theme[0][1])然后得到每个主题的特征词并转为DataFrame格式#获取每个主题的特征词pos_key_words=[]foriinrange(3):pos_key_words.append(pattern.findall(pos_theme[i][1]))#转为DataFrame格式pos_key_words=pd.DataFrame(data=pos_key_words,index=['Theme1',"Theme2","Theme3"])pos_key_words可以看出theme1主要是关于热水器的安装和售后服务,而theme2主要是热水器的质量、价格、交期,第三个主题主要是热水器的安装、供暖、保温效果。综上所述,将话题的特征词转换成DataFrame格式,可以清楚地了解每个话题的重点和评论的情感倾向。4.小结本文对京东商城“美的”牌热水器消费者的文字评论数据进行建模。在对文本进行基本预处理、中文分词、停用词过滤后,建立LDA主题模型的数据。挖掘模型实现了对文本评论数据的倾向性判断,将关于该话题的高频特征词以DataFrame格式呈现。可以在项目源地址fork本项目https://momodel.cn/explore/5d37d3ea1afd94479ffa37b0?type=app参考资料:https://github.com/goto456/stopwordshttps://github.com/fxsjy/jiebaMo(网址:momodel.cn)是一个支持Python的人工智能在线建模平台,可以帮助您快速开发、训练和部署模型。Mo人工智能俱乐部是由本站研发和产品设计团队发起,致力于降低人工智能开发和使用门槛的俱乐部。团队拥有大数据处理分析、可视化和数据建模经验,承接过多领域智能化项目,具备从底层到前端的全线设计开发能力。主要研究方向为大数据管理分析和人工智能技术,并以此促进数据驱动的科学研究。目前俱乐部每周六在杭州举办以机器学习为主题的线下技术沙龙活动,不定期进行论文分享和学术交流。我们希望把对人工智能感兴趣的各界朋友聚集在一起,继续交流,共同成长,推动人工智能的大众化和普及化。