本章代码建议在linux下面运行,windows下安装gensim会比较麻烦。

我是在python3.5.2的pycharm下运行的

下面代码的意思是从评论数据中抽取品牌是美的的数据(15-1)

#-*- coding: utf-8 -*-
import pandas as pdinputfile = '../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')

这里一句话概括接下来的去重概念,文本去重和机械压缩去重

文本去重指的是数据条之间的去重。

机械压缩去重指的是数据条内部,词语与词语之间的去重。

下面代码是用来文本去重的(15-2)。

#-*- coding: utf-8 -*-
import pandas as pdinputfile = '../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))

下面代码的作用是把评论前面的评分删除(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_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)
print("data1=",data1[0])data1 = pd.DataFrame(data1[0].str.replace('.*?\d+?\\t ', '')) #用正则表达式修改数据
data2 = pd.DataFrame(data2[0].str.replace('.*?\d+?\\t ', ''))#这里的意思其实是用‘’(也就是代表什么都没有)来代替前面的符合特征的字符串,等效于实现了删除的功能
print("###############################")
print("data1=",data1[0])
#以上正则表达式的效果,可以通过把正则筛选前后的data[0]分别输出来进行比较
data1.to_csv(outputfile1, index = False, header = False, encoding = 'utf-8') #保存结果
data2.to_csv(outputfile2, index = False, header = False, encoding = 'utf-8')

接下来是进行分词(详细解释请见代码中注释)(15-4)

#-*- 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)) #自定义简单分词函数,先识别句子中的中文单词,然后把中文单词通过空格连接起来
#上面一句代码中,s是入口参数,.join前面的空格表示把jieba库处理过后的s中的词语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代码(15-5)

#-*- coding: utf-8 -*-
import pandas as pd#参数初始化
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',engine='python')
#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]) #逐词判断是否停用词,思路同上
#上面这句代码的语法是:列表推导式子。意思是说,如果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后面所定义的函数中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) #输出每个主题

通俗解释下LDA算法干嘛的,我们知道:

K-means是聚类的,他主要是处理数据的,对数据进行聚类。

LDA其实也是聚类的,主要是处理字符串的,对字符串进行聚类。

电商产品评论数据情感分析代码详解相关推荐

  1. 基于电商产品评论数据情感分析

    #!/usr/bin/env python # coding: utf-8# # -- 基于电商产品评论数据情感分析 --# ### 1.案例简介 # # 1.利用文本挖掘技术,对碎片化.非结构化的电 ...

  2. 数据分析与挖掘实战-电商产品评论数据情感分析

    电商产品评论数据情感分析 背景 随着网上购物越来越流行,人们对于网上购物的需求越来越高,这让京东.淘宝等电商平台得到了很大的发展机遇.但是,这种需求也推动了更多的电商平台的崛起,引发了激烈的竞争.在这 ...

  3. 数据挖掘作业学习学习笔记-电商产品评论数据情感分析

    使用的教材:<电商产品评论数据情感分析> 作业&学习笔记:数据挖掘第14周 说明:书本内容详实.此篇用于自己期末回顾知识的重点内容,故做出的学习笔记缺省了书本原本的其他精粹. 随着 ...

  4. 【项目实战】Python实现基于LDA主题模型进行电商产品评论数据情感分析

    说明:这是一个机器学习.数据挖掘实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 视频: Python实现基于LDA模型进行电商产品评论数据情感分析 ...

  5. 数据分析与挖掘:电商产品评论数据情感分析

    电商产品评论数据情感分析 1. 背景与挖掘目标 2. 分析方法与过程 2.1 数据抽取 2.2 评论预处理 2.3 LDA 主题分析 1. 背景与挖掘目标 项目为<Python 数据分析与挖掘实 ...

  6. 数据挖掘实战—电商产品评论数据情感分析

    文章目录 引言 一.评论预处理 1.评论去重 2.数据清洗 二.评论分词 1.分词.词性标注.去除停用词 2.提取含名词的评论 3.绘制词云查看分词效果 三.构建模型 1.评论数据情感倾向分析 1.1 ...

  7. 毕业设计之 - 大数据分析:电商产品评论数据情感分析

    文章目录 1 简介 数据分析目的 数据预处理 评论去重 数据清洗 分词.词性标注.去除停用词 提取含名词的评论 绘制词云¶ 词典匹配 评论数据情感倾向分析 修正情感倾向 LinearSVC模型预测情感 ...

  8. 《Python数据分析与挖掘实战》第15章 ——电商产品评论数据情感分析(LED)

    文章目录 1.挖掘背景与目标 2.2 数据探索与预处理 2.1 数据筛选 2.2 数据去重 2.3 删除前缀评分 2.4 jieba分词 3 基于LDA 模型的主题分析 4.权重 5.如何在主题空间比 ...

  9. Python文本挖掘练习(五)// 电商产品评论数据情感分析

    第一部分 案例简介 本案例首先利用Python文本挖掘技术,对碎片化.非结构化的电商网站评论数据进行清洗与处理,转化为结构化数据.然后对文本数据进一步挖掘与分析,采用决策树算法构建情感分类模型,探索用 ...

最新文章

  1. 在一个3*4数组中查找最大最小值
  2. Aspose.Cells设置单元格格式
  3. 解读MySQL事务的隔离级别和日志登记模式选择技巧
  4. 查看网关物理地址命令
  5. hdu 6127---Hard challenge(思维)
  6. gevent 学习笔记一
  7. 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?...
  8. Docker(十八)基于python3.5 以apline 为系统的python 环境
  9. php中什么是时间戳,php中的时间戳转换函数是什么
  10. 8086的内中断典型如int 21h的分析
  11. 【ACL2020】BERT如何融合主题模型做文本匹配
  12. DelayedWorkQueue踩坑笔记
  13. TCP协议-socket通信
  14. glibc静态链接 libc.a(nsswitch.o)(.data+0x64):undefined reference to `_nss_files_getaliasent_r' 错误解决方法
  15. [TF进阶] 循环神经网络
  16. Flutter入门综合练习
  17. 将RSA加密应用在ARM-Linux平台
  18. c#调用企业微信服务端API发送消息和图片
  19. 豆瓣TOP250资源搜索——油猴脚本Tampermonkey
  20. 项目上线,部署到服务器(腾讯服务器),http协议及https协议(微信小程序必须https协议才可发布)、Nginx配置

热门文章

  1. Qt数据库编程_基本
  2. 皮卡丘为什么不进化_精灵宝可梦:进化后反而变弱的精灵!皮卡丘:知道我为什么不进化了?反而会变弱!...
  3. (五)资源优化 (经典性能优化解决方案)
  4. el-table合并行的实现
  5. python没有库_Python开发者必备6个基本库,这个都没有怎么做开发呢
  6. Timer定时器Demo
  7. 1周第1课 Linux 认知、安装 Centos7
  8. 《数据结构》之数组结构和链表
  9. PHP建立和删除目录
  10. mysql存储过程编写