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

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

随着电子商务的发展,对企业而言,了解消费者的消费需求迫在眉睫。利用数据挖掘中的NLP技术,可以帮助商家分析消费者的评论文本数据,得到改善产品的建议。

一.实现目标

1)对京东商城中美的热水器的评论进行情感分析;
2) 从评论文本中挖掘用户的需求、意见、购买原因、产品优缺点;
3) 给出改善产品的建议。

二. 分析方法和过程

1) 对评论文本数据进行数据清洗、分词、停用词等过滤操作;
2) 对预处理后的数据进行情感分析,将评论文本数据按照情感倾向分为正面评论数据(好评)和负面评论数据(差评)。
3) 分别对正、负面评论数据进行LDA主题分析,从对应的结果分析文本评论数据中有价值的内容。

2.1 评论去重

(1)电商平台中存在系统自动评价的现象,这类属于重复评价,需要去除;
(2)不同购买者之间的有价值的评论很少会出现完全重复,有些顾客可能会复制粘贴别人的评论,属于重复评论。
使用语料库:完全重复的语料库解决评论去重问题。

import pandas as pd
import re
import jieba.posseg as psg
import numpy as np


# 去重,去除完全重复的数据
reviews = pd.read_csv(r"tmp\reviews.csv")
reviews = reviews[['content', 'content_type']].drop_duplicates()
content = reviews['content']
2.2 数据清洗

人工观察,评论中掺杂许多数字字母——去除!由于评论文本数据围绕京东商城的美的热水器,“京东”,“京东商城”,“美的”,“热水器”,“电热水器”等词的频数很大——去除!
在这里插入图片描述

# 去除去除英文、数字等
# 由于评论主要为京东美的电热水器的评论,因此去除这些词语
strinfo = re.compile('[0-9a-zA-Z]|京东|美的|电热水器|热水器|')
content = content.apply(lambda x: strinfo.sub('', x))
2.3 评论分词
2.3.1 分词、词性标注、去停用词
分词:

分词:文本信息处理的基本环节,将一个单词序列划分成单个单词的过程。准确地分词可以极大地提高计算机对文本信息的识别和理解能力。不准确的分词会产生大量的噪声,严重干扰计算机的识别理解能力。

汉语中的基本单位是字。中文的逻辑顺序构成是:
字——>词——>句子——>段——>节——>章——>篇

中文分词的任务:把中文的序列切分成有意义的词。
eg:
我帮小明打饭。
分词成:
我 帮 小明 打饭

中文存在的问题有:
(1)未登录词的识别问题(词典中没有登陆的人名、地名、机构名等)、专业术语(贝叶斯、万维网),新词语(不明觉厉、第五层)
(2)切分歧义问题:
eg:
当结合成分子时。
当 结合 成分 子时
当 结合 成 分子 时
当 结 合成 分子 时

词典分配 统计特征
分词中最传统常见的一种。匹配方式有正向、逆向。对于匹配中遇到的多种分段可能性(segmentation ambiguity),通常会选取数目最少的词分割出来。 通过语料数据中的一些统计特征,(如互信息量)去估计相邻汉字之间的关联性,实现词的切分。
优点:简单易懂、不依赖训练数据、易于纠错; 优点:不依赖词表,在挖掘生词方面具有较强的灵活性。
缺点:一旦词表中出现不存在的新词,算法无法做大正确切分。 精度方面可能有时候不够精确

jieba分词——分词中最常用的工作包,Python的分词开源库,专门用于中文分词。

去停用词

停用词(stop words):电脑检索中的虚字、非检索用字。停词分为两类:(1)使用十分广泛的词语,“我”,“就”;(2)文本中出现频率很高的但实际意义不大的词,如语气助词、介词、副词、连词。如:的,在,和,然后等。

# 分词
worker = lambda s: [(x.word, x.flag) for x in psg.cut(s)] # 自定义简单分词函数
seg_word = content.apply(worker) 

# 将词语转为数据框形式,一列是词,一列是词语所在的句子ID,最后一列是词语在该句子的位置
n_word = seg_word.apply(lambda x: len(x))  # 每一评论中词的个数

n_content = [[x+1]*y for x,y in zip(list(seg_word.index), list(n_word))]
index_content = sum(n_content, [])  # 将嵌套的列表展开,作为词所在评论的id

seg_word = sum(seg_word, [])
word = [x[0] for x in seg_word]  # 词

nature = [x[1] for x in seg_word]  # 词性

content_type = [[x]*y for x,y in zip(list(reviews['content_type']), list(n_word))]
content_type = sum(content_type, [])  # 评论类型

result = pd.DataFrame({
   "index_content":index_content, 
                       "word":word,
                       "nature":nature,
                       "content_type":content_type}) 

# 删除标点符号
result = result[result['nature'] != 'x']  # x表示标点符号

# 删除停用词
stop_path = open("data\stoplist.txt", 'r',encoding='UTF-8')
stop = stop_path.readlines()
stop = [x.replace('\n', '') for x in stop]
word = list(set(word) - set(stop))
result = result[result['word'].isin(word)]

# 构造各词在对应评论的位置列
n_word = list(result.groupby(by = ['index_content'])['index_content'].count())
index_word = [list(np.arange(0, y)) for y in n_word]
index_word = sum(index_word, []
  • 2
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值