资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

NLP-Cpp-SDK

C++ SDK文档

简介

Hi,您好,欢迎使用百度自然语言处理服务。

本文档主要针对C++开发者,描述百度自然语言处理接口服务的相关技术内容。如果您对文档内容有任何疑问,可以通过以下几种方式联系我们:

接口能力

接口名称 接口能力简要描述
词法分析 分词、词性标注、专名识别
短文本相似度 判断两个文本的相似度得分
评论观点抽取 提取一个句子观点评论的情感属性
情感倾向分析 对包含主观观点信息的文本进行情感极性类别(积极、消极、中性)的判断,并给出相应的置信度
文章标签 分析文章的标题和内容,输出能够反映文章关键信息的主题、话题、实体等多维度标签以及对应的置信度
文章分类 根据文章内容类型,对文章进行自动分类
文本纠错 识别文本中有错误的片段,进行错误提示并给出正确的建议文本内容
对话情绪识别 针对用户日常沟通文本背后所蕴含情绪的一种直观检测,可自动识别出当前会话者所表现出的情绪类别及其置信度
新闻摘要 自动抽取新闻文本中的关键信息,进而生成指定长度的新闻摘要
地址识别 精准提取快递填单文本中的姓名、电话、地址信息,自动补充和纠正,生成结构化信息

版本更新记录

上线日期 版本号 更新内容
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_KEYSECRET_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暂未收录,无法比对相似度
上一篇
NLP-Node-SDK
下一篇
智能创作平台(SaaS)