python评论情感分析计算分数值_使用python对淘宝评论进行情感分析并绘制词云
淘宝商品评论分析系统简介
截至2018年12月,我国网络购物用户规模达6.10亿,网购已经慢慢占据了我们生活的方方面面,所以一份透明的网购指南就显得尤为重要。
大部分网购消费群体只能依赖于其他人在商品中的评价来获取关于商品的消费体验,而淘宝中不直接显示差评,并且用户消费后没有进行评价就会默认好评,这些因素都导致消费者在消费时不能很好的了解商品的真实信息。
此系统可以针对单个商品爬取所有用户评论,然后对评论信息进行数据清洗,最后使用百度的深度学习中文情感分析工具Senta进行情感分析,使得所有的好评、差评、好评率、好评与差评比例饼图展现在消费者眼前,我在购物之前都是先看差评,此系统可以将商家对消费者的误导尽量减少。
爬取数据
因为要使用selenium操纵Google Chrome浏览器,所以要将chromedriver放到usr/local/bin目录下。
我选择的商品是 三只松鼠_香酥小黄鱼96g 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51from selenium import webdriver
from time import sleep
import csv
import random
# chromeDriver 在 /usr/local/bin
driver = webdriver.Chrome()
# 三只松鼠_香酥小黄鱼96g商品链接
url='https://detail.tmall.com/item.htm?spm=a230r.1.14.6.4c207c75wjrvsJ&id=551835141835&cm_id=140105335569ed55e27b&abbucket=9&skuId=4069566081270'
driver.get(url)
driver.maximize_window()
sleep(2)
driver.execute_script("window.scrollBy(0, 768)","") # 页面向下滚动768px
# 在点击之前多sleep一会,考虑网速原因,如果在按钮未加载出来之前click程序就会报错终止。
sleep(5)
comments_li = driver.find_element_by_id('J_TabBar').find_elements_by_tag_name('li')[1].click() # 找到评论按钮所在的li标签
sleep(2)
with open('original_data','w',encoding='utf-8',newline='') as opf:
writer = csv.writer(opf)
title=['user_id','comments']
writer.writerow(title)
count = 1
# 天猫只能显示99页的评论
for j in range(100):
# 防止被轻易检测出是爬虫,每次睡眠时间都不一样
sleep(2 + random.random())
for i in range(3): # 网页下拉三次,确保数据加载完成
driver.execute_script("window.scrollBy(0, 800)", "") # 页面向下滚动800px
sleep(1 + random.random())
sleep(random.choice([3, 4, 5]) + random.random())
parent_div = driver.find_element_by_id('J_Reviews').find_element_by_class_name('rate-grid')
all_trs = parent_div.find_elements_by_tag_name('tr')
for tr in all_trs:
data = []
data.append("user_%d" % count)
comments=' '
all_comments = tr.find_elements_by_class_name('tm-rate-fulltxt')
for i, comment in enumerate(all_comments):
if i == 0:
comments = comments + comment.text.strip()
else:
comments = comments + 'n 追加评论: ' + comment.text.strip()
data.append(comments)
writer.writerow(data)
count += 1
driver.find_element_by_class_name('rate-paginator').find_elements_by_tag_name('a')[-1].click()
sleep(random.choice([4, 5, 6]) + random.random())
driver.delete_all_cookies()
为了不给淘宝系统添加负担,每操作一下都会sleep一会,确保爬取过程顺畅。爬取过程中如果遇见登录窗口,一定要及时关闭,防止爬虫中断。
因为淘宝只显示99页评论,所以对于单个商品只爬到了2000条评论。
清洗数据
很容易就可以发现上述数据有很多是没有用处的,并且妨碍情感分析的。比如 追加评论: 和 此用户没有填写评论! ,这些明显没用的要删掉。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46# 将爬到的评论进行清洗
import numpy as np
import pandas as pd
df = pd.read_csv('original_data.csv', names=['user_id', 'content'], header=0)
# 去重
cnt = df.duplicated().value_counts()
# 删除店家的回复,店家回复的格式: "解释:..."
comment_split = df['content'].str.split('解释').apply(pd.Series)
# 只取第一列作为有效数据
df['content'] = comment_split[0]
df['content'] = df['content'].str.replace('追加评论:', '')
df['content'] = df['content'].str.replace('此用户没有填写评论!', '')
# df.info()
df.to_csv('new_data.csv')
# from snownlp import SnowNLP
# comments = df.iloc[:, 1]
# comments = comments[comments.apply(len)>=10]
#
#
# good_counter = 0 # 好评数
# just_so_so_counter = 0 # 中评
# bad_counter = 0 #差评数
# sum = 0 # 总评分
# cnt = 0
# for item in comments:
# sentiment = SnowNLP(str(item)).sentiments
# sum += sentiment
# if sentiment > 0.8:
# good_counter += 1
# elif sentiment > 0.4:
# just_so_so_counter += 1
# else:
# bad_counter += 1
# print("%d %f %s" % (cnt, sentiment, item))
# cnt += 1
# print("good: %d, just_so_so: %d, bad: %d, average : %f"
# %(good_counter, just_so_so_counter, bad_counter, sum/len(comments)))
情感分析
刚开始纠结用哪个框架来分析,在比较了SnowNLP和senta_bilstm之后senta_bilstm完胜,毕竟是百度的。
比如下面这句话,明明是好评,使用SnowNLP分析成了差评(越接近1越积极,越接近0越消极)。
再看paddelhub的senta_bilstm的效果。
上面才是正确的情感分析应该显示出来的,百度完胜!
下面开始正式使用senta_bilstm进行情感分析。
我对差评比较感兴趣,所以单独把差评打印出来了一份。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57import paddlehub as hub
import json
import os
import six
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] # 更换字体
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
senta = hub.Module(name="senta_bilstm")
text = []
df = pd.read_csv('new_data.csv')
pos = 0
for i in range(len(df)):
text.append(df.loc[i, 'content'])
dict = {"content": text}
input_dict = {"text": text}
results = senta.sentiment_classify(data=input_dict)
for index, text in enumerate(text):
results[index]["text"] = text
good = 0
bad = 0
for index, result in enumerate(results):
if six.PY2:
print(json.dumps(results[index], encoding="utf8", ensure_ascii=False))
else:
tag = results[index]['sentiment_key']
# print("
python评论情感分析计算分数值_使用python对淘宝评论进行情感分析并绘制词云相关推荐
- 【Python】文本情感分析及绘制词云
码字不易,喜欢请点赞!!! 这篇文章主要分享了使用Python来对文本数据进行情感分析以及绘制词云. 主要步骤包括: 1.文本预处理 2.文本分词 3.去除停用词(这里设置为单个词和一些常见的停用词) ...
- Python爬虫实战(六) 天猫(淘宝)评论爬取与分析实战
目录 一.天猫(淘宝)爬取地址对比 二.防爬技巧 三.数据分析 代码更新12.19,均可爬取(若爬取失效,请先检查cookie的有效性) 一.天猫(淘宝)爬取地址对比 天猫评论抓包json数据如下,在 ...
- python爬虫淘宝视频_识别假货有绝招,就用python爬淘宝评论(附视频教程)
之前我水平有限,对于淘宝评论这种动态网页,由于数据在网页源码中是找不到的,所以无法抓取数据,只能使用selenium模仿人操控浏览器来抓数据, 优点是可见容易且不宜被淘宝公司封锁:缺点是速度太慢. 经 ...
- python爬淘宝app数据_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)
[一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 准备Pycharm,下载安装等,可以参考这篇文章 ...
- 如何写一个python程序浏览淘宝_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)...
[一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 1. 准备Pycharm,下载安装等,可以参考这 ...
- python 淘宝用户行为数据集 分析与数据源
利用Python对淘宝用户行为进行分析 源数据来源于: https://tianchi.aliyun.com/dataset/dataDetail?dataId=649&userId=1 可以 ...
- python中用来绘制词云的第三方库_如何用Python绘制词云?
如果希望能够看懂代码,那么需要具备: 1. 了解Python语言的语法结构 2. 了解Python语言的标准包.第三方包的区别 3. Python代码基本是英文,意思一定程度上代表了它要做的事,懂英文 ...
- Python入门--爬取淘宝评论并生成词云
Python爬取淘宝评论并生成词云 最新修改于2021/04/01 所需相关Python第三方库(目前最新版本即可) 推荐使用Anaconda,其使用十分方便.快捷. requests库 json库 ...
- python词云模糊_用Python和WordCloud绘制词云(内附让字体清晰的秘笈)
环境及模块: Win7 64位 Python 3.6.4 WordCloud 1.5.0 Pillow 5.0.0 Jieba 0.39 目标: 绘制安徽省2018年某些科技项目的词云,直观展示热点. ...
最新文章
- beautifulsoup关于标签的初学习
- MaxCompute2.0性能评测:更强大、更高效之上的更快速
- js 控制按钮点击后不可用(用于短信或者邮箱验证)
- ITK:沿所选方向累积图像的像素
- 缓存-分布式锁-缓存一致性解决
- 让32位Eclipse和64位Eclipse同是在64的Windows7上运行
- 腾讯,字节等大厂面试真题汇总,进阶学习资料!
- java canvas类_java中的canvas类有什么作用?
- java中文汉字转拼音
- 五人表决器课程设计单片机c语言,数电课程设计五人表决器设计.doc
- esp8266控制ws2812b
- 基于comsol软件利用射线追踪方法仿真偶极子天线在一个实验室中的电场分布
- 【华为机试真题 JAVA】统计射击比赛成绩-100
- 新版标准日本语中级_第十八课
- 上一步,下一步(撤销和恢复)
- NFS服务器的配置与管理
- 一款好看,有科技感的动态背景线条动态效果代码
- 团体程序设计天梯赛-练习集 (L2-001 - L2-020)
- 装箱单Packing list
- js 兼容事件添加addEvent()
热门文章
- 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。
- 写一个打开cmd窗口并执行cmd命令的Windows脚本(.bat文件)
- JavaScript系列(三) - 收藏集 - 掘金
- 如何把ppt文档翻译成英文?教你几种ppt翻译方法
- 基于微信旅游景区购票小程序毕业设计毕设作品(1)开发概要
- 100+款AI产品薅羊毛攻略(上)——轻轻松松节省几十万
- 图解DIY 1pA超微电流测试器
- 图片转文字哪个软件好?分享实用图片转文字软件
- android源码编译中的duplicate R.java的问题
- 岛屿的最大面积leetcode题目