NLP-Cpp-SDK
C++ SDK文档
简介
Hi,您好,欢迎使用百度自然语言处理服务。
本文档主要针对C++开发者,描述百度自然语言处理接口服务的相关技术内容。如果您对文档内容有任何疑问,可以通过以下几种方式联系我们:
- 在百度云控制台内提交工单,咨询问题类型请选择自然语言处理 NLP;
- 如有疑问,进入AI社区交流:http://ai.baidu.com/forum/topic/list/169
接口能力
接口名称 | 接口能力简要描述 |
---|---|
词法分析 | 分词、词性标注、专名识别 |
短文本相似度 | 判断两个文本的相似度得分 |
评论观点抽取 | 提取一个句子观点评论的情感属性 |
情感倾向分析 | 对包含主观观点信息的文本进行情感极性类别(积极、消极、中性)的判断,并给出相应的置信度 |
文章标签 | 分析文章的标题和内容,输出能够反映文章关键信息的主题、话题、实体等多维度标签以及对应的置信度 |
文章分类 | 根据文章内容类型,对文章进行自动分类 |
文本纠错 | 识别文本中有错误的片段,进行错误提示并给出正确的建议文本内容 |
对话情绪识别 | 针对用户日常沟通文本背后所蕴含情绪的一种直观检测,可自动识别出当前会话者所表现出的情绪类别及其置信度 |
新闻摘要 | 自动抽取新闻文本中的关键信息,进而生成指定长度的新闻摘要 |
地址识别 | 精准提取快递填单文本中的姓名、电话、地址信息,自动补充和纠正,生成结构化信息 |
版本更新记录
上线日期 | 版本号 | 更新内容 |
---|---|---|
2019.12.19 | 0.8.5 | 新增地址识别 |
2018.12.7 | 0.7.8 | 新增新闻摘要接口 |
2018.6.15 | 0.7.3 | 新增文本纠错,情感识别接口 |
2018.1.26 | 0.5.1 | 新增文章分类接口 |
2018.1.12 | 0.5.0 | 新增文本标签接口 |
2017.12.21 | 0.4.0 | 更改了词向量表示接口和依存句法分析接口名称,新增了自定义词法分析接口 |
2017.11.24 | 0.3.2 | 修复windows平台VC环境的编译错误 |
2017.11.9 | 0.3.0 | 初始化参数修改 |
2017.10.31 | 0.1.0 | 自然语言处理第一版 |
快速入门
安装自然语言处理 C++ SDK
自然语言处理 C++ SDK目录结构
├── base
│ ├── base.h // 请求客户端基类
│ ├── base64.h // base64加密相关类
│ ├── http.h // http请求封装类
│ └── utils.h // 工具类
└── nlp.h // 自然语言处理 交互类
最低支持 C++ 11+
直接使用开发包步骤如下:
1.在官方网站下载C++ SDK压缩包。
2.将下载的aip-cpp-sdk-version.zip
解压, 其中文件为包含实现代码的头文件。
3.安装依赖库libcurl(需要支持https) openssl jsoncpp(>1.6.2版本,0.x版本将不被支持)。
4.编译工程时添加 C++11 支持 (gcc/clang 添加编译参数 -std=c++11), 添加第三方库链接参数 lcurl, lcrypto, ljsoncpp。
5.在源码中include nlp.h ,引入压缩包中的头文件以使用aip命名空间下的类和方法。
如果需要使用http2,请在编译libcurl时中添加nghttp2依赖,并且调用client的set_use_http2方法,设置true
新建client
client是自然语言处理的C++客户端,为使用自然语言处理的开发人员提供了一系列的交互方法。当您引入了相应头文件后就可以新建一个client对象
用户可以参考如下代码新建一个client:
#include "nlp.h"
// 设置APPID/AK/SK
std::string app_id = "你的 App ID";
std::string api_key = "你的 Api key";
std::string secret_key = "你的 Secret Key";
aip::Nlp client(app_id, api_key, secret_key);
nlp
在上面代码中,常量APP_ID
在百度云控制台中创建,常量API_KEY
与SECRET_KEY
是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的应用列表中查看。
注意:如您以前是百度云的老用户,其中API_KEY
对应百度云的“Access Key ID”,SECRET_KEY
对应百度云的“Access Key Secret”。
接口说明
词法分析
词法分析接口向用户提供分词、词性标注、专名识别三大功能;能够识别出文本串中的基本词汇(分词),对这些词汇进行重组、标注组合后词汇的词性,并进一步识别出命名实体。
Json::Value result;
std::string text = "百度是一家高科技公司";
// 调用词法分析
result = client.lexer(text, aip::null);
词法分析 请求参数详情
参数名称 | 是否必选 | 类型 | 说明 |
---|---|---|---|
text | 是 | std::string | 待分析文本(目前仅支持UTF8编码),长度不超过20000字节 |
词法分析 返回数据参数详情
参数名称 | 类型 | 必需 | 详细说明 |
---|---|---|---|
text | string | 是 | 原始单条请求文本 |
items | array(object) | 是 | 词汇数组,每个元素对应结果中的一个词 |
+item | string | 是 | 词汇的字符串 |
+ne | string | 是 | 命名实体类型,命名实体识别算法使用。词性标注算法中,此项为空串 |
+pos | string | 是 | 词性,词性标注算法使用。命名实体识别算法中,此项为空串 |
+byte_offset | int | 是 | 在text中的字节级offset(使用UTF8编码) |
+byte_length | int | 是 | 字节级length(使用UTF8编码) |
+uri | string | 否 | 链指到知识库的URI,只对命名实体有效。对于非命名实体和链接不到知识库的命名实体,此项为空串 |
+formal | string | 否 | 词汇的标准化表达,主要针对时间、数字单位,没有归一化表达的,此项为空串 |
+basic_words | array(string) | 是 | 基本词成分 |
+loc_details | array(object) | 否 | 地址成分,非必需,仅对地址型命名实体有效,没有地址成分的,此项为空数组。 |
++type | string | 是 | 成分类型,如省、市、区、县 |
++byte_offset | int | 是 | 在item中的字节级offset(使用UTF8编码) |
++byte_length | int | 是 | 字节级length(使用UTF8编码) |
词法分析 返回示例
{
"status":0,
"version":"ver_1_0_1",
"results":[
{
"retcode":0,
"text":"百度是一家高科技公司",
"items":[
{
"byte_length":4,
"byte_offset":0,
"formal":"",
"item":"百度",
"ne":"ORG",
"pos":"",
"uri":"",
"loc_details":[ ],
"basic_words":["百度"]
},
{
"byte_length":2,
"byte_offset":4,
"formal":"",
"item":"是",
"ne":"",
"pos":"v",
"uri":"",
"loc_details":[ ],
"basic_words":["是"]
},
{
"byte_length":4,
"byte_offset":6,
"formal":"",
"item":"一家",
"ne":"",
"pos":"m",
"uri":"",
"loc_details":[ ],
"basic_words":["一","家"]
},
{
"byte_length":6,
"byte_offset":10,
"formal":"",
"item":"高科技",
"ne":"",
"pos":"n",
"uri":"",
"loc_details":[ ],
"basic_words":["高","科技"]
},
{
"byte_length":4,
"byte_offset":16,
"formal":"",
"item":"公司",
"ne":"",
"pos":"n",
"uri":"",
"loc_details":[ ],
"basic_words":["公司"]
}
]
}
]
}
词性缩略说明
词性 | 含义 | 词性 | 含义 | 词性 | 含义 | 词性 | 含义 |
---|---|---|---|---|---|---|---|
n | 普通名词 | f | 方位名词 | s | 处所名词 | t | 时间名词 |
nr | 人名 | ns | 地名 | nt | 机构团体名 | nw | 作品名 |
nz | 其他专名 | v | 普通动词 | vd | 动副词 | vn | 名动词 |
a | 形容词 | ad | 副形词 | an | 名形词 | d | 副词 |
m | 数量词 | q | 量词 | r | 代词 | p | 介词 |
c | 连词 | u | 助词 | xc | 其他虚词 | w | 标点符号 |
专名识别缩略词含义
缩略词 | 含义 | 缩略词 | 含义 | 缩略词 | 含义 | 缩略词 | 含义 |
---|---|---|---|---|---|---|---|
PER | 人名 | LOC | 地名 | ORG | 机构名 | TIME | 时间 |
词法分析(定制版)
SDK 调用示例
Json::Value result;
std::string str = "百度是一家高科技公司";
// 调用词法分析(定制版)
result = nlp->lexer_custom_v1(str, aip::null);
接口详情
可参考API文档:词法分析(定制版)
短文本相似度
短文本相似度接口用来判断两个文本的相似度得分。
Json::Value result;
std::string text_1 = "浙富股份";
std::string text_2 = "万事通自考网";
// 调用短文本相似度
result = client.simnet(text_1, text_2, aip::null);
// 如果有可选参数
std::map<std::string, std::string> options;
options["model"] = "CNN";
// 带参数调用短文本相似度
result = client.simnet(text_1, text_2, options);
短文本相似度 请求参数详情
参数名称 | 是否必选 | 类型 | 可选值范围 | 说明 |
---|---|---|---|---|
text_1 | 是 | std::string | 待比较文本1(UTF8编码),最大512字节 | |
text_2 | 是 | std::string | 待比较文本2(UTF8编码),最大512字节 | |
model | 否 | std::string | BOW CNN GRNN |
默认为"BOW",可选"BOW"、"CNN"与"GRNN" |
短文本相似度 返回数据参数详情
参数 | 类型 | 描述 |
---|---|---|
log_id | number | 请求唯一标识 |
score | number | 两个文本相似度得分 |
texts | array | 输入文本 |
+text_1 | string | 第一个短文本 |
+text_2 | string | 第二个短文本 |
短文本相似度 返回示例
{
"log_id": 12345,
"texts":{
"text_1":"浙富股份",
"text_2":"万事通自考网"
},
"score":0.3300237655639648 //相似度结果
},
评论观点抽取
评论观点抽取接口用来提取一条评论句子的关注点和评论观点,并输出评论观点标签及评论观点极性。
Json::Value result;
std::string text = "三星电脑电池不给力";
// 调用评论观点抽取
result = client.comment_tag(text, aip::null);
// 如果有可选参数
std::map<std::string, std::string> options;
options["type"] = "13";
// 带参数调用评论观点抽取
result = client.comment_tag(text, options);
评论观点抽取 请求参数详情
参数名称 | 是否必选 | 类型 | 可选值范围 | 说明 |
---|---|---|---|---|
text | 是 | std::string | 评论内容(UTF8编码),最大10240字节 | |
type | 否 | std::string | 1 - 酒店 2 - KTV3 - 丽人 4 - 美食餐饮 5 - 旅游 6 - 健康 7 - 教育 8 - 商业 9 - 房产 10 - 汽车 11 - 生活 12 - 购物 13 - 3C |
评论行业类型,默认为4(餐饮美食) |
评论观点抽取 返回数据参数详情
参数 | 类型 | 描述 |
---|---|---|
log_id | uint64 | 请求唯一标识码 |
prop | string | 匹配上的属性词 |
adj | string | 匹配上的描述词 |
sentiment | int | 该情感搭配的极性(0表示消极,1表示中性,2表示积极) |
begin_pos | int | 该情感搭配在句子中的开始位置 |
end_pos | int | 该情感搭配在句子中的结束位置 |
abstract | string | 对应于该情感搭配的短句摘要 |
评论观点抽取 返回示例
{
"items": [
{
"prop":"电池",
"adj": "不给力",
"sentiment": 0,
"begin_pos": 8,
"end_pos": 18,
"abstract":"三星电脑<span>电池不给力</span>"
}
]
}
情感倾向分析
SDK 调用示例
Json::Value result;
std::string text = "百度人工智能";
// 调用情感倾向分析
result = client.sentiment_classify_v1(text, aip::null);
接口详情
可参考API文档:情感倾向分析
文章标签
SDK 调用示例
Json::Value result;
std::string title = "iphone手机出现白苹果原因及解决办法,用苹果手机的可以看下";
std::string content = "如果下面的方法还是没有解决你的问题建议来我们门店看下成都市锦江区红星路三段99号银石广场24层01室。";
// 调用文章标签
result = client.keyword_v1(title, content, aip::null);
接口详情
可参考API文档:文章标签
文章分类
SDK 调用示例
Json::Value result;
std::string title = "欧洲冠军杯足球赛";
std::string content = "欧洲冠军联赛是欧洲足球协会联盟主办的年度足球比赛,代表欧洲俱乐部足球最高荣誉和水平,被认为是全世界最高素质、最具影响力以及最高水平的俱乐部赛事,亦是世界上奖金最高的足球赛事和体育赛事之一。";
// 调用文章分类
result = client.topic_v1(title, content, aip::null);
接口详情
可参考API文档:文章分类
文本纠错
SDK 调用示例
Json::Value result;
std::string text = "百度是一家人工只能公司";
// 调用文本纠错
result = client.ecnet_v1(text, aip::null);
接口详情
可参考API文档:文本纠错
对话情绪识别
SDK 调用示例
Json::Value result;
std::string text = "本来今天高高兴兴";
// 调用对话情绪识别接口
result = client.emotion_v1(text, aip::null);
// 如果有可选参数
std::map<std::string, std::string> options;
options["scene"] = "talk";
// 带参数调用对话情绪识别接口
result = client.emotion_v1(text, options);
接口详情
可参考API文档:对话情绪识别
新闻摘要
SDK 调用示例
Json::Value result;
std::string content = "麻省理工学院的研究团队为无人机在仓库中使用RFID技术进行库存查找等工作,创造了一种...";
int max_summary_len = 300;
// 调用新闻摘要接口
result = client.news_summary_v1(content, max_summary_len, aip::null);
// 如果有可选参数
std::map<std::string, std::string> options;
options["title"] = "标题";
// 带参数调用新闻摘要接口
result = client.news_summary_v1(content, max_summary_len, options);
接口详情
可参考API文档:新闻摘要
地址识别
SDK 调用示例
Json::Value result;
std::string text = "上海市浦东新区纳贤路701号百度上海研发中心 F4A000 张三";
// 调用地址识别接口
result = client.address_v1(text, aip::null);
接口详情
可参考API文档:地址识别
错误信息
错误返回格式
若请求错误,服务器将返回的JSON文本包含以下参数:
- error_code:错误码。
- error_msg:错误描述信息,帮助理解和解决发生的错误。
错误码
错误码 | 错误信息 | 描述 |
---|---|---|
1 | Unknown error | 服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。 |
2 | Service temporarily unavailable | 服务暂不可用,请再次请求, 如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。 |
3 | Unsupported openapi method | 调用的API不存在,请检查请求URL后重新尝试,一般为URL中有非英文字符,如“-”,可手动输入重试 |
4 | Open api request limit reached | 集群超限额,请再次请求, 如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。 |
6 | No permission to access data | 无权限访问该用户数据,创建应用时未勾选相关接口 |
13 | Get service token failed | 获取token失败 |
14 | IAM Certification failed | IAM 鉴权失败 |
15 | app not exsits or create failed | 应用不存在或者创建失败 |
17 | Open api daily request limit reached | 每天请求量超限额,可通过QQ群(860337848)联系群管、提交工单提升限额 |
18 | Open api qps request limit reached | QPS超限额,可通过QQ群(860337848)联系群管、提交工单提升限额 |
19 | Open api total request limit reached | 请求总量超限额,可通过QQ群(860337848)联系群管、提交工单提升限额 |
100 | Invalid parameter | 无效的access_token参数,请检查后重新尝试 |
110 | Access token invalid or no longer valid | access_token无效 |
111 | Access token expired | access token过期 |
282000 | internal error | 服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(632426386)或工单联系技术支持团队。 |
282002 | input encoding error | 编码错误,请使用GBK编码 |
282004 | invalid parameter(s) | 请求中包含非法参数,请检查后重新尝试 |
282130 | no result | 当前查询无结果返回,出现此问题的原因一般为:参数配置存在问题,请检查后重新尝试 |
282131 | input text too long | 输入长度超限,请查看文档说明 |
282133 | param {参数名} not exist | 接口参数缺失 |
282300 | word error | word不在算法词典中 |
282301 | word_1 error | word_1提交的词汇暂未收录,无法比对相似度 |
282302 | word_2 error | word_2提交的词汇暂未收录,无法比对相似度 |
282303 | word_1&word_2 error | word_1和word_2暂未收录,无法比对相似度 |