赞
踩
本文对电商平台上的热水器评论进行文本挖掘分析,本次数据挖掘的建模目标如下:
要分析电商平台热水器的评论数据,需要先对评论数据进行采集,对比多种网络爬虫工具后,发现八爪鱼采集器属于“易用型”,它主要通过模仿用户的网页操作进行数据采集,只需指定数据采集逻辑和可视化采集的数据,即可完成采集规则的制定。因此在此,选择八爪鱼采集器作为网页数据的抓取工具。
3.21 对象评论抽取
将评论为“美的”的“评论一列抽取”,编码每UTF-8格式。
- #-*- coding: utf-8 -*-
- import pandas as pd
-
- inputfile = '.../data/huizong.csv' #评论汇总文件
- outputfile = '.../data/meidi_jd.txt' #评论提取后保存路径
- data = pd.read_csv(inputfile, encoding = 'utf-8')
- data = data[[u'评论']][data[u'品牌'] == u'美的']
- data.to_csv(outputfile, index = False, header = False, encoding = 'utf-8')
3.22 文本去重
- #-*- coding: utf-8 -*-
- import pandas as pd
-
- inputfile = '.../data/meidi_jd.txt' #评论文件
- outputfile = '.../data/meidi_jd_process_1.txt' #评论处理后保存路径
- data = pd.read_csv(inputfile, encoding = 'utf-8', header = None)
- l1 = len(data)
- data = pd.DataFrame(data[0].unique())
- l2 = len(data)
- data.to_csv(outputfile, index = False, header = False, encoding = 'utf-8')
- print(u'删除了%s条评论。' %(l1 - l2))
3.23 机械压缩去词语
例如:
好用,好用,好用,好用!
变为:好用!
3.24 短句删除
字数越少,表达的意思越少,要表达相关的意思就必须有相应量的字数,过少字数的评论是没有什么意义的,如“很不错”等,为此将过短的评论文本数据删除,以除去没有意义的评论。
显然,短句删除最重要的环节是保留评论的字数下限的确定,这个没有精确的标准,一般4~8个国际字符都是比较合理的,这里设置下限度为4,即语料小于4个国际字符的则删去。
分词结果的准确性对后续文本挖掘算法有着不可忽视的影响。本文采用python中的中文分词包“jieba”(结巴分词),对TXT文档进行分词。“结巴分词”提供分词、词性标注、未登录词识别,支持用户词典等功能。经相关测试,此系统的分词精度高达97%以上。
3.41 情感倾向性模型介绍
3.42 基于语义网络的评论分析
步骤:
3.43 基于LDA模型的主题分析
由于COSTCM6 得到的结果还有评分前缀,所以对开头的评分前缀和空格进行删除。
删除前缀评分代码:
- #-*- coding: utf-8 -*-
- import pandas as pd
-
- #参数初始化
- inputfile1 = '.../data/meidi_jd_process_end_负面情感结果.txt'
- inputfile2 = '.../data/meidi_jd_process_end_正面情感结果.txt'
- outputfile1 = '.../data/meidi_jd_neg.txt'
- outputfile2 = '.../data/meidi_jd_pos.txt'
-
- data1 = pd.read_csv(inputfile1, encoding = 'utf-8', header = None) #读入数据
- data2 = pd.read_csv(inputfile2, encoding = 'utf-8', header = None)
-
- data1 = pd.DataFrame(data1[0].str.replace('.*?\d+?\\t ', '')) #用正则表达式修改数据
- data2 = pd.DataFrame(data2[0].str.replace('.*?\d+?\\t ', ''))
-
- data1.to_csv(outputfile1, index = False, header = False, encoding = 'utf-8') #保存结果
- data2.to_csv(outputfile2, index = False, header = False, encoding = 'utf-8')

分词代码:
- #-*- coding: utf-8 -*-
- import pandas as pd
- import jieba #导入结巴分词,需要自行下载安装
-
- #参数初始化
- inputfile1 = '.../data/meidi_jd_neg.txt'
- inputfile2 = '.../data/meidi_jd_pos.txt'
- outputfile1 = '.../data/meidi_jd_neg_cut.txt'
- outputfile2 = '.../data/meidi_jd_pos_cut.txt'
-
- 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)) #自定义简单分词函数
- 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')

LDA代码:
- #-*- coding: utf-8 -*-
- import pandas as pd
-
- # 修改当前工作路径
- import os
- print(os.getcwd()) # 查看当前工作路径
- os.chdir('D:/demo') # 修改路径
- print(os.getcwd()) # 查看当前工作路径
-
- # 修改默认编码
- import sys
- sys.getdefaultencoding() # 查看当前编码格式
- # 报错时(AttributeError: 'module' object has no attribute 'setdefaultencoding')
- reload(sys) # 报上面的错时,执行此命令
- sys.setdefaultencoding('utf8') # 修改编码格式
-
- #参数初始化
- negfile = '.../data/meidi_jd_neg_cut.txt'
- posfile = '.../data/meidi_jd_pos_cut.txt'
- stoplist = '.../data/stoplist.txt'
-
- 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, sep = 'tipdm')
- #sep设置分割词,由于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]) #逐词判断是否停用词,思路同上
- 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])
-
- 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.show_topics()#展示主题
-
- #正面主题分析
- 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):
- pos_lda.show_topics()#展示主题

结果展示:
- neg_lda.show_topics()#展示正面主题
- Out[48]:
- [(0,
- '0.029*"加热" + 0.029*"不错" + 0.021*"热水器" + 0.013*"速度" + 0.011*"京东" + 0.010*"好" + 0.010*"买" + 0.007*"慢" + 0.006*"安装" + 0.006*"有点"'),
- (1,
- '0.057*"安装" + 0.020*"热水器" + 0.016*"师傅" + 0.015*"不错" + 0.015*"美的" + 0.013*"好" + 0.011*"买" + 0.011*"问题" + 0.010*"东西" + 0.008*"京东"'),
- (2,
- '0.040*"安装" + 0.028*"买" + 0.022*"知道" + 0.015*"好" + 0.010*"师傅" + 0.009*"有点" + 0.008*"热水器" + 0.008*"安装费" + 0.008*"一个" + 0.008*"n"')]
-
- pos_lda.show_topics()#展示负面主题
- Out[49]:
- [(0,
- '0.038*"好" + 0.035*"加热" + 0.020*"方便" + 0.017*"很快" + 0.017*"不错" + 0.016*"有点" + 0.016*"好用" + 0.014*"保温" + 0.011*"热水" + 0.011*"使用"'),
- (1,
- '0.057*"安装" + 0.022*"买" + 0.017*"师傅" + 0.016*"美的" + 0.014*"热水器" + 0.014*"一个" + 0.011*"安装费" + 0.008*"n" + 0.008*"材料" + 0.008*"售后"'),
- (2,
- '0.098*"不错" + 0.090*"好" + 0.042*"安装" + 0.023*"送货" + 0.022*"东西" + 0.021*"买" + 0.018*"热水器" + 0.017*"挺" + 0.017*"京东" + 0.015*"服务"')]

经过LDA主题分析后,评论文本被聚成3个主题,每个主题下生成10个最有可能出现的词语及相应的概率。
1、爬取数据的工具还有其他,经检验,“后裔采集器”个人完全免费,且速度相对较快(据说八爪鱼1分钟10条),且还比较好用,建议使用。
2、ROSTCM6 中,以下文件均需要(不能删除,都是软件的一部分):
3、jieba 分词的3种:
1) 精确模式:试图将语句最精确的切分,不存在冗余数据,适合做文本分析
- seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
- print("【精确模式】: " + "/ ".join(seg_list))
- 或者:
- seg_list = jieba.cut("我来到北京清华大学") # 默认是精确模式
- print("【精确模式】: " + "/ ".join(seg_list))
-
-
- 输出:
-
- 【精确模式】: 我/ 来到/ 北京/ 清华大学
2) 全模式:将语句中所有可能是词的词语都切分出来,速度很快,但是存在冗余数据
- seg_list = jieba.cut("我来到北京清华大学", cut_all=True) # 全模式
-
- 输出:
-
- 【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
-
3) 搜索引擎模式:在精确模式的基础上,对长词再次进行切分
- seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所") # 搜索引擎模式
-
- 输出:
-
- 【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。