当前位置:   article > 正文

python -百度智能云API -语言处理技术中的语句情感倾向分析

python -百度智能云API -语言处理技术中的语句情感倾向分析

python 百度智能云API 语言处理技术中的语句情感倾向分析

背景

我姐的毕业论文中,要用到情感分析,他已经利用爬虫软件爬取了微博各个账号,关于某话题的正文和评论,存储在excel中。
打算利用百度智能云中,自然语言处理 -> 情感倾向分析

实现

获取 access_token

API官方文档

要使用到这两个参数

  • client_id: 必须参数, 应用的API Key;
  • client_secret: 必须参数, 应用的Secret Key;

这两个参数的具体位置:

  • 首先用百度账号登录官网: https://login.bce.baidu.com/?account=
  • 找到你的产品 : 自然语言处理
  • 应用中,新建应用,随便输入一个名字和描述

在这里插入图片描述

  • 就可以看到我们需要的两个参数 API Key 和 Secret Key 复制下来,替换我下面的代码就可以了。
    在这里插入图片描述
def get_token():
	# return 'XXXXXX'
    API_Key = '上图复制粘贴'
    Scret_Key = '上图复制粘贴'
    url3 = 'https://aip.baidubce.com/oauth/2.0/token'
    data3 = {
        "grant_type":"client_credentials",     # 固定值
        "client_id":API_Key            #
        "client_secret":Scret_Key 
    }
    resp3 = requests.post(url3,data=data3)
    print("access_token:" ,resp3.json()['access_token'])
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

请求情感分析接口

import requests
import json,time
import re,os

# 通过 re 模块去除文本中的HTML代码和表情符号 
def re_delete(content):
    dr = re.compile(r'<[^>]+>', re.S)
    emoji = re.compile("["u"\U0001F600-\U0001F64F"u"\U0001F300-\U0001F5FF"
                               u""u"\U0001F680-\U0001F6FF"u"\U0001F1E0-\U0001F1FF""]+", flags=re.UNICODE)
    content = dr.sub('', content)
    content = emoji.sub('', content)		# 去除表情
    return content[:682]					# 对文本进行切割

# 请求百度接口,返回积极概率,置信度,消极概率,分类结果 0负向,1中性,2正向
def fenxi(tex = "我爱祖国"):
    # headers = {'Content-Type': 'application/json'}        # 不加也能请求到
    tex = re_delete(tex)									# 如果你的文本没有HTML和表情符什么的,可以不用这个
    if not tex:
        return []
    # 下面的access_token参数是全局变量,执行get_token返回的
    url = f'https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify?access_token={access_token}&charset=UTF-8'
    if len(tex.encode()) < 2048:							# 文档中写的文本字节长度最多2048个字节,差不多就是680个汉字
        body = {'text' : tex}
        # 将python 字典类型转成json类型
        body = json.dumps(body)
        # print(body)
        resp1 = requests.post(url=url,data=body)
        try:
            items = resp1.json()['items'][0]
            # round(x,3)  表示将浮点数x 保留三位小数
            return [round(items['positive_prob'],3), round(items['confidence'],3),
                    round(items['negative_prob'],3), items['sentiment']]
        except:
            print("请求有误\n",resp1.text)
            # 打印出来的错误代码,可以对照官方文档进行对比
            return ["请求有误"]
    else:
        print("字节编码长度超过2048\n",tex)
        # 因为我的文本一般没有这么长,所以我就没继续往下分析了,你可以在这里将文本进行拆分再进行调用接口
        return ["长度超了"]
        
if __name__ == '__main__':
    access_token = get_token()
    result = fenxi("我爱祖国")
    print(result)
  • 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

在这里插入图片描述
官方文档 : https://cloud.baidu.com/apiexplorer/index.html?Product=GWSE-p64nCQphmTY&Api=GWAI-7WcMrFnWb8M
可以在上面那个网址进行查看参数说明和在线调用尝试,感觉比之前那个文档写的详细。

读取文本操作

  • 请求接口成功了,接下来就差代码批量读取文本进行请求了
  • 每个人的文本不一样,可能csv,excel,txt 等等,就不在这详细写了
  • 提醒一点就是,百度有个QPS限制,就是一秒最多请求几次,请求多了就返回错误
  • 你在请求时,就加上time.sleep(0.5)就行了,0.5这个数字就是1/qQPS
  • 当然,你也可以花钱,他请求次数就会很多,你可以多找几个百度账号,多获取access_token就可以了
  • pycharm 可以同时运行多个py代码的(同一个账号申请不同应用的access_token还是有限制)

在这里插入图片描述

  • 谢谢阅读,觉得有用的话,不如点个赞再走
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/539437
推荐阅读
相关标签
  

闽ICP备14008679号