最近在研究自然语言处理NLP相关知识概念,学起来总是很痛苦,没有头绪,无聊。歇息片刻,便想找个有趣的项目练练手,提升下兴趣,便开始了这个小项目。
一些基础
需要安装的第三方依赖(已安装过的无需再装)
我们可以分为以下三个步骤进行评论情感分析:
这次我选择爬取一个某站上一个的热门视频【iPhone14将与华为Mate50同期发布】(不让上链接,小伙伴可自行搜索),并分析评论区用户们的具体评论情感。
请求地址因为涉及到版权问题,审核无法通过,所以代码里面就不贴上去了,需要的小伙伴可以与我联系。
'''
获取视频下方所有的评论信息及评论作者
'''
def getAllComments():
# Step1:设置请求路径 url、存放评论及作者的评论列表
url = '***********************************'
comments_list = []
#循环请求,爬取大量视频评论
for i in range(1, 10):
#Step2: 设置请求参数
param = {
'csrf': '4b88992977611823b137a5a003a56075',
'mode': '3',
'next': str(i),
'oid': '557078008',
'plat': '1',
'type': '1'
}
#Setp3: 使用UA(User)伪装策略进行请求发送
response = requests.get(url=url, params=param, headers=header)
#Step4: 获取响应信息,信息格式为json格式的数据,获取响应信息内的所有评论信息
data = response.json()['data']['replies']
#Step5: 遍历所有评论信息,打印输出并存放到评论列表中
for comments in data:
#打印输出
print(comments['member']['uname'] + ':\t' + comments['content']['message'])
#封装数据,存放列表
comments_list.append(
{
'user':comments['member']['uname'], #存放评论用户
'comment':comments['content']['message'] #存放评论内容
}
)
#每间隔0.1s爬取一次,避免特定反爬虫策略
time.sleep(0.1)
return comments_list
from aip import AipNlp
""" 你的 APPID AK SK """
# 如不知如何获得请看我这篇文章:
# https://blog.csdn.net/weixin_43479947/article/details/124256347?spm=1001.2014.3001.5502
APP_ID = '**********'
API_KEY = '**********'
SECRET_KEY = '**********'
client = AipNlp(APP_ID, API_KEY, SECRET_KEY)
'''
获取所有的评论信息及评论情感预测信息
'''
def getAllSentiments(comments_list):
#存放所有评论及情感预测信息的列表
comment_sentiments = []
#循环遍历所有评论,并预测评论的情感
for comment in comments_list:
#异常处理,防止评论出现特殊字符导致程序异常终止
try:
#使用 Baidu AI的NLP自然语言处理接口.进行评论情感分析,并返回分析结果
sentiment_result = client.sentimentClassify(comment['comment'])['items'][0]
#以下为 sentiment_result 内的参数属性
# confidence---->代表可信度
# negative_prob---->代表消极情绪概率
# positive_prob---->代表积极情绪概率
# sentiment---->代表情绪识别结果,0为消极,1为中性,2为积极
#封装评论及预测,并添加到预测列表中
comment_sentiment = {
'user': comment['user'], #评论用户
'comment': comment['comment'], #评论内容
#format()函数统一将 小数数据 转化为 百分比数据
'positive_prob': format(sentiment_result['positive_prob'], '.2%'), #情绪积极概率
'negative_prob': format(sentiment_result['negative_prob'], '.2%'), #情绪消极概率
'sentiment': sentiment_result['sentiment'], #情绪结果
'confidence': format(sentiment_result['confidence'], '.2%'), #可信度概率
}
print(comment_sentiment) #输出封装好的数据
comment_sentiments.append(comment_sentiment) #添加到情绪列表之中
except Exception:
pass
time.sleep(0.5) #由于情绪识别请求存在QPS限制,故每0.5s请求一次
return comment_sentiments #返回所有情绪结果
'''
信息保存至Excel表格
'''
def saveExcel(comment_sentiments):
#Step1: 创建excel表格类型文件,即工作薄对象,编码格式为 utf-8
workbook = xlwt.Workbook(encoding='utf-8')
#Step2: 创建工作表对象
worksheet = workbook.add_sheet('sentiment analysis')
#Step3: 设置表头信息
worksheet.write(0, 0, '评论用户')
worksheet.write(0, 1, '评论内容')
worksheet.write(0, 2, '积极概率')
worksheet.write(0, 3, '消极概率')
worksheet.write(0, 4, '情绪结果(0消极、1中性、2积极)')
worksheet.write(0, 5, '可信度')
#Step4: 将所有的评论情绪信息写入Excel表格之中
for i in range(len(comment_sentiments)):
worksheet.write(i+1, 0, comment_sentiments[i]['user'])
worksheet.write(i+1, 1, comment_sentiments[i]['comment'])
worksheet.write(i+1, 2, comment_sentiments[i]['positive_prob'])
worksheet.write(i+1, 3, comment_sentiments[i]['negative_prob'])
worksheet.write(i+1, 4, comment_sentiments[i]['sentiment'])
worksheet.write(i+1, 5, comment_sentiments[i]['confidence'])
#Step5: 保存Excel文件至本地
workbook.save('./excel/sentiments.xls')
#打印保存信息
print('Save Successfully!')
'''
某站视频【iPhone14将与华为Mate50同期发布】
小伙伴们可以自行搜索哦
'''
if __name__ == '__main__':
comments_list = getAllComments()
comment_sentiments = getAllSentiments(comments_list)
saveExcel(comment_sentiments)
其实做出来心里还是很激动的哈哈哈,但是最重要的功能情绪分析还是百度团队的成果,希望以后自己也能够为AI技术贡献自己的成果,加油!