python利用百度AI做情感倾向分析的一个demo

python利用百度AI做情感倾向分析的一个demo
背景:能不能根据某一段文字,来分析这段文字所表达的情感是积极的还是消极的呢?那么接下来所说的方法或许对你有所帮助!
1.首先我们需要在百度AI开放平台 “创建应用”,根据提示写一些描述,接着就可以生成我们自己的应用,
包括:应用名称、AppID、API Key、Secret Key(最后这两个Key是我们访问其API的关键)。
2.由于我们是使用python调用api的方式,所以接下来根据API使用文档,需要先获取Access Token(详见https://cloud.baidu.com/doc/NLP/s/Tk6z52d7c#%E8%8E%B7%E5%8F%96access-token)
授权服务地址:https://aip.baidubce.com/oauth/2.0/token,
发送请求方式推荐使用POST
URL需携带的参数:
grant_type: 必须参数,固定为client_credentials;
client_id: 必须参数,应用的API Key;
client_secret: 必须参数,应用的Secret Key;

示例:https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pVw2&

正常请求返回结果格式如下:
{
  "refresh_token": "25.b55fe1d287227ca97aab219bb249b8ab.315360000.1798284651.282335-8574074",
  "expires_in": 2592000,
  "scope": "public wise_adapt",
  "session_key": "9mzdDZXu3dENdFZQurfg0Vz8slgSgvvOAUebNFzyzcpQ5EnbxbF+hfG9DQkpUVQdh4p6HbQcAiz5RmuBAja1JJGgIdJI",
  "access_token": "24.6c5e1ff107f0e8bcef8c46d3424a0e78.2592000.1485516651.282335-8574074",
  "session_secret": "dfac94a3489fe9fca7c3221cbf7525ff"
}

3.通过上一步,已经可以获取到access_token了,接下来进入正题,如何做情感倾向分析:
情感倾向分析包括通用版和定制版,
(情感分析 - 通用版) (由于缺少模型数据,所以我们仅使用一下通用版,已能满足正常使用,如有特殊需求,可使用下面的定制版)
HTTP方法: POST 请求URL: https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify

(情感分析 - 定制版,注意需要先保证定制模型生效成功再调用,否则接口会报错) 
HTTP方法: POST 请求URL: https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify_custom
URL参数:

参数            值
access_token    通过API Key和Secret Key获取的access_token,参考“Access Token获取”
Header如下:

参数            值
Content-Type    application/json

Body请求示例:

{"text": "华为是一家伟大的公司"}

请求格式
POST方式调用

返回示例:
{
    "text":"华为是一家伟大的公司",
    "items":[
        {
            "sentiment":2,    //表示情感极性分类结果
            "confidence":0.40, //表示分类的置信度
            "positive_prob":0.73, //表示属于积极类别的概率
            "negative_prob":0.27  //表示属于消极类别的概率
        }
    ]
}

4.接下来看一下完整的代码:

import requests
import json

App_Key = '自己申请的AK'
Secret_Key = '自己申请的SK'


# 情感分析
def getEmotion(inputText, access_token):

    url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify?access_token=' + access_token
    header = {'Content-Type	': 'application/json'}
    body = {'text': inputText}
    requests.packages.urllib3.disable_warnings()
    res = requests.post(url=url, data=json.dumps(body), headers=header, verify=False)

    #  返回接口格式:
    # {
    #     "log_id": 7475291888689599393,    # 请求唯一标识码
    #     "text": "我最好看",               #
    #     "items": [
    #         {
    #             "positive_prob": 0.999976,   # 表示属于积极类别的概率 ,取值范围[0,1]
    #             "confidence": 0.999946,       # 表示分类的置信度,取值范围[0,1]
    #             "negative_prob": 2.42354e-05,  # 表示属于消极类别的概率,取值范围[0,1]
    #             "sentiment": 2             # 表示情感极性分类结果,0:负向,1:中性,2:正向
    #         }]
    # }

    if res.status_code == 200:
        info = json.loads(res.text)
        print(info)
        if 'items' in info and len(info['items']) > 0:
            sentiment = info['items'][0]['sentiment']
            if sentiment == 2:
                print(inputText+'  情感分析结果是:正向')
            elif sentiment == 1:
                print(inputText + '  情感分析结果是:中性')
            else:
                print(inputText + '  情感分析结果是:负向')



# 获取token
def getToken():
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+App_Key + '&client_secret=' + Secret_Key
    response = requests.get(host)

    if response.status_code == 200:
        info = json.loads(response.text)  # 将字符串转成字典
        access_token = info['access_token']  # 解析数据到access_token
        return access_token
    return ''


#主函数
def main():
    inputText = input('请输入需要分析的语句:')
    accessToken = getToken()
    getEmotion(inputText, accessToken)

if __name__ == '__main__':
    main()


以上仅为个人写的一点demo心得,如有不足之处,欢迎指正~(友情提示,由于个人版百度账号对API的请求次数是有上限的,且用且珍惜)。通过以上的方法,是不是会有更进阶的想法了呢?这里就不再展示了,嘻嘻~
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值