赞
踩
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()
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
以上仅为个人写的一点demo心得,如有不足之处,欢迎指正~(友情提示,由于个人版百度账号对API的请求次数是有上限的,且用且珍惜)。通过以上的方法,是不是会有更进阶的想法了呢?这里就不再展示了,嘻嘻~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。