数据是人工爬取自京东网站上的评论数据,该项目主要以美的产品作为分析。
下载连接:
链接:https://pan.baidu.com/s/1uyzEa6VJBkBLHMzxLxwwMw
提取码:bwfa
1、项目背景:
现在大众在进行网购之前都会先看下相关商品的评论,包括好评与差评,再综合衡量,最后才决定是否会购买相关的物品。甚至有的消费者已经不看商品的详情秒数页而是直接看评论,然后决定是否下单。商品评论已经是用户决策最为核心的考量因素了。
在本项目中要根据商品的好评与差评,提取出关键词,快速了解一件商品的好与不好的地方。
原始评论需要提炼:
商品虽然希望买家给好评,但是从数据挖掘的角度看,单纯的好拼价值不大,尤其是一些空洞的评价,并未能给未来潜在消费者提供有价值的参考信息。比如大部分消费者会这么说“质量不错”、“好评,下次买还是你家”等,但对于一个关心该产品安全性的消费者来说显然是没用的,当消费者没了解到他想了解的问题,很可能在头脑发热期过了之后就不会再考虑购买了。
2、项目需求:
对于一个指定的商品,生产商、卖家或消费者需要了解用户认同该商品的哪些优点,不认同该商品的哪些弱点或缺点。
3、项目输出:
(1)商品好评的若干个topic中,其关键词各是什么,以及每个关键词的权重。
(2)商品差评的若干个topic中,其关键词各是什么,以及每个关键词的权重。
4、需要安装的库:
snownlp – 用来处理情感分析
jieba – 分词
gensim – 使用主题模型
5、LDA主题模型:
如果一篇文章有一个中心思想或主题,那么一些特定词语会更频繁地出现。一篇文章通常可以包含多种主题,每个主题所占比例各不相同。对于不同主题的文章而言,其不同的主题实际上构成了一个分布。
一篇文章有主题,那么对于一个文档集,我们也可以分析其主题分布。借此甚至可以看出我的阅读爱好是什么。如果按每五年来分析,可以回顾下过去我的阅读兴趣的变化。当然现实中对主题分布进行分析,更多是出于商业目的。
本质上主题模型是一个词袋模型,不考虑词的顺序。
(1)已知条件:给定一个文档,可以看到的每篇文档都是由哪些词构成。
(2)假设条件:LDA模型假设每篇文档都是在讲述若干个主题,至于具体几个主题,可以认为预先设定k值。
(3)求解:通过LDA模型,可以求出这k个主题(latent)中,每个主题到底长什么样子。
Documents–Topics–Words(Tokens)
LDA能做什么:
(1)能做:求解出k个主题长什么样子。
(2)不能做:不能认为设定是什么主题,比如不能认为设定为财经、体育的主题。因为LDA是无监督算法,模型训练结束后,每个主题长什么样子就是什么样子,和整个语料中的每篇文档的内容有关系。无法人为强求某个主题表示财经,某个主题表示体育等。
LDA优点:
(1)无监督:不用对训练数据打标签
(2)预处理简单:分词,去除停用词
(3)参数少:一般只需要设定主题数k
6、代码实现:
(1)读取数据
import pandas as pd
inputfile = 'huizong.csv'
outputfile = 'meidi_jd.txt'
data = pd.read_csv(inputfile,encoding='utf8')
#只提取与美的品牌产品有关的评论
data = data[data['品牌']=='美的']['评论']
(2)数据预处理
#除去NAN
data = data.dropna()
import numpy as np
#去重,比如差不多的评论考虑其中一条就可以
l1 = len(data)
data = pd.DataFrame(data.unique())
l2 = len(data)
print(u'删除了%s条评论.'%(l1-l2))
'''
压缩词,也就是对句子内冗长的部分进行压缩
'''
def cutword(strs,reverse=False):
s1 = []
s2 = []
s = []
if reverse:
strs = strs[::-1]
s1.append(strs[