电商商品评论主题分析(LDA)

更新时间:2023-07-15 04:16:02 阅读: 评论:0

电商商品评论主题分析(LDA)
下⾯代码的意思是从评论数据中抽取品牌是美的的数据(15-1)
#-*- coding: utf-8 -*-
import pandas as pd
inputfile = '../data/huizong.csv' #评论汇总⽂件
outputfile = '../data/' #评论提取后保存路径
data = pd.read_csv(inputfile, encoding = 'utf-8')
data = data[[u'评论']][data[u'品牌'] == u'美的']
<_csv(outputfile, index = Fal, header = Fal, encoding = 'utf-8')
这⾥⼀句话概括接下来的去重概念,⽂本去重和机械压缩去重
⽂本去重指的是数据条之间的去重。
机械压缩去重指的是数据条内部,词语与词语之间的去重。
下⾯代码是⽤来⽂本去重的(15-2)。
#-*- coding: utf-8 -*-
import pandas as pd
inputfile = '../data/' #评论⽂件
outputfile = '../data/meidi_jd_' #评论处理后保存路径
data = pd.read_csv(inputfile, encoding = 'utf-8', header = None)
l1 = len(data)
data = pd.DataFrame(data[0].unique())
l2 = len(data)
<_csv(outputfile, index = Fal, header = Fal, encoding = 'utf-8')
print(u'删除了%s条评论。' %(l1 - l2))
下⾯代码的作⽤是把评论前⾯的评分删除(15-3):
#-*- coding: utf-8 -*-
import pandas as pd
#参数初始化
inputfile1 = '../data/meidi_jd_process_end_负⾯情感结果.txt'
inputfile2 = '../data/meidi_jd_process_end_正⾯情感结果.txt'
outputfile1 = '../data/meidi_'
outputfile2 = '../data/meidi_'
data1 = pd.read_csv(inputfile1, encoding = 'utf-8', header = None) #读⼊数据
data2 = pd.read_csv(inputfile2, encoding = 'utf-8', header = None)
print("data1=",data1[0])夜猫族
data1 = pd.DataFrame(data1[0].place('.*?\d+?\\t ', '')) #⽤正则表达式修改数据
燥热体质的表现症状及调理方法data2 = pd.DataFrame(data2[0].place('.*?\d+?\\t ', ''))#这⾥的意思其实是⽤‘’(也就是代表什么都没有)来代替前⾯的符合特征的字符串,等效于实现了删除的功print(">>>>>>#")
print("data1=",data1[0])
#以上正则表达式的效果,可以通过把正则筛选前后的data[0]分别输出来进⾏⽐较
<_csv(outputfile1, index = Fal, header = Fal, encoding = 'utf-8') #保存结果
<_csv(outputfile2, index = Fal, header = Fal, encoding = 'utf-8')
接下来是进⾏分词(详细解释请见代码中注释)(15-4)
#-*- coding: utf-8 -*-
import pandas as pd
关羽的简介
import jieba #导⼊结巴分词,需要⾃⾏下载安装
#参数初始化
inputfile1 = '../data/meidi_'
inputfile2 = '../data/meidi_'
outputfile1 = '../data/meidi_jd_'
outputfile2 = '../data/meidi_jd_'
data1 = pd.read_csv(inputfile1, encoding = 'utf-8', header = None) #读⼊数据
data2 = pd.read_csv(inputfile2, encoding = 'utf-8', header = None)
mycut = lambda s: ' '.join(jieba.cut(s)) #⾃定义简单分词函数,先识别句⼦中的中⽂单词,然后把中⽂单词通过空格连接起来
#上⾯⼀句代码中,s是⼊⼝参数,.join前⾯的空格表⽰把jieba库处理过后的s中的词语jieba.cut(s),⽤空格来连接。
data1 = data1[0].apply(mycut) #通过“⼴播”形式分词,加快速度。
多彩的秋天作文data2 = data2[0].apply(mycut)
<_csv(outputfile1, index = Fal, header = Fal, encoding = 'utf-8') #保存结果
<_csv(outputfile2, index = Fal, header = Fal, encoding = 'utf-8')
接下来是去除停⽤词
#-*- coding: utf-8 -*-
import pandas as pd
#参数初始化
negfile = '../data/meidi_jd_'
posfile = '../data/meidi_jd_'
stoplist = '../'
neg = pd.read_csv(negfile, encoding = 'utf-8', header = None) #读⼊数据
pos = pd.read_csv(posfile, encoding = 'utf-8', header = None)
stop = pd.read_csv(stoplist, encoding = 'utf-8', header = None, p = 'tipdm',engine='python')
#p设置分割词,由于csv默认以半⾓逗号为分割词,⽽该词恰好在停⽤词表中,因此会导致读取出错(这⾥的出错的意思就是代码运⾏报错,编译器直接不让编译通#所以解决办法是⼿动设置⼀个不存在的分割词,如tipdm。
#这⾥先解释下什么是“停⽤词”,停⽤词指的是本⽂中出现频率很⾼、但是实际意义不⼤的词语,⽐如
#“今天好嗨森啊啊啊啊啊啊啊啊”,那么这句话中的“啊啊啊啊啊啊啊啊”就是停⽤词
#讲通俗点的话,停⽤词就是“废话”。。
stop = [' ', ''] + list(stop[0]) #Pandas⾃动过滤了空格符,这⾥⼿动添加(在每条数据的开头加个空格)
#下⾯这段代码可以分为两⼩段,这两⼩段代码⼏乎⼀致,前⾯⼀个是针对负⾯评论,后⼀个是针对正⾯评论,所以只详解其中⼀个
neg[1] = neg[0].apply(lambda s: s.split(' ')) #定义⼀个分割函数,然后⽤apply⼴播
neg[2] = neg[1].apply(lambda x: [i for i in x if i not in stop]) #逐词判断是否停⽤词,思路同上
#上⾯这句代码的语法是:列表推导式⼦。意思是说,如果i不在停⽤词列表(stop)中,就保留该词语(也就是最前⾯的⼀个i),否则就进⾏删除
#上⾯的这句代码中,把for i in x看做整体,把if i not in stop看做判断语句,把最前⾯的i看做满⾜if语句之后的执⾏语句即可。
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])
#上⾯的lamda s和lamda x中的s和x都是表⽰⼊⼝参数,apply的意思是,把apply前⾯的字符串当做⼊⼝参数,输⼊到appy后⾯所定义的函数中
最后是建⽴LDA模型:
from gensim import corpora, models
#负⾯主题分析
薄荷糖的功效与作用
#这段代码和下⾯的“正⾯主题分析”⼏乎是完全⼀样的,作⽤讲得通俗点其实就是聚类。
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) #LDA模型训练
for i in range(3):
neg_lda.print_topic(i) #输出每个主题(这个其实就是聚类结果的输出)
#正⾯主题分析
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)
for i in range(3):
neg_lda.print_topic(i) #输出每个主题
喜得孙子的祝福语结果类似于:苏芮个人资料简介
0.065*"安装" + 0.025*"热⽔器" + 0.020*"说" + 0.017*"买" + 0.017*"美的" + 0.016*"师傅" + 0.012*"元" + 0.011*"京东" + 0.009*"售后" + 0.009*"安装费" 0.035*"安装" + 0.023*"加热" + 0.023*"不错" + 0.013*"东西" + 0.011*"没⽤" + 0.011*"送货" + 0.010*"热⽔器" + 0.009*"师傅" + 0.009*"速度" + 0.009*"不好"
0.031*"买" + 0.031*"不错" + 0.016*"安装" + 0.014*"热⽔器" + 0.010*"价格" + 0.009*"加热" + 0.007*"元" + 0.007*"速度" + 0.007*"质量" + 0.006*"京东"
通俗解释下LDA算法⼲嘛的,我们知道:
K-means是聚类的,他主要是处理数据的,对数据进⾏聚类。
LDA其实也是聚类的,主要是处理字符串的,对字符串进⾏聚类。

本文发布于:2023-07-15 04:16:02,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1097296.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:评论   数据   代码   字符串   分词   分割   意思   结果
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图