NLP-Node-SDK
Nodejs SDK文档
简介
Hi,您好,欢迎使用百度自然语言处理服务。
本文档主要针对Nodejs开发者,描述百度自然语言处理接口服务的相关技术内容。如果您对文档内容有任何疑问,可以通过以下几种方式联系我们:
- 在百度云控制台内提交工单,咨询问题类型请选择自然语言处理 NLP;
- 如有疑问,进入AI社区交流:http://ai.baidu.com/forum/topic/list/169
接口能力
接口名称 | 接口能力简要描述 |
---|---|
词法分析 | 分词、词性标注、专名识别 |
短文本相似度 | 判断两个文本的相似度得分 |
评论观点抽取 | 提取一个句子观点评论的情感属性 |
情感倾向分析 | 对包含主观观点信息的文本进行情感极性类别(积极、消极、中性)的判断,并给出相应的置信度 |
文章标签 | 分析文章的标题和内容,输出能够反映文章关键信息的主题、话题、实体等多维度标签以及对应的置信度 |
文章分类 | 根据文章内容类型,对文章进行自动分类 |
文本纠错 | 识别文本中有错误的片段,进行错误提示并给出正确的建议文本内容 |
对话情绪识别 | 针对用户日常沟通文本背后所蕴含情绪的一种直观检测,可自动识别出当前会话者所表现出的情绪类别及其置信度 |
新闻摘要 | 自动抽取新闻文本中的关键信息,进而生成指定长度的新闻摘要 |
地址识别 | 精准提取快递填单文本中的姓名、电话、地址信息,自动补充和纠正,生成结构化信息 |
版本更新记录
上线日期 | 版本号 | 更新内容 |
---|---|---|
2019.12.19 | 2.4.5 | 新增地址识别 |
2018.12.7 | 2.3.8 | |
2018.6.15 | 2.3.3 | 新增文本纠错,情感识别接口 |
2018.1.26 | 2.1.1 | 新增文章分类接口 |
2018.1.12 | 2.1.0 | 新增文本标签接口 |
2017.12.21 | 2.0.0 | 实现代码重构,新增自定义词法分析接口,接口返回标准promise对象 |
2017.6.30 | 1.2.0 | 增加句法依存接口 |
2017.4.13 | 1.0.0 | 初版 |
快速入门
安装自然语言处理 Node SDK
自然语言处理 Node SDK目录结构
├── src
│ ├── auth //授权相关类
│ ├── http //Http通信相关类
│ ├── client //公用类
│ ├── util //工具类
│ └── const //常量类
├── AipNlp.js //自然语言处理交互类
├── index.js //入口文件
└── package.json //npm包描述文件
支持 node 版本 4.0+
查看源码
Nodejs SDK代码已开源,您可以查看代码、或者在License范围内修改和编译SDK以适配您的环境。
github链接:https://github.com/Baidu-AIP/nodejs-sdk
直接使用node开发包步骤如下:
1.在官方网站下载node SDK压缩包。
2.将下载的aip-node-sdk-version.zip
解压后,复制到工程文件夹中。
3.进入目录,运行npm install安装sdk依赖库
4.把目录当做模块依赖
其中,version
为版本号,添加完成后,用户就可以在工程中使用自然语言处理 Node SDK。
直接使用npm安装依赖:
npm install baidu-aip-sdk
新建AipNlpClient
AipNlpClient是自然语言处理的node客户端,为使用自然语言处理的开发人员提供了一系列的交互方法。
用户可以参考如下代码新建一个AipNlpClient:
var AipNlpClient = require("baidu-aip-sdk").nlp;
// 设置APPID/AK/SK
var APP_ID = "你的 App ID";
var API_KEY = "你的 Api Key";
var SECRET_KEY = "你的 Secret Key";
// 新建一个对象,建议只保存一个对象调用服务接口
var client = new AipNlpClient(APP_ID, API_KEY, SECRET_KEY);
为了使开发者更灵活的控制请求,模块提供了设置全局参数和全局请求拦截器的方法;本库发送网络请求依赖的是request模块,因此参数格式与request模块的参数相同
更多参数细节您可以参考request官方参数文档。
如果要在TS模块中使用以下命令安装github的TypeScript分支
npm install git+https://github.com/Baidu-AIP/nodejs-sdk.git#TypeScrip
var HttpClient = require("baidu-aip-sdk").HttpClient;
// 设置request库的一些参数,例如代理服务地址,超时时间等
// request参数请参考 https://github.com/request/request#requestoptions-callback
HttpClient.setRequestOptions({timeout: 5000});
// 也可以设置拦截每次请求(设置拦截后,调用的setRequestOptions设置的参数将不生效),
// 可以按需修改request参数(无论是否修改,必须返回函数调用参数)
// request参数请参考 https://github.com/request/request#requestoptions-callback
HttpClient.setRequestInterceptor(function(requestOptions) {
// 查看参数
console.log(requestOptions)
// 修改参数
requestOptions.timeout = 5000;
// 返回参数
return requestOptions;
});
在上面代码中,常量APP_ID
在百度云控制台中创建,常量API_KEY
与SECRET_KEY
是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的应用列表中查看。
注意:如您以前是百度云的老用户,其中API_KEY
对应百度云的“Access Key ID”,SECRET_KEY
对应百度云的“Access Key Secret”。
接口说明
词法分析
词法分析接口向用户提供分词、词性标注、专名识别三大功能;能够识别出文本串中的基本词汇(分词),对这些词汇进行重组、标注组合后词汇的词性,并进一步识别出命名实体。
var text = "百度是一家高科技公司";
// 调用词法分析
client.lexer(text).then(function(result) {
console.log(JSON.stringify(result));
}).catch(function(err) {
// 如果发生网络错误
console.log(err);
});
词法分析 请求参数详情
参数名称 | 是否必选 | 类型 | 说明 |
---|---|---|---|
text | 是 | string | 待分析文本(目前仅支持GBK编码),长度不超过20000字节 |
词法分析 返回数据参数详情
参数名称 | 类型 | 必需 | 详细说明 |
---|---|---|---|
text | string | 是 | 原始单条请求文本 |
items | array(object) | 是 | 词汇数组,每个元素对应结果中的一个词 |
+item | string | 是 | 词汇的字符串 |
+ne | string | 是 | 命名实体类型,命名实体识别算法使用。词性标注算法中,此项为空串 |
+pos | string | 是 | 词性,词性标注算法使用。命名实体识别算法中,此项为空串 |
+byte_offset | int | 是 | 在text中的字节级offset(使用GBK编码) |
+byte_length | int | 是 | 字节级length(使用GBK编码) |
+uri | string | 否 | 链指到知识库的URI,只对命名实体有效。对于非命名实体和链接不到知识库的命名实体,此项为空串 |
+formal | string | 否 | 词汇的标准化表达,主要针对时间、数字单位,没有归一化表达的,此项为空串 |
+basic_words | array(string) | 是 | 基本词成分 |
+loc_details | array(object) | 否 | 地址成分,非必需,仅对地址型命名实体有效,没有地址成分的,此项为空数组。 |
++type | string | 是 | 成分类型,如省、市、区、县 |
++byte_offset | int | 是 | 在item中的字节级offset(使用GBK编码) |
++byte_length | int | 是 | 字节级length(使用GBK编码) |
词法分析 返回示例
{
"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 | 时间 |
词法分析(定制版)
词法分析接口向用户提供分词、词性标注、专名识别三大功能;能够识别出文本串中的基本词汇(分词),对这些词汇进行重组、标注组合后词汇的词性,并进一步识别出命名实体。
var text = "百度是一家高科技公司";
// 调用词法分析(定制版)
client.lexerCustom(text).then(function(result) {
console.log(JSON.stringify(result));
}).catch(function(err) {
// 如果发生网络错误
console.log(err);
});
词法分析(定制版) 请求参数详情
参数名称 | 是否必选 | 类型 | 说明 |
---|---|---|---|
text | 是 | string | 待分析文本(目前仅支持GBK编码),长度不超过20000字节 |
词法分析(定制版) 返回数据参数详情
参数名称 | 类型 | 必需 | 详细说明 |
---|---|---|---|
text | string | 是 | 原始单条请求文本 |
items | array(object) | 是 | 词汇数组,每个元素对应结果中的一个词 |
+item | string | 是 | 词汇的字符串 |
+ne | string | 是 | 命名实体类型,命名实体识别算法使用。词性标注算法中,此项为空串 |
+pos | string | 是 | 词性,词性标注算法使用。命名实体识别算法中,此项为空串 |
+byte_offset | int | 是 | 在text中的字节级offset(使用GBK编码) |
+byte_length | int | 是 | 字节级length(使用GBK编码) |
+uri | string | 否 | 链指到知识库的URI,只对命名实体有效。对于非命名实体和链接不到知识库的命名实体,此项为空串 |
+formal | string | 否 | 词汇的标准化表达,主要针对时间、数字单位,没有归一化表达的,此项为空串 |
+basic_words | array(string) | 是 | 基本词成分 |
+loc_details | array(object) | 否 | 地址成分,非必需,仅对地址型命名实体有效,没有地址成分的,此项为空数组。 |
++type | string | 是 | 成分类型,如省、市、区、县 |
++byte_offset | int | 是 | 在item中的字节级offset(使用GBK编码) |
++byte_length | int | 是 | 字节级length(使用GBK编码) |
词法分析(定制版) 返回示例
参考词法分析接口
短文本相似度
短文本相似度接口用来判断两个文本的相似度得分。
var text1 = "浙富股份";
var text2 = "万事通自考网";
// 调用短文本相似度
client.simnet(text1, text2).then(function(result) {
console.log(JSON.stringify(result));
}).catch(function(err) {
// 如果发生网络错误
console.log(err);
});
// 如果有可选参数
var options = {};
options["model"] = "CNN";
// 带参数调用短文本相似度
client.simnet(text1, text2, options).then(function(result) {
console.log(JSON.stringify(result));
}).catch(function(err) {
// 如果发生网络错误
console.log(err);
});;
短文本相似度 请求参数详情
参数名称 | 是否必选 | 类型 | 可选值范围 | 说明 |
---|---|---|---|---|
text_1 | 是 | string | 待比较文本1(GBK编码),最大512字节 | |
text_2 | 是 | string | 待比较文本2(GBK编码),最大512字节 | |
model | 否 | 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 //相似度结果
},
评论观点抽取
评论观点抽取接口用来提取一条评论句子的关注点和评论观点,并输出评论观点标签及评论观点极性。
var text = "三星电脑电池不给力";
// 调用评论观点抽取
client.commentTag(text).then(function(result) {
console.log(JSON.stringify(result));
}).catch(function(err) {
// 如果发生网络错误
console.log(err);
});
// 如果有可选参数
var options = {};
options["type"] = 13;
// 带参数调用评论观点抽取
client.commentTag(text, options).then(function(result) {
console.log(JSON.stringify(result));
}).catch(function(err) {
// 如果发生网络错误
console.log(err);
});;
评论观点抽取 请求参数详情
参数名称 | 是否必选 | 类型 | 可选值范围 | 说明 |
---|---|---|---|---|
text | 是 | string | 评论内容(GBK编码),最大10240字节 | |
type | 否 | 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>"
}
]
}
情感倾向分析
对包含主观观点信息的文本进行情感极性类别(积极、消极、中性)的判断,并给出相应的置信度。
var text = "苹果是一家伟大的公司";
// 调用情感倾向分析
client.sentimentClassify(text).then(function(result) {
console.log(JSON.stringify(result));
}).catch(function(err) {
// 如果发生网络错误
console.log(err);
});
情感倾向分析 请求参数详情
参数名称 | 是否必选 | 类型 | 说明 |
---|---|---|---|
text | 是 | string | 文本内容(GBK编码),最大2048字节 |
情感倾向分析 返回数据参数详情
参数 | 是否必须 | 类型 | 说明 |
---|---|---|---|
text | 是 | string | 输入的文本内容 |
items | 是 | array | 输入的词列表 |
+sentiment | 是 | number | 表示情感极性分类结果, 0:负向,1:中性,2:正向 |
+confidence | 是 | number | 表示分类的置信度 |
+positive_prob | 是 | number | 表示属于积极类别的概率 |
+negative_prob | 是 | number | 表示属于消极类别的概率 |
情感倾向分析 返回示例
{
"text":"苹果是一家伟大的公司",
"items":[
{
"sentiment":2, //表示情感极性分类结果
"confidence":0.40, //表示分类的置信度
"positive_prob":0.73, //表示属于积极类别的概率
"negative_prob":0.27 //表示属于消极类别的概率
}
]
}
文章标签
文章标签服务能够针对网络各类媒体文章进行快速的内容理解,根据输入含有标题的文章,输出多个内容标签以及对应的置信度,用于个性化推荐、相似文章聚合、文本内容分析等场景。
var title = "iphone手机出现“白苹果”原因及解决办法,用苹果手机的可以看下";
var content = "如果下面的方法还是没有解决你的问题建议来我们门店看下成都市锦江区红星路三段99号银石广场24层01室。";
// 调用文章标签
client.keyword(title, content).then(function(result) {
console.log(JSON.stringify(result));
}).catch(function(err) {
// 如果发生网络错误
console.log(err);
});
文章标签 请求参数详情
参数名称 | 是否必选 | 类型 | 说明 |
---|---|---|---|
title | 是 | string | 篇章的标题,最大80字节 |
content | 是 | string | 篇章的正文,最大65535字节 |
文章标签 返回数据参数详情
参数 | 是否必须 | 类型 | 说明 |
---|---|---|---|
items | 是 | array(object) | 关键词结果数组,每个元素对应抽取到的一个关键词 |
+tag | 是 | string | 关注点字符串 |
+score | 是 | number | 权重(取值范围0~1) |
文章标签 返回示例
{
"log_id": 4457308639853058292,
"items": [
{
"score": 0.997762,
"tag": "iphone"
},
{
"score": 0.861775,
"tag": "手机"
},
{
"score": 0.845657,
"tag": "苹果"
},
{
"score": 0.83649,
"tag": "苹果公司"
},
{
"score": 0.797243,
"tag": "数码"
}
]
}
文章分类
对文章按照内容类型进行自动分类,首批支持娱乐、体育、科技等26个主流内容类型,为文章聚类、文本内容分析等应用提供基础技术支持。
var title = "欧洲冠军杯足球赛";
var content = "欧洲冠军联赛是欧洲足球协会联盟主办的年度足球比赛,代表欧洲俱乐部足球最高荣誉和水平,被认为是全世界最高素质、最具影响力以及最高水平的俱乐部赛事,亦是世界上奖金最高的足球赛事和体育赛事之一。";
// 调用文章分类
client.topic(title, content).then(function(result) {
console.log(JSON.stringify(result));
}).catch(function(err) {
// 如果发生网络错误
console.log(err);
});
文章分类 请求参数详情
参数名称 | 是否必选 | 类型 | 说明 |
---|---|---|---|
title | 是 | string | 篇章的标题,最大80字节 |
content | 是 | string | 篇章的正文,最大65535字节 |
文章分类 返回数据参数详情
参数名称 | 类型 | 详细说明 |
---|---|---|
item | object | 分类结果,包含一级与二级分类 |
+lv1_tag_list | array of objects | 一级分类结果 |
+lv2_tag_list | array of objects | 二级分类结果 |
++score | float | 类别标签对应得分,范围0-1 |
++tag | string | 类别标签 |
文章分类 返回示例
{
"log_id": 5710764909216517248,
"item": {
"lv2_tag_list": [
{
"score": 0.895467,
"tag": "足球"
},
{
"score": 0.794878,
"tag": "国际足球"
}
],
"lv1_tag_list": [
{
"score": 0.88808,
"tag": "体育"
}
]
}
}
文本纠错
SDK 调用示例
var text = "百度是一家人工只能公司";
// 调用文本纠错
client.ecnetV1(text).then(function(result) {
console.log(JSON.stringify(result));
}).catch(function(err) {
// 如果发生网络错误
console.log(err);
});
接口详情
可参考API文档:文本纠错
对话情绪识别
SDK 调用示例
var text = "本来今天高高兴兴";
// 调用对话情绪识别接口
client.emotionV1(text).then(function(result) {
console.log(JSON.stringify(result));
}).catch(function(err) {
// 如果发生网络错误
console.log(err);
});
// 如果有可选参数
var options = {};
options["scene"] = "talk";
// 带参数调用对话情绪识别接口
client.emotionV1(text, options).then(function(result) {
console.log(JSON.stringify(result));
}).catch(function(err) {
// 如果发生网络错误
console.log(err);
});;
接口详情
可参考API文档:对话情绪识别
新闻摘要
SDK 调用示例
var content = "麻省理工学院的研究团队为无人机在仓库中使用RFID技术进行库存查找等工作,创造了一种...";
var maxSummaryLen = 300;
// 调用新闻摘要
client.newsSummaryV1(content, maxSummaryLen).then(function(result) {
console.log(JSON.stringify(result));
}).catch(function(err) {
// 如果发生网络错误
console.log(err);
});
// 如果有可选参数
var options = {};
options["title"] = "标题";
// 带参数调用新闻摘要
client.newsSummaryV1(content, maxSummaryLen, options).then(function(result) {
console.log(JSON.stringify(result));
}).catch(function(err) {
// 如果发生网络错误
console.log(err);
});;
接口详情
可参考API文档:新闻摘要
地址识别
SDK 调用示例
var text = "上海市浦东新区纳贤路701号百度上海研发中心 F4A000 张三";
// 调用地址识别接口
client.addressV1(text).then(function(result) {
console.log(JSON.stringify(result));
}).catch(function(err) {
// 如果发生网络错误
console.log(err);
});
接口详情
可参考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暂未收录,无法比对相似度 |