现在大家在进行网购过程中,肯定会看商品的相关评论,然后再综合衡量,最后决定是否购买相关产品。甚至不少消费者会先略过详情页直接看评论,然后决定是否下单,那么商品评论就成为了用户是否购买的核心因素之一了,因此了解商品给用户的体验尤为重要。
对指定某一/类商品,生产商,卖家需要了解用户认同的优点和不认同的缺点。
通过scrapy框架爬取多个电商平台近20w条数据,这里展示下具体代码框架,此篇就不重点介绍了。
import pandas as pd
import numpy as np
import csv
import codecs
from snownlp import SnowNLP
import jieba
from pandas import Series,DataFrame
from gensim import corpora,models
数据预处理包括数据去重以及机械压缩去词
由于代码不是同一天编写,所以我习惯性运行一步就导出一步,后面再导入数据,以免多次运行浪费时间。
# 文本去重
data = pd.read_csv('huizong.csv',encoding = 'utf-8')
data = data.dropna() # 删除空值
l1 = len(data)
data = pd.DataFrame(data['评论'].unique()) # 删除重复值
l2 = len(data)
data.to_csv('pinglun.csv',index = False,encoding='utf-8')
print(f'删除了{l1 - l2}条评论')
# 机械压缩去词
f = codecs.open('pinglun2.csv' ,'w','utf-8')
def cutword(strs,reverse = False):
for A_string in strs:
temp1= A_string[0].strip('\n') #去掉每行最后的换行符'\n'
temp2 = temp1.lstrip('\ufeff')
temp3= temp2.strip('\r')
char_list=list(temp3)
list1=['']
list2=['']
del1=[]
flag=['']
i=0
while(i<len(char_list)):
if (char_list[i]==list1[0]):
if (list2==['']):
list2[0]=char_list[i]
else:
if (list1==list2):
t=len(list1)
m=0
while(m<t):
del1.append( i-m-1)
m=m+1
list2=['']
list2[0]=char_list[i]
else:
list1=['']
list2=['']
flag=['']
list1[0]=char_list[i]
flag[0]=i
else:
if (list1==list2)and(list1!=[''])and(list2!=['']):
if len(list1)>=2:
t=len(list1)
m=0
while(m<t):
del1.append( i-m-1)
m=m+1
list1=['']
list2=['']
list1[0]=char_list[i]
flag[0]=i
else:
if(list2==['']):
if(list1==['']):
list1[0]=char_list[i]
flag[0]=i
else:
list1.append(char_list[i])
flag.append(i)
else:
list2.append(char_list[i])
i=i+1
if(i==len(char_list)):
if(list1==list2):
t=len(list1)
m=0
while(m<t):
del1.append( i-m-1)
m=m+1
m=0
while(m<t):
del1.append(flag[m])
m=m+1
a=sorted(del1)
t=len(a)-1
while (t>=0):
#print(char_list[a[t]])
del char_list[a[t]]
t=t-1
str1 = "".join(char_list)
str2=str1.strip() #删除两边空格
if len(str2)>4: # 短句过滤
f.writelines(str2+'\r\n')
f.close()
return
data1 = pd.read_csv('pinglun.csv',encoding = 'utf-8')
data2 = cutword(data1.values)
通过SnowNLP模块对词性进行情感系数分析
# 情感分析
data3 = pd.read_csv('pinglun2.csv',encoding = 'utf-8',delimiter='\t')
index = []
values = []
for i in range(len(data3.评论)):
s = SnowNLP(str(data3.评论[i]))
for j in s.sentences:
# 将每个评论序号放在列表,以便后续分组
index.append(i)
print(i)
# 将评分放到另外一个列表
values.append(SnowNLP(j).sentiments)
# 将序号和评分存放在列表中
huizong = DataFrame({'序号':index,'评分':values})
# 求其每条评论均值,并添加到表中
junzhi = huizong.groupby('序号').评分.mean()
data3['评分系数'] = junzhi
# 保存
data3.to_csv('pinglun3.csv',index = False,encoding='utf-8')
使用jieba模块分别对好差评进行处理,这里评级标准根据不同行业各有不同。
# jieba分词
data4 = pd.read_csv('pinglun3.csv',encoding = 'utf-8')
# 区分差好评
good = data4[data4['评分系数']>0.7]
bad = data4[data4['评分系数']<=0.3]
# 分词过后,遍历一下停用词表,去掉停用词
def stopwordslist(filepath):
stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]
return stopwords
# 对句子进行分词
def seg_sentence(sentence):
sentence_seged = jieba.cut(sentence.strip())
stopwords = stopwordslist('stoplist.txt') # 这里加载停用词的路径
outstr = ''
for word in sentence_seged:
if word not in stopwords:
if word != '\t':
outstr += word
outstr += " "
return outstr
# 读取数据输出字符串格式
def import1(o):
list1 = []
for line in o:
l = seg_sentence(line)
n = l.split(' ')
for i in n:
list1.append(i)
return list1
good2 = import1(good.评论)
bad2 = import1(bad.评论)
LDA模型训练,其中分析维度可以自己设定,这里使用的是3组,分别得出不同好差评信息。
# LDA主题分析
good3 = pd.DataFrame(good2)
bad3 = pd.DataFrame(bad2)
# 正面主题分析
neg_dict = corpora.Dictionary(good3.values) # 建立词典
neg_corpus = [neg_dict.doc2bow(i) for i in good3.values] # 建立词料库
neg_lda = models.LdaModel(neg_corpus,num_topics = 3,id2word = neg_dict) # LDA模型训练
for i in range(3):
print(str(i))
print(neg_lda.print_topic(i))
# 负面主题分析
pos_dict = corpora.Dictionary(bad3.values) # 建立词典
pos_corpus = [pos_dict.doc2bow(i) for i in bad3.values] # 建立词料库
pos_lda = models.LdaModel(neg_corpus,num_topics = 3,id2word = pos_dict) # LDA模型训练
for i in range(3):
print(str(i))
print(pos_lda.print_topic(i))
模型搭建完成,解读结果也是很重要的一步,这里不难可以发现各个维度好差评的原因以及对应的频数,这里我大致提炼了下差评关键字。
term1 | term2 | term3 |
---|---|---|
电热水器 | 插座 | 便宜 |
客服 | 师傅 | 不好 |
热水 | 装修 | 信任 |
验货 | 型号 | 安装 |
?????????????????感谢观看??????????????????