随着线上业务的蓬勃发展,品牌和企业越来越重视客户评价。因此,情感分析成为了过去十年研究的热点领域。企业投入巨资开发高效的情感分类器
。
在探索中,发现大多数分类器采用二元分类(仅区分正面和负面情感),其中一个原因是细粒度分类器更具挑战性,且相关资源较少。
细粒度分析的关键在于,它不仅能够识别谁在谈论产品,还能精确地了解反馈中具体讨论的内容。例如,对于比较表达式如“Scam 1992
比Mirzapur 2
好得多。”,细粒度情感分析能提供比常规二元情感分类器更精确的信息。此外,双极性评论如“地点真的很差……但那里的人很出色。
”可能会使二元情感分类器给出错误的预测。
上述优势足以激发进行细粒度情感分析的动力。
如何进行细粒度情感分析:方法和工具
数据收集和准备。使用Python
、selenium
和beautifulsoup
库从Amazon
抓取了前100条智能手机评论。如果不熟悉Python
和beautifulsoup
,并请求一个用于网络抓取的库,这里有一个快速教程。
Selenium
Python绑定提供了一个简单的API,用于使用Selenium WebDriver编写功能/验收测试。
import requests
from fake_useragent import UserAgent
import csv
import re
from selenium import webdriver
from bs4 import BeautifulSoup
from selenium import webdriver
首先导入一些库。requests
库用于向URL发送请求并接收网页内容。BeautifulSoup
用于将网页内容格式化为更易读的格式。selenium
用于自动化抓取网页的过程,没有selenium
,必须发送头部和cookies,发现这个过程更繁琐。
搜索产品并获取ASIN(亚马逊标准识别号)。现在将创建基于搜索查询的辅助函数,获取所有产品的ASIN号码。这些ASIN号码将帮助稍后创建每个产品的URL。创建了两个函数searching()
和asin()
,它们搜索网页并存储所有ASIN号码在列表中。发现,当在亚马逊上搜索特定产品时,其URL可以分为三部分。
def searching(url,query,page_no):
"""
这个函数根据URL和查询搜索页面
参数:
url = 要解析数据的主要网站
query = 要搜索的产品/词
返回:如果找到页面则返回页面,否则返回错误
"""
path = url + query +"&page=" + str(page_no)
page = requests.get(path, headers =header)
if page.status_code == 200:
return page.content
else:
return "Error"
获取产品详细信息。下一步是为每个产品创建URL并访问该URL,抓取页面上所有必要的详细信息。为此,使用selenium
自动化提取细节的过程。对于amazon.in
,每个产品的URL可以分解为
"https://www.amazon.in/dp/"+asin
然后创建一个函数,使用ASIN号码访问每个URL,并获取每个产品的评论、评分、名称。然后使用Python中的CSV模块将这些值存储为CSV文件。
预处理和探索性数据分析
使用pandas
库加载保存的CSV文件,并进行一些EDA,如评分分布、评论中的字数统计以及哪些词在正面评论和负面评论中占主导地位,然后进行预处理,如清理评论和标题等。
数据集中正面和负面评分的分布。上述图表显示了正面和负面评论中字数的分布。可以看到,正面评论中的字数频率
大于负面评论,并且负面评论通常比正面评论更短
。
正面评论。可能无法从这个较小的数据集中得出太多结论,但可以注意到,“好”
这个词在正面评论中占主导地位。
负面评论。在上述词云中,“不要,买,电话
”是占主导地位的词。
字数统计。对于负面评论的字数统计,可以清楚地看到一个正态分布图,但对于正面评论,没有明显的模式。
使用Textblob进行细粒度情感分析
from textblob import TextBlob
def textblob_score(sentence):
return TextBlob(sentence).sentiment.polarity