# 文本纠错 API 文档

# 接口说明

对输入文本进行校对,校对包括拼写、语法、搭配、实体纠错、标点、领导人职称、政治用语及数字纠错等。

温馨提示:文本纠错在2022年5月1日有版本升级,新添加黑白名单功能,详情见黑白名单上传
                  文本纠错在2021年8月2日有版本升级,会有更好的纠错效果,返回字段由于纠错功能的增加有少许变动,请在解析结果时注意。

# 接口Demo

示例demo请点击 这里 下载。
demo 覆盖部分语言,其他语言参照下方接口文档进行开发。
欢迎热心的开发者到“讯飞开放平台社区 (opens new window)” 分享你们的demo。

# 接口要求

集成文本纠错API时,需按照以下要求。

内容 说明
传输方式 http[s] (为提高安全性,强烈推荐https)
请求地址 http[s]: //api.xf-yun.com/v1/private/s9a87e3ec
注:服务器IP不固定,为保证您的接口稳定,请勿通过指定IP的方式调用接口,使用域名方式调用
请求行 POST /v1/private/s9a87e3ec HTTP/1.1
接口鉴权 签名机制,详情请参照下方鉴权认证
字符编码 UTF-8
响应格式 统一采用JSON格式
开发语言 任意,只要可以向讯飞云服务发起HTTP请求的均可
适用范围 任意操作系统,但因不支持跨域不适用于浏览器
文本大小 不得超过2000个字符,汉字、英文字母、标点都算做一个字符

# 接口调用流程

· 通过接口密钥基于hmac-sha256计算签名,将签名以及其他参数加在请求地址后面。详见下方 鉴权认证
· 将请求参数以及图片数据放在Http Request Body中,以POST表单的形式提交,详见下方 请求参数
· 向服务器端发送Http请求后,接收服务器端的返回结果。

# 鉴权认证

在调用业务接口时,请求方需要对请求进行签名,服务端通过签名来校验请求的合法性。

# 鉴权方法

通过在请求地址后面加上鉴权相关参数的方式,参数具体如下:

http示例url:

https://api.xf-yun.com/v1/private/s9a87e3ec?authorization=YXBpX2tleT0iYXBpa2V5WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgiLCBhbGdvcml0aG09ImhtYWMtc2hhMjU2IiwgaGVhZGVycz0iaG9zdCBkYXRlIHJlcXVlc3QtbGluZSIsIHNpZ25hdHVyZT0idXc2RCtnMFdyd3lPeUhXOGdBRUNTQXJlZmswbjFJRUJabm5QWjY3R3pBQT0i&host=api.xf-yun.com&date=Wed%2C+11+Nov+2020+06%3A24%3A43+GMT

鉴权参数:

参数 类型 必须 说明 示例
host string 请求主机 api.xf-yun.com
date string 当前时间戳,RFC1123格式("EEE, dd MMM yyyy HH:mm:ss z") Wed, 11 Nov 2020 06:24:43 GMT
authorization string 使用base64编码的签名相关信息(签名基于hamc-sha256计算) 参考下方详细生成规则

· date参数生成规则:

date必须是UTC+0或GMT时区,RFC1123格式(Wed, 11 Nov 2020 06:24:43 GMT)。
服务端会对date进行时钟偏移检查,最大允许300秒的偏差,超出偏差的请求都将被拒绝。

· authorization参数生成格式:

1)获取接口密钥APIKey 和 APISecret。
在讯飞开放平台控制台,创建一个应用后打开文本纠错页面可以获取,均为32位字符串。

2)参数authorization base64编码前(authorization_origin)的格式如下。

api_key="$api_key",algorithm="hmac-sha256",headers="host date request-line",signature="$signature"

其中 api_key 是在控制台获取的APIKey,algorithm 是加密算法(仅支持hmac-sha256),headers 是参与签名的参数(见下方注释)。
signature 是使用加密算法对参与签名的参数签名后并使用base64编码的字符串,详见下方。

注: headers是参与签名的参数,请注意是固定的参数名("host date request-line"),而非这些参数的值。

3)signature的原始字段(signature_origin)规则如下。

signature原始字段由 host,date,request-line三个参数按照格式拼接成,
拼接的格式为(\n为换行符,’:’后面有一个空格):

host: $host\ndate: $date\n$request-line

假设

请求url = api.xf-yun.com
date = Wed, 11 Nov 2020 06:24:43 GMT

那么 signature原始字段(signature_origin)则为:

host: api.xf-yun.com
date: Wed, 11 Nov 2020 06:24:43 GMT
POST /v1/private/s9a87e3ec HTTP/1.1

4)使用hmac-sha256算法结合apiSecret对signature_origin签名,获得签名后的摘要signature_sha。

signature_sha=hmac-sha256(signature_origin,$apiSecret)

其中 apiSecret 是在控制台获取的APISecret

5)使用base64编码对signature_sha进行编码获得最终的signature。

signature=base64(signature_sha)

假设

APISecret = apisecretXXXXXXXXXXXXXXXXXXXXXXX	
date = Wed, 11 Nov 2020 06:24:43 GMT

则signature为

signature=uw6D+g0WrwyOyHW8gAECSArefk0n1IEBZnnPZ67GzAA=

6)根据以上信息拼接authorization base64编码前(authorization_origin)的字符串,示例如下。

api_key="apikeyXXXXXXXXXXXXXXXXXXXXXXXXXX", algorithm="hmac-sha256", headers="host date request-line", signature="uw6D+g0WrwyOyHW8gAECSArefk0n1IEBZnnPZ67GzAA="

注: headers是参与签名的参数,请注意是固定的参数名("host date request-line"),而非这些参数的值。

7)最后再对authorization_origin进行base64编码获得最终的authorization参数。

authorization = base64(authorization_origin)
示例:
authorization=YXBpX2tleT0iYXBpa2V5WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgiLCBhbGdvcml0aG09ImhtYWMtc2hhMjU2IiwgaGVhZGVycz0iaG9zdCBkYXRlIHJlcXVlc3QtbGluZSIsIHNpZ25hdHVyZT0idXc2RCtnMFdyd3lPeUhXOGdBRUNTQXJlZmswbjFJRUJabm5QWjY3R3pBQT0i

# 鉴权结果

如果鉴权失败,则根据不同错误类型返回不同HTTP Code状态码,同时携带错误描述信息,详细错误说明如下:

HTTP Code 说明 错误描述信息 解决方法
401 缺少authorization参数 {"message":"Unauthorized"} 检查是否有authorization参数,详情见authorization参数详细生成规则
401 签名参数解析失败 {“message”:”HMAC signature cannot be verified”} 检查签名的各个参数是否有缺失是否正确,特别确认下复制的api_key是否正确
401 签名校验失败 {“message”:”HMAC signature does not match”} 签名验证失败,可能原因有很多。
1. 检查api_key,api_secret 是否正确。
2.检查计算签名的参数host,date,request-line是否按照协议要求拼接。
3. 检查signature签名的base64长度是否正常(正常44个字节)。
403 时钟偏移校验失败 {“message”:”HMAC signature cannot be verified, a valid date or x-date header is required for HMAC Authentication”} 检查服务器时间是否标准,相差5分钟以上会报此错误

认证失败返回示例:

HTTP/1.1 403 Forbidden
Date: Thu, 06 Dec 2018 07:55:16 GMT
Content-Length: 116
Content-Type: text/plain; charset=utf-8
{
    "message": "HMAC signature does not match"
}

# 请求参数

在调用业务接口时,都需要在 Http Request Body 中配置以下参数,请求数据均为json字符串。

参数名 类型 必传 描述
header object 用于上传平台参数
header.app_id string 在平台申请的appid信息
header.uid string 用于区分同一个appid下的不同用户,使用黑白名单功能时必传且不为空,黑白名单设置详见下方黑白名单上传 (opens new window)
header.status string 请求状态,取值范围为:3(一次传完)
parameter object 用于上传服务特性参数
parameter.s9a87e3ec object 用于上传功能参数
parameter.s9a87e3ec.res_id string 用于区分同一个appid下的不同资源,使用黑白名单功能时必传且不为空,黑白名单设置详见下方黑白名单上传 (opens new window)
parameter.s9a87e3ec.result object 用于上传响应数据参数
parameter.s9a87e3ec.result.encoding string 文本编码,可选值:utf8(默认值)
parameter.s9a87e3ec.result.compress string 文本压缩格式,可选值:raw(默认值)
parameter.s9a87e3ec.result.format string 文本格式,可选值:json(默认值)
payload object 用于上传请求数据
payload.input object 用于上传文本数据
payload.input.encoding string 文本编码,可选值:utf8(默认值)
payload.input.compress string 文本压缩格式,可选值:raw(默认值)
payload.input.encoding string 文本格式,可选值:json(默认值)
payload.input.text string 文本数据,base64编码,最大支持7000字节,请注意中文要控制在2000个字符
payload.input.status int 上传数据状态,取值范围为:3(一次传完)

请求参数示例:

{
  "header": {
    "app_id": "XXXXXXXX",
    "uid": "your_uid",
    "status": 3
  },
  "parameter": {
    "s9a87e3ec": {
      "res_id": "your_res_id",
      "result": {
        "encoding": "utf8",
        "compress": "raw",
        "format": "json"
      }
    }
  },
  "payload": {
    "input": {
      "encoding": "utf8",
      "compress": "raw",
      "format": "json",
      "status": 3,
      "text": "5aSq6Ziz5b2T56m654Wn77yM6Iqx5YS/5a+55oiR56yR77yM5bCP6bif6K+05pep5LiK5aW95ZWK77yM55yf5piv55S76JuH5aSp6Laz"
    }
  }
}

# 返回参数

参数名 类型 描述
header object 协议头部,用于描述平台特性的参数
header.sid string 本次会话id
header.code int 返回码
0表示会话调用成功(并不一定表示服务调用成功,服务是否调用成功以text字段中的ret为准)
其它表示会话调用异常,详情请参考错误码
header.message string 描述信息
payload object 数据段,用于携带响应的数据
payload.result object 文本纠错响应数据块
payload.result.compress string 文本压缩格式,仅在设置了parameter.s9a87e3ec.result.compress参数时返回
payload.result.encoding string 文本编码,仅在设置了parameter.s9a87e3ec.result.encoding参数时返回
payload.result.format string 文本格式,仅在设置了parameter.s9a87e3ec.result.format参数时返回
payload.result.text string 文本纠错返回结果,需要对其进行base64解码,解码后的返回字段如下

text字段具体信息

字段 含义 数据类型 说明
blacklist 黑名单纠错 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[13, "支撑", "职称", "black_list"], [89, "轮到", "论道", "black_list"]] --> [位置,原字,结果字,类型],其中【类型】中的blacklist代表黑名单错误。
注:黑名单纠错需要预先调用黑白名单接口设置。
pol 政治术语纠错 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[119, "习近平书记", "习近平总书记", "pol"]] --> [位置,原词,结果词,类型] ,其中【类型】中的pol代表政治术语错误。
char 别字纠错 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[0, ‘A’, ‘a’, ‘char’], [1, ‘B’, ‘b’, ‘char’]] --> [位置,原字,结果字,类型],其中【类型】中的char代表别字错误。
word 别词纠错 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[0, ‘AB’, ‘ab’, ‘word’], [2, ‘CD’, ‘cd’, ‘word’]] --> [位置,原词,结果词,类型] ,其中【类型】中的word代表别词错误。
redund 语法纠错-冗余 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[0, ‘AB’, ‘’, ‘redund’], [2, ‘CD’, ‘R’, ‘redund’]] --> [位置,原文本,纠错后文本,类型] ,其中【类型】中的redund代表冗余错误。
miss 语法纠错-缺失 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[0, ‘AB’, ‘AXB’, ‘miss’], [2, ‘CD’, ‘’, ‘miss’]] --> [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果),其中【类型】中的miss代表缺失错误。
order 语法纠错-乱序 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[0, ‘AB’, ‘BA’, ‘lx_word], [2, ‘CDE’, ‘ECD’, ‘lx_word]]--> [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果,其中【类型】中的lx_word代表词级别乱序纠错、lx_char代表字级别乱序纠错。
dapei 搭配纠错 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[0, ‘AB’, ‘ab’, ‘dapei‘]]--> [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果),其中【类型】中的dapei代表搭配纠错。
punc 标点纠错 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[0, ‘.’, ‘。’, ‘半角标点误用’]]--> [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果),其中【类型】包括:
半角标点误用成对符号不匹配
重复标点
连续使用标点
顿号使用不当
省略号使用不当
连接号使用不当
标示发文年号不规范
疑似省略号误用
书名号内顿号使用不当
疑似标点错误
idm 成语纠错 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[0, ‘ABCD’, ‘abcd’, ‘idm‘]]--> [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果),其中【类型】中的idm-成语纠错。
org 机构名纠错 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[0, ‘AB’, ‘ab’, ‘org_R‘]]--> [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果),其中【类型】可能的值如下:
org_R:机构名字词冗余
org_M:机构名字词缺失
org_S:机构名字词错误
org_N:机构名称变更
org_P:机构名字词乱序
leader 领导人职称纠错 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[0, ‘AB’, ‘ab’, ‘lea‘]]--> [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果),其中【类型】中的lea代表领导人职称纠错。
number 数字纠错 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[0, ‘2020年2月30日’, ‘’, ‘date-d’]]--> [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果),其中【类型】可能的值如下:
time:时间纠错
date-m:日期纠错(月份)
date-d:日期纠错(日)
addr 地名纠错 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[0, ‘AB’, ‘ab’, ‘addr_R‘]]--> [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果);【类型】:addr_R-地名字词冗余、addr_M-地名字词缺失、addr_S-地名字词错误
name 全文人名纠错 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[0, ‘AB’, ‘ab’, ‘name‘]]--> [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果);【类型】:name-全文人名纠错
grammar_pc 句式杂糅&语义重复 array 每个元素为[pos, cur, correct, description],元素内分别表示错误位置、错误文本、纠正文本、更详细的错误类型。
【示例】:[[0, ‘AB’, ‘ab’, ‘grammar_pc‘]]--> [位置,原文本,纠错后文本,类型] (纠错后为空表示当前无纠正结果);【类型】:grammar_pc-句式杂糅。句式杂糅是指而之所以会出现玳瑁色的原因,是xxx“中的”之所以....的原因。语义重复是指“这其中”,应该是”其中“,”这“和”其中“重复。

返回参数示例:

{
  "header": {
    "code": 0,
    "message": "success",
    "sid": "ase00070abc@hu175b5e4b27a0212882"
  },
  "payload": {
    "result": {
      "compress": "raw",
      "encoding": "utf8",
      "format": "json",
      "text": "eyJjaGFyIjogW10sICJ3b3JkIjogW10sICJyZWR1bmQiOiBbXSwgIm1pc3MiOiBbXSwgIm9yZGVyIjogW10sICJkYXBlaSI6IFtdLCAicHVuYyI6IFtdLCAiaWRtIjogW1syMiwgIueUu+ibh+Wkqei2syIsICLnlLvom4fmt7votrMiLCAiaWRtIl1dLCAib3JnIjogW10sICJsZWFkZXIiOiBbXSwgIm51bWJlciI6IFtdfQ=="
    }
  }
}

base64解码后的text示例:

{
	"black_list": [
		[
		  14,
		  "战士", 
		  "展示", 
		  "black_list"],
		[
		  18, 
		  "支撑", 
		  "职称", 
		  "black_list"
		]
	],
	"punc": [],
	"leader": [],
	"org": [],
	"pol": [],
	"grammar_pc": [],
	"order": [],
	"idm": [
		[
		  21, 
		  "画蛇天足", 
		  "画蛇添足", 
		  "idm"
		],
		[
		  26, 
		  "足不初户", 
		  "足不出户", 
		  "idm"
		],
		[
		  31, 
		  "狐假唬威", 
		  "狐假虎威", 
		  "idm"
		],
		[
		  36, 
		  "威风凛领", 
		  "威风凛凛", 
		  "idm"
		]
	],
	"word": [],
	"char": [],
	"redund": [],
	"miss": [],
	"dapei": [],
	"number": [],
	"addr": [],
	"name": []
}

# 黑白名单上传

# 接口说明

黑白名单自定义功能,包括:黑名单 (违禁词替换) 和白名单 (免审词设置) 。

# 接口Demo

黑白名单上传 demo python3语言 (opens new window)

黑白名单上传 demo java语言 (opens new window)

# 接口要求

内容 说明
传输方式 http[s] (为提高安全性,强烈推荐https)
请求地址 http[s]: //evo-gen.xfyun.cn/individuation/gen/upload
注:服务器IP不固定,为保证您的接口稳定,请勿通过指定IP的方式调用接口,使用域名方式调用
请求行 POST /individuation/gen/upload HTTP/1.1
字符编码 UTF-8
响应格式 统一采用JSON格式
开发语言 任意,只要可以向讯飞云服务发起HTTP请求的均可
适用范围 任意操作系统,但因不支持跨域不适用于浏览器,请在后端调用接口
文本大小 base64编码后大小不得超过4M

# 接口调用流程

  • 将请求参数以及文本数据放在Http Request Body中,以POST表单的形式提交,详见下方请求参数。
  • 向服务器端发送Http请求后,接收服务器端的返回结果。

# 请求参数

在调用业务接口时,都需要在 Http Request Body 中配置以下参数,请求数据均为json字符串。

参数名 类型 必传 描述
common object 公共参数,请求时放在body中上传
common.app_id string 在平台申请的appid信息
common.uid string 自定义uid,用于区分同一个appid下的不同用户,由字母、数字或下划线组成
business object 业务参数,请求时放在body中上传
business.res_id string 自定义res_id,用于区分同一个appid下的不同资源,由字母、数字或下划线组成
data object 业务数据流参数,上传json格式的黑白名单经过base64编码后的数据,大小不超过 4m

请求参数示例:

{
	"common": {
		"app_id": "your_appid",
		"uid": "your_uid"

	},
	"business": {
		"res_id": "your_uid"
	},
	"data": "eyJ3aGl0ZV9saXN0I..."
}

data参数具体信息

参数名 类型 必传 描述
white_list string 白名单 (免审词设置),免审词之间用逗号隔开
white_list string 黑名单 (违禁词替换),违禁词和替换词之间用空格隔开,违禁词之间用逗号隔开

base64编码前的data示例:

{
        "white_list": "衣据,鱿鱼圈",
        "black_list": "战士 展示,支撑 职称,规饭 鬼范,轮到 论道"
    }

# 返回参数

参数 类型 描述
code int 错误码,0表示成功
message string 信息描述
sid string 每次会话的唯一标识

返回参数示例:

{
	"code": 0,
	"message": "success",
	"sid": "ctm0001e33f@hu1806f505b94020c902"
}

# 错误码

备注:如出现下述列表中没有的错误码,可到 这里 (opens new window) 查询。

错误码 错误描述 说明 处理策略
10009 input invalid data 输入数据非法 检查输入数据
10010 service license not enough 没有授权许可或授权数已满 请到控制台提交工单联系技术人员
10019 service read buffer timeout, session timeout session超时 检查是否数据发送完毕但未关闭连接
10139 invalid param 参数错误 检查参数是否正确
10160 parse request json error 请求数据格式非法 检查请求数据是否是合法的json
10161 parse base64 string error base64解码失败 检查发送的数据是否使用base64编码了
10163 param validate error:... 参数校验失败 具体原因见详细的描述
10222 context deadline exceeded 上传的数据超过了接口上限 检查接口上传的文本是否超越了接口的最大限制
10223 RemoteLB: can't find valued addr lb 找不到节点 请到控制台提交工单联系技术人员
10313 invalid appid appid和apikey不匹配 检查appid是否合法

# 调用示例

注: demo只是一个简单的调用示例,不适合直接放在复杂多变的生产环境使用

文本纠错demo python3语言 (opens new window)

文本纠错demo java语言 (opens new window)

注: 其他开发语言请参照 接口调用流程 进行开发,也欢迎热心的开发者到 讯飞开放平台社区 (opens new window) 分享你们的demo。

# 常见问题

# 文本纠错的主要功能是什么?

答:对输入文本进行校对,校对包括拼写、语法、搭配、实体纠错、标点、领导人职称、政治用语及数字纠错等。

# 文本纠错支持什么应用平台?

答:目前支持Web API应用平台。

# 文本纠错对文本有什么要求吗?

答:最大支持7000字节,请注意中文要控制在2000个字符之内。

在线
咨询
建议
反馈
体验
中心