Python实现某站热门评论情感分析----NLP自然语言处理

前言

最近在研究自然语言处理NLP相关知识概念,学起来总是很痛苦,没有头绪,无聊。歇息片刻,便想找个有趣的项目练练手,提升下兴趣,便开始了这个小项目。

准备工作

一些基础

  1. 申请一个百度AI开放平台的账号,并免费开通自然语言处理API接口。(最重要的功能!!!暂先使用百度)
  2. 具备基础的python语言基础及爬虫基础。

需要安装的第三方依赖(已安装过的无需再装)

  1. pip install baidu-aip 用于使用百度AI服务
  2. pip install requests 用于发送爬虫请求
  3. pip install xlwt 用于写入Excel表格评论分析结果
总体思路

我们可以分为以下三个步骤进行评论情感分析:

  1. 首先,我们需要使用python爬虫爬取热门视频的大量评论内容,并存放起来。
  2. 其次,当我们已经得到大量评论内容,就可以直接调用百度AI的服务进行评论情感分析,获得分析结果,再次存放起来。
  3. 最后,将评论情感分析结果写入Excel表格中,方便统计查阅。
开始动手

这次我选择爬取一个某站上一个的热门视频【iPhone14将与华为Mate50同期发布】(不让上链接,小伙伴可自行搜索),并分析评论区用户们的具体评论情感。

Python 爬取热门视频评论信息

请求地址因为涉及到版权问题,审核无法通过,所以代码里面就不贴上去了,需要的小伙伴可以与我联系。

'''
获取视频下方所有的评论信息及评论作者
'''
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

Baidu AI 分析所得评论的情感信息
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 自动写入所有评论情感信息
'''
信息保存至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)
运行结果

请添加图片描述
请添加图片描述

Excel文件结果

请添加图片描述
请添加图片描述

小结

其实做出来心里还是很激动的哈哈哈,但是最重要的功能情绪分析还是百度团队的成果,希望以后自己也能够为AI技术贡献自己的成果,加油!

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gaolw1102

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值