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

NLP-C#-SDK

C# SDK文档

简介

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

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

接口能力

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

版本更新记录

上线日期 版本号 更新内容
2018.12.7 3.6.6 新增新闻摘要接口
2018.1.25 3.3.2 新增文本分类接口
2018.1.11 3.3.1 新增文本标签接口
2017.12.21 3.3.0 接口升级
2017.9.12 3.0.0 更新SDK打包方式:所有AI服务集成一个SDK
2017.6.30 2.2.0 增加句法依存接口
2017.6.15 2.1.0 短文本相似度接口升级
2017.5.25 2.0.0 调用方式变更,新增多个接口
2017.5.4 1.0.0 第一版

快速入门

安装自然语言处理 C# SDK

C# SDK 现已开源! https://github.com/Baidu-AIP/dotnet-sdk

支持平台:.Net Framework 3.5 4.0 4.5, .Net Core 2.0

方法一:使用Nuget管理依赖 (推荐)

在NuGet中搜索 Baidu.AI,安装最新版即可。

packet地址 https://www.nuget.org/packages/Baidu.AI/

方法二:下载安装

自然语言处理 C# SDK目录结构

Baidu.Aip
    ├── net35
    │   ├── AipSdk.dll             // 百度AI服务 windows 动态库
    │   ├── AipSdk.xml             // 注释文件
    │   └── Newtonsoft.Json.dll    // 第三方依赖
    ├── net40
    ├── net45
    └── netstandard2.0
        ├── AipSdk.deps.json
        └── AipSdk.dll

如果需要在 Unity 平台使用,可引用工程源码自行编译。

安装

1.在官方网站下载C# SDK压缩工具包。

2.解压后,将 AipSdk.dllNewtonsoft.Json.dll 中添加为引用。

新建交互类

Baidu.Aip.Nlp.Nlp是自然语言处理的交互类,为使用自然语言处理的开发人员提供了一系列的交互方法。

用户可以参考如下代码新建一个交互类:

// 设置APPID/AK/SK
var APP_ID = "你的 App ID";
var API_KEY = "你的 Api Key";
var SECRET_KEY = "你的 Secret Key";

var client = new Baidu.Aip.Nlp.Nlp(API_KEY, SECRET_KEY);
client.Timeout = 60000;  // 修改超时时间

在上面代码中,常量APP_ID在百度云控制台中创建,常量API_KEYSECRET_KEY是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的应用列表中查看。

注意:如您以前是百度云的老用户,其中API_KEY对应百度云的“Access Key ID”,SECRET_KEY对应百度云的“Access Key Secret”。

接口说明

词法分析

词法分析接口向用户提供分词、词性标注、专名识别三大功能;能够识别出文本串中的基本词汇(分词),对这些词汇进行重组、标注组合后词汇的词性,并进一步识别出命名实体。

public void LexerDemo() {
	var text = "百度是一家高科技公司";

	// 调用词法分析,可能会抛出网络等异常,请使用try/catch捕获
	var result = client.Lexer(text);
	Console.WriteLine(result);
}

词法分析 请求参数详情

参数名称 是否必选 类型 说明
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 时间

词法分析(定制版)

词法分析接口向用户提供分词、词性标注、专名识别三大功能;能够识别出文本串中的基本词汇(分词),对这些词汇进行重组、标注组合后词汇的词性,并进一步识别出命名实体。

public void LexerCustomDemo() {
	var text = "百度是一家高科技公司";

	// 调用词法分析(定制版),可能会抛出网络等异常,请使用try/catch捕获
	var result = client.LexerCustom(text);
	Console.WriteLine(result);
}

词法分析(定制版) 请求参数详情

参数名称 是否必选 类型 说明
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编码)

词法分析(定制版) 返回示例

参考词法分析接口

短文本相似度

短文本相似度接口用来判断两个文本的相似度得分。

public void SimnetDemo() {
	var text1 = "浙富股份";

	var text2 = "万事通自考网";

	// 调用短文本相似度,可能会抛出网络等异常,请使用try/catch捕获
	var result = client.Simnet(text1, text2);
	Console.WriteLine(result);
	// 如果有可选参数
	var options = new Dictionary<string, object>{
	    {"model", "CNN"}
	};
	// 带参数调用短文本相似度
	result = client.Simnet(text1, text2, options);
	Console.WriteLine(result);
}

短文本相似度 请求参数详情

参数名称 是否必选 类型 可选值范围 说明
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 //相似度结果
},

评论观点抽取

评论观点抽取接口用来提取一条评论句子的关注点和评论观点,并输出评论观点标签及评论观点极性。

public void CommentTagDemo() {
	var text = "三星电脑电池不给力";

	// 调用评论观点抽取,可能会抛出网络等异常,请使用try/catch捕获
	var result = client.CommentTag(text);
	Console.WriteLine(result);
	// 如果有可选参数
	var options = new Dictionary<string, object>{
	    {"type", 13}
	};
	// 带参数调用评论观点抽取
	result = client.CommentTag(text, options);
	Console.WriteLine(result);
}

评论观点抽取 请求参数详情

参数名称 是否必选 类型 可选值范围 说明
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>"
        }
    ]
}

情感倾向分析

对包含主观观点信息的文本进行情感极性类别(积极、消极、中性)的判断,并给出相应的置信度。

public void SentimentClassifyDemo() {
	var text = "苹果是一家伟大的公司";

	// 调用情感倾向分析,可能会抛出网络等异常,请使用try/catch捕获
	var result = client.SentimentClassify(text);
	Console.WriteLine(result);
}

情感倾向分析 请求参数详情

参数名称 是否必选 类型 说明
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  //表示属于消极类别的概率
        }
    ]
}

文章标签

文章标签服务能够针对网络各类媒体文章进行快速的内容理解,根据输入含有标题的文章,输出多个内容标签以及对应的置信度,用于个性化推荐、相似文章聚合、文本内容分析等场景。

public void KeywordDemo() {
	var title = "iphone手机出现“白苹果”原因及解决办法,用苹果手机的可以看下";

	var content = "如果下面的方法还是没有解决你的问题建议来我们门店看下成都市锦江区红星路三段99号银石广场24层01室。";

	// 调用文章标签,可能会抛出网络等异常,请使用try/catch捕获
	var result = client.Keyword(title, content);
	Console.WriteLine(result);
}

文章标签 请求参数详情

参数名称 是否必选 类型 说明
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个主流内容类型,为文章聚类、文本内容分析等应用提供基础技术支持。

public void TopicDemo() {
	var title = "欧洲冠军杯足球赛";

	var content = "欧洲冠军联赛是欧洲足球协会联盟主办的年度足球比赛,代表欧洲俱乐部足球最高荣誉和水平,被认为是全世界最高素质、最具影响力以及最高水平的俱乐部赛事,亦是世界上奖金最高的足球赛事和体育赛事之一。";

	// 调用文章分类,可能会抛出网络等异常,请使用try/catch捕获
	var result = client.Topic(title, content);
	Console.WriteLine(result);
}

文章分类 请求参数详情

参数名称 是否必选 类型 说明
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": "体育"
            }
        ]
    }
}

文本纠错

识别输入文本中有错误的片段,提示错误并给出正确的文本结果。支持短文本、长文本、语音等内容的错误识别,纠错是搜索引擎、语音识别、内容审查等功能更好运行的基础模块之一。

public void EcnetDemo() {
	var text = "百度是一家人工只能公司";

	// 调用文本纠错,可能会抛出网络等异常,请使用try/catch捕获
	var result = client.Ecnet(text);
	Console.WriteLine(result);
}

文本纠错 请求参数详情

参数名称 是否必选 类型 说明
text string 待纠错文本,输入限制511字节

文本纠错 返回数据参数详情

参数 说明 描述
log_id uint64 请求唯一标识码
correct_query string 纠错后的文本
score double 模型置信度打分
item object 分析结果
+vec_fragment list 替换候选片段信息
++ori_frag string 原片段
++correct_frag double 替换片段
++begin_pos int 起始(长度单位)
++end_pos list 结尾(长度单位)

文本纠错 返回示例

{
    "log_id": 6770395607901559829,
    "item": {
        "vec_fragment": [
            {
                "ori_frag": "只能",
                "begin_pos": 21,
                "correct_frag": "智能",
                "end_pos": 27
            }
        ],
        "score": 0.875169,
        "correct_query": "百度是一家人工智能公司"
    },
    "text": "百度是一家人工只能公司"
}

对话情绪识别接口

针对用户日常沟通文本背后所蕴含情绪的一种直观检测,可自动识别出当前会话者所表现出的情绪类别及其置信度,可以帮助企业更全面地把握产品服务质量、监控客户服务质量

public void EmotionDemo() {
	var text = "本来今天高高兴兴";

	// 调用对话情绪识别接口,可能会抛出网络等异常,请使用try/catch捕获
	var result = client.Emotion(text);
	Console.WriteLine(result);
	// 如果有可选参数
	var options = new Dictionary<string, object>{
	    {"scene", "talk"}
	};
	// 带参数调用对话情绪识别接口
	result = client.Emotion(text, options);
	Console.WriteLine(result);
}

对话情绪识别接口 请求参数详情

参数名称 是否必选 类型 说明
text string 待识别情感文本,输入限制512字节
scene string default(默认项-不区分场景),talk(闲聊对话-如度秘聊天等),task(任务型对话-如导航对话等),customer_service(客服对话-如电信/银行客服等)

对话情绪识别接口 返回数据参数详情

参数 说明 描述
log_id uint64 请求唯一标识码
text string 输入的对话文本内容
items list 分析结果数组
++label string 情绪分类标签;pessimistic(负向情绪)、neutral(中性情绪)、optimistic(正向情绪)
++prob double item标签对应的概率

对话情绪识别接口 返回示例

{
    "log_id": 4258005459150262970,
    "text": "本来今天高高兴兴",
    "items": [
        {
            "prob": 0.998619,
            "label": "neutral"
        },
        {
            "prob": 0.00138141,
            "label": "pessimistic"
        },
    ]
}

新闻摘要接口

自动抽取新闻文本中的关键信息,进而生成指定长度的新闻摘要

public void NewsSummaryDemo() {
	var content = "麻省理工学院的研究团队为无人机在仓库中使用RFID技术进行库存查找等工作,创造了一种...";

	var maxSummaryLen = 300;

	// 调用新闻摘要接口,可能会抛出网络等异常,请使用try/catch捕获
	var result = client.NewsSummary(content, maxSummaryLen);
	Console.WriteLine(result);
	// 如果有可选参数
	var options = new Dictionary<string, object>{
	    {"title", "标题"}
	};
	// 带参数调用新闻摘要接口
	result = client.NewsSummary(content, maxSummaryLen, options);
	Console.WriteLine(result);
}

新闻摘要接口 请求参数详情

参数名称 是否必选 类型 说明
content string 字符串(限3000字符数以内)字符串仅支持GBK编码,长度需小于3000字符数(即6000字节),请输入前确认字符数没有超限,若字符数超长会返回错误。正文中如果包含段落信息,请使用"\n"分隔,段落信息算法中有重要的作用,请尽量保留
max_summary_len int 此数值将作为摘要结果的最大长度。例如:原文长度1000字,本参数设置为150,则摘要结果的最大长度是150字;推荐最优区间:200-500字
title string 字符串(限200字符数)字符串仅支持GBK编码,长度需小于200字符数(即400字节),请输入前确认字符数没有超限,若字符数超长会返回错误。标题在算法中具有重要的作用,若文章确无标题,输入参数的“标题”字段为空即可

新闻摘要接口 返回数据参数详情

参数 说明 描述
log_id uint64 请求唯一标识码
summary string 摘要结果

新闻摘要接口 返回示例

{
    "log_id": 4258005459150262970,
    "summary": "麻省理工学院的研究团队为无人机在仓库中使用RFID技术进行库存查找等工作,创造了一种聪明的新方式。使用RFID标签更换仓库中的条形码,将帮助提升自动化并提高库存管理的准确性。几家公司已经解决了无人机读取RFID的技术问题。麻省理工学院的新解决方案,名为Rfly,允许无人机阅读RFID标签,而不用捆绑巨型读卡器。无人机接收从远程RFID读取器发送的信号,然后转发它读取附近的标签。"
}

FAQ

1. 调用接口时抛出异常:基础连接已关闭

此问题一般是网络原因,请检查网络相关问题:

  • 检查网络连通性
  • 检查网络是否有代理

2. SSL报错 "The authentication or decryption has failed"

可能由于网络代理等原因导致证书不正确,属于常见的https问题,可以参考这个答案。 如果报此错,请开发者务必关注HTTPS安全。

3. 调用接口,等待一段时间后出现超时

可以设置Timeout参数。

4. 在.Net Core下运行报错 'GBK' is not a supported encoding name'

添加System.Text.Encoding.CodePages引用,并注册。 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)

错误信息

错误返回格式

若请求错误,服务器将返回的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-PHP-SDK
下一篇
NLP-Node-SDK