近来要了解自然语言处理方面的技术,拿百度API做个实验对,进行多次编码尝试最终成功调用。

在本人博客百度API使用系列,使用python代码实现。涉及内容如下:

1.    (一)百度AI 开放平台API调用之AccessToken获取

2.    (二)百度AI 开放平台API调用之应用实践

  • 代码修改中出现的错误,及最终的方法
  • 错误提示:"error_code": 282004,error_msg":"invalidparameter(s)"

    ·            not a valid non-string sequence or mapping object

(一)百度AI 开放平台API调用之AccessToken获取

本节是AccessToken的获取,编写原因是因为百度官方说明是针对python2的代码,使用urllib2在python已经弃用,且给出的获取代码还是需要加工才能保证整个调用流程的连贯性。现把使用过程进行分享。

实验使用的环境是Windows10  Python3

首相查看官方说明文档

获取Access Token

请求URL数据格式

向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以下参数:

·        grant_type: 必须参数,固定为client_credentials;

·        client_id: 必须参数,应用的APIKey;

·        client_secret: 必须参数,应用的SecretKey;

例如:

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

形象化即:

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】

参数是个人创建应用的参数或者自己应用的匹配密钥。

获取AccessToken代码:

代码的优势不仅在于得到access_token,更在于将其存为变量,方便随后的直接使用。

#!/ Mypython
# -*- coding: utf-8 -*-
# @Time    : 2018/4/4 18:36
# @Author  : LinYimeng
# @File    : test1.py
# @Software: PyCharm
import urllib
###第一步:获取access_token
# client_id 为官网获取的AK, client_secret 为官网获取的SK,以下一行按自己实际填写
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=****grant_type&client_id=****&client_secret=****'
request = urllib.request.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
response = urllib.request.urlopen(request)
content = response.read()
if (content):print(type(content))#<class 'bytes'>
content_str=str(content, encoding="utf-8")
###eval将字符串转换成字典
content_dir = eval(content_str)
access_token = content_dir['access_token']

若请求错误,服务器将返回的JSON文本包含以下参数:

·        error: 错误码;关于错误码的详细信息请参考下方鉴权认证错误码。

·        error_description: 错误描述信息,帮助理解和解决发生的错误。

鉴权认证错误码

error

error_description

解释

invalid_client

unknown client id

API Key不正确

invalid_client

Client authentication failed

Secret Key不正确

欢迎分享和转载,请注明出处 shuihupo:https://blog.csdn.net/shuihupo/article/details/79862004点击打开链接

实验使用的环境是Windows10  Python3

(二)百度AI 开放平台API调用之应用实践

欢迎分享和转载,请注明出处

shuihupo:https://blog.csdn.net/shuihupo/article/details/79862004

实验使用的环境是Windows10  Python3

选择调用的接口,eg:

词法分析接口

仔细阅读官方接口说明

·        接口描述

·        请求说明

·

·        HTTP方法: POST

·        (通用版)请求URL: https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer

·        (定制版)请求URL: https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer_custom

·        URL参数:

参数

access_token

通过API Key和Secret Key获取的access_token,参考“Access Token获取”

·        Header如下:

参数

Content-Type

application/json

·        body请求示例:

·       {

·         "text": "百度是一家高科技公司"

·       }

请求参数

参数名称

类型

详细说明

text

string

待分析文本(目前仅支持GBK编码),长度不超过20000字节

POST方式调用

注意:要求使用JSON格式的结构体来描述一个请求的具体内容。**发送时默认需要对body整体进行GBK编码。**若使用UTF-8编码,请在url参数中添加charset=UTF-8 (大小写敏感)例如:https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer?charset=UTF-8&access_token=24.f9ba9c5241b67688bb4adbed8bc91dec.2592000.1485570332.282335-8574074

返回格式

JSON格式,返回内容为GBK编码

这些注意事项提醒我们要注意编码的问题。

法一:使用使用urllib时会返回如下错误,搜索解决方法是因为传入数据是字典需要编码。
post_data=json.dumps(post_data).encode('GBK')

282004

invalid parameter(s)

请求中包含非法参数,请检查后重新尝试

也不说怎么错了,上正确的代码吧。

#!/ Mypython
# -*- coding: utf-8 -*-
# @Time    : 2018/3/28 16:48
# @Author  : LinYimeng
# @File    : baidulearn.py
# @Software: PyCharm
import urllib
import urllib3
import json###第一步:获取access_token
# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=pd152AVsnYc6Nbfk5Yuh9XTh&client_secret=ZTn7ASCKAGgPFEFmMxszEoQmAlVb2LRM'
request = urllib.request.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
response = urllib.request.urlopen(request)
content = response.read()
if (content):print(type(content))#<class 'bytes'>
content_str=str(content, encoding="utf-8")
###
content_dir = eval(content_str)
access_token = content_dir['access_token']
####第二部分调用
###api地址
import sys
print(sys.getdefaultencoding())
http=urllib3.PoolManager()
url = "https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer?access_token="+access_token
data = {"text":"昆明会下雨吗?"}
encodedata=json.dumps(data).encode('GBK')
request = urllib.request.Request(url, encode_data)
request.add_header('Content-Type', 'application/json')
response = urllib.request.urlopen(request)
content = response.read()  # content是一个utf-8格式的<class 'bytes'>
#bytes ⇒ str:str(b, encoding='utf-8')
content_str = str(content, encoding="gbk")
#  content被编码为gbk格式的字节串,赋给content_str
print(type(content_str))
if (content_str):print(content_str)

法二:使用使用urllib3

#!/ Mypython
# -*- coding: utf-8 -*-
# @Time    : 2018/3/28 16:48
# @Author  : LinYimeng
# @File    : baidulearn.py
# @Software: PyCharmimport urllib
import urllib3
import json###第一步:获取access_token
# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=pd152AVsnYc6Nbfk5Yuh9XTh&client_secret=ZTn7ASCKAGgPFEFmMxszEoQmAlVb2LRM'
request = urllib.request.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
response = urllib.request.urlopen(request)
content = response.read()
if (content):print(type(content))#<class 'bytes'>
content_str=str(content, encoding="utf-8")
###
content_dir = eval(content_str)
access_token = content_dir['access_token']
####第二部分调用
###api地址
import sys
print(sys.getdefaultencoding())
http=urllib3.PoolManager()
url = "https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer?access_token="+access_token
print(url)
data ={"text":"昆明会下雨吗"}
encode_data= json.dumps(data).encode('GBK')
#JSON:在发起请求时,可以通过定义body 参数并定义headers的Content-Type参数来发送一个已经过编译的JSON数据:
request = http.request('POST',url,body=encode_data,headers={'Content-Type':'application/json'})
result = str(request.data,'GBK')
print(result)

结果:{"log_id":7265183527788840706, "text": "今天北京天气怎么样?","items": [{"loc_details": [], "byte_offset": 0,"uri": "", "pos": "", "ne":"TIME", "item": "今天","basic_words": ["今天"],"byte_length": 4, "formal": ""},{"loc_details": [], "byte_offset": 4, "uri":"", "pos": "", "ne": "LOC","item": "北京","basic_words": ["北京"],"byte_length": 4, "formal": ""},{"loc_details": [], "byte_offset": 8, "uri":"", "pos": "n", "ne": "","item": "天气","basic_words": ["天气"],"byte_length": 4, "formal": ""},{"loc_details": [], "byte_offset": 12, "uri":"", "pos": "r", "ne": "","item": "怎么样","basic_words": ["怎么", "样"], "byte_length": 6,"formal": ""}, {"loc_details": [],"byte_offset": 18, "uri": "", "pos":"w", "ne": "", "item": "?", "basic_words": ["?"], "byte_length": 2,"formal": ""}]}

在实体命名方面,可以是识别到“昆明”是地名等信息。

18年6月20:摸索的新的代码,更清晰的显示。

# -*- coding: utf-8 -*-
import urllib
import urllib3
import json
import urllib.request
# with open(filename, 'r', encoding='utf8') as sampleFile:
#     lawText = sampleFile.read()
lawText="""昆明,云南省辖下地级市,地处云贵高原中部,北与凉山彝族自治州相连,西南与玉溪市、东南与红河哈尼族彝族自治州毗邻,西与楚雄彝族自治州接壤,东与曲靖市交界,是滇中城市群的核心圈、亚洲5小时航空圈的中心,国家一级物流园区布局城市之一。
"""
def baiduNER(myData,APIurl,access_token):url = APIurl+access_tokendata ={"text":myData}encode_data= json.dumps(data).encode('GBK')http = urllib3.PoolManager()#JSON:在发起请求时,可以通过定义body 参数并定义headers的Content-Type参数来发送一个已经过编译的JSON数据:request = http.request('POST',url,body=encode_data,headers={'Content-Type':'application/json'})result = str(request.data,"GBK")result_dir = eval(result)NNP ={}if "items" in  result_dir.keys():for eachWord in  result_dir.setdefault("items"):if eachWord['ne']!="":word = eachWord.get("item")nnP =  eachWord['ne']NNP[word] = nnPreturn NNP
def main():#百度AI开放平台通行证access_token ="2#####你的"##具体接口的链接APIurl = "https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer?access_token="# # myData = ' '.join(each for each in lawText.split())# NNP = baiduNER(myData,APIurl,access_token)  短文本myDataAll =lawText.split("\n")NNP ={}for each in myDataAll:NNPnew =baiduNER(each,APIurl,access_token)NNP.update(NNPnew)for key in NNP.keys():print(key, ':', NNP[key])
if __name__ == '__main__':main()
("PER   人名  LOC 地名  ORG 机构名 TIME    时间")
结果为:

玉溪市 : LOC

红河哈尼族彝族自治州 : LOC
云南省 : LOC
亚洲 : LOC
云贵高原 : LOC
西南 : LOC
楚雄彝族自治州 : LOC
曲靖市 : LOC
5小时 : TIME
一级物流园区 : LOC
凉山彝族自治州 : LOC
滇中城市群 : LOC
昆明 : LOC

欢迎分享和转载,请注明出处在云南省高校数据化运营管理工程研究中心https://blog.csdn.net/m0_37788308/article/details/79994499点击打开链接

博客同时本博客文章同步在shuihupo:https://blog.csdn.net/shuihupo/article/details/79862004点击打开链接

百度AI 开放平台API调用相关推荐

  1. Java调用百度AI开放平台API

    百度AI开放平台 百度AI开放平台是全球领先的人工智能服务平台,面向开发者及企业开放120多项全球领先的AI能力和软硬一体组件,并提供 EasyDL定制化训练平台.对话系统开发平台UNIT.自定义模板 ...

  2. 【百度智能云】教程:连接百度ai开放平台api接口并完成语音识别的任务

    前言与介绍 本文章介绍了如何在Pycharm上用python语言简单的对连接百度ai开放平台的语音识别功能api端口的调用,并在代码里实现了现录音识别内容. 平台与相关工具 windows10.Pyc ...

  3. 百度AI开放平台在线体验及API接口调用(python)

    写在前面 百度AI开放平台将目前已有的深度学习和人工智能的项目成果做了一个集成,并供用户体验和开发者调用. 在线体验 图像技术 色情识别 人像分割 图像无损放大 图像风格转换 文字识别 车牌识别 文字 ...

  4. 如何正确调用百度AI开放平台的API进行图像识别

    一.注册一个百度账号 二.点击下方链接使用百度账号登录百度智能云 百度智能云登录地址:https://login.bce.baidu.com/ 三.进入百度智能云个人中心,找到图像识别 四.点击创建图 ...

  5. python api调用百度ai平台_百度ai开放平台使用方法(附带详细案例步骤)

    百度ai开放平台 1.百度ai开放平台内有众多功能,如文字识别,语音技术等等内容,本文章以身份证识别为例子,教大家怎么使用它啦 链接走起:https://cloud.baidu.com/?from=c ...

  6. AI导论-调用百度AI开放平台进行图象识别

    0. 百度AI开放平台使用步骤 https://www.cnblogs.com/ghgxj/p/14219117.html 1 建立连接与对象 # https://ai.baidu.com/ai-do ...

  7. java 百度账号注册界面_基于百度AI开放平台的人脸识别的注册登录(1)

    百度ai开放平台首页 2.选择产品服务,人脸与人体识别,人脸识别选项.打开后如图所示 人脸识别 3.点击立即使用 3.jpg 4.点击创捷应用 创建应用 这一页大家按自己需求填写即可 5.创建完成后点 ...

  8. 图像识别教程(百度AI开放平台)

    百度AI开放平台 官网准备 网址 百度AI开放平台:http://ai.baidu.com/ 登录/注册 没有注册过百度账号可以先去注册一个. 打开控制台 选择图像识别 创建应用 正确填写 得到对应A ...

  9. 票据识别android代码,Android 百度AI开放平台-文字识别-财务票据文字识别

    简单记录一下今天关于百度AI开放平台-文字识别-财务票据文字识别的实现过程 文字识别有对应的Android SDK集成及相关Demo,文档地址如下图: SDK目录图.png 但是SDK中的返回数据字段 ...

  10. 利用百度AI开放平台的语言处理基础技术(Python)

    百度AI开放平台是一个年轻的平台,2017年1月发布了词法分析,评论观点对抽取,短文本相似度等5种基础技术接口. 本篇文章使用python接入百度AI评论观点对抽取的接口,进行酒店评论文本数据的观点对 ...

最新文章

  1. 问题:为命名空间,在此被用作类型和此项目作为引用添加将导致循环依赖项
  2. hw叠加层开还是不开_HW叠加层是什么?
  3. 周赛 Hd2270+总结改进
  4. 数据库保护(数据库备份)Sql Server2012 图形界面操作
  5. ITK:对给定LabelMap的所有LabelObject应用形态学关闭操作
  6. Zookeeper 使用
  7. java api 开发_Java开发人员应该知道的前20个库和API
  8. kali2.0安装搜狗输入法
  9. 开发者神器!Windows上最强大的虚拟桌面工具-Dexpot
  10. 蓝军HVV实用工具和网站总结
  11. 3.15 曝光:40 亿 AI 骚扰电话和 11 家合谋者
  12. ubuntu的apt源
  13. putty GB2312 BIG5 中文字符集补丁
  14. 计算机开机今入dos系统,开机如何进入dos系统_如何进入纯dos系统
  15. zabbix监控系统介绍
  16. 基于RFM的用户画像分析
  17. 破解水卡最省钱!超详细!--解决小白烦恼
  18. C Primer Plus(6) 中文版 第9章 函数 9.1 复习函数
  19. 渗透测试-11种绕过CDN查找真实IP的方法
  20. docker删除镜像及容器

热门文章

  1. ArcGIS空间统计——点密度计算
  2. xp开机黑屏故障分析
  3. YYC优雅草松鼠聚合直播系统·前端视频模块显示空白-解决办法-视频上传处理方法
  4. Action Recognition with Improved Trajectories
  5. Altium-Designer6.9安装报错Application Error
  6. 信用卡逾期别慌,有的逾期记录可撤销
  7. 关于计算机的英语作文300字,关于电脑的英语作文集锦5篇
  8. 【百战GAN】SRGAN人脸低分辨率老照片修复代码实战
  9. REST ful风格总结(在逍遥子的基础上~只供自己简单总结,详情请看原文)
  10. 远程访问ESXi网页控制台