文档比对
接口描述
文档比对支持精准比对文档的增删改差异,快速定位并高亮显示差异原文,支持导出完整的比对报告,大幅提升比对准确性和效率。如希望快速可视化体验效果,可登录智能文档分析平台,一键上传文档,在线测试;在线工具和API服务的额度共享互通。
文档比对API服务为异步接口,需要先调用提交请求接口获取 taskID,然后调用获取结果接口进行结果轮询,建议提交请求后5~10秒开始轮询。提交请求接口QPS为2,获取结果接口QPS为10。
提交请求接口
请求说明
请求示例
HTTP 方法:POST
请求URL: https://aip.baidubce.com/file/2.0/brain/online/v1/textdiff/create_task
URL参数:
参数 | 值 |
---|---|
access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header如下:
参数 | 值 |
---|---|
Content-Type | multipart/form-data |
Body中放置请求参数,参数详情如下:
请求参数
参数 | 是否必选 | 类型 | 可选值范围 | 说明 |
---|---|---|---|---|
baseFile | 和 baseFile/baseFileURL 二选一 | file | - | 文件数据,主版比对文档,支持BMP/JPEG/JPG/PNG/TIF/TIFF格式图片及Word/WPS/PDF/OFD格式文档,仅支持上传一篇文件,文件大小不超过10M优先级: baseFile > baseFileURL,当baseFile字段存在时,baseFileURL字段失效 |
compareFile | 和 compareFile/compareFileURL 二选一 | file | - | 文件数据,副版比对文档,支持BMP/JPEG/JPG/PNG/TIF/TIFF格式图片及Word/WPS/PDF/OFD格式文档,文件大小不超过10M优先级: compareFile > compareFileURL,当compareFile字段存在时,compareFileURL字段失效 |
baseFileURL | 和 baseFile/baseFileURL 二选一 | string | - | 文件完整URL,仅支持BOS公网访问,URL长度不超过1024字节,支持BMP/JPEG/JPG/PNG/TIF/TIFF格式图片及Word/WPS/PDF/OFD格式文档,仅支持上传一篇文件,文件大小不超过10M优先级: baseFile > baseFileURL,当baseFile字段存在时,baseFileURL字段失效请注意关闭URL防盗链 |
compareFileURL | 和 compareFile/compareFileURL 二选一 | string | - | 文件完整URL,仅支持BOS公网访问,URL长度不超过1024字节,支持BMP/JPEG/JPG/PNG/TIF/TIFF格式图片及Word/WPS/PDF/OFD格式文档,仅支持上传一篇文件,文件大小不超过10M优先级: compareFile > compareFileURL,当compareFile字段存在时,compareFileURL字段失效请注意关闭URL防盗链 |
param | 是 | dict | - | 文档比对特殊差异识别参数。默认为false。将指定参数以json格式传递。例如,传递参数{"sealRecognition":true,"handWritingRecognition":true}将分别启用印章识别与手写体识别功能 |
+ sealRecognition | 否 | bool | true/false | 是否识别印章信息(识别印章信息有额外的时间开销)。默认为false |
+ fullWidthHalfWidthRecognition | 否 | bool | true/false | 是否识别中英文符号差异。默认为false |
+ fontFamilyRecognition | 否 | bool | true/false | 是否识别字体差异。默认为false |
+ fontSizeRecognition | 否 | bool | true/false | 是否识别字号差异。默认为false |
+ handWritingRecognition | 否 | bool | true/false | 是否识别手写体差异。默认为false |
请求代码示例
提示一:使用示例代码前,请记得替换其中的示例Token、文档地址或Base64信息。
提示二:目前仅提供Python语言,如需其他语言示例可参考 示例代码中心 。
import requests
import os
'''
文档比对-提交请求
'''
request_host = "https://aip.baidubce.com/file/2.0/brain/online/v1/textdiff/create_task"
# 二进制方式打开图片文件
f1 = '[本地文件-主版比对文档]'
f2 = '[本地文件-副版比对文档]'
body = {
"baseFile": (os.path.basename(f1), open(f1, 'rb'), "multipart/form-data"),
"compareFile": (os.path.basename(f2), open(f2, 'rb'), "multipart/form-data"),
}
data = {
"sealRecognition": False,
"handWritingRecognition": False
}
access_token = '[调用鉴权接口获取的token]'
request_url = f"{request_host}?access_token={access_token}"
response = requests.post(request_url, data=data, files=body)
if response:
print(response.json())
返回说明
返回参数
字段 | 类型 | 说明 |
---|---|---|
log_id | uint64 | 唯一的log id,用于问题定位 |
error_code | int | 错误码 |
error_msg | string | 错误描述信息 |
result | dict | 返回的结果列表 |
+ taskId | string | 该请求生成的taskId,后续使用该taskId获取比对结果 |
返回示例
成功返回示例:
{
"error_code": 0,
"error_msg": "",
"log_id": "259575694341050368",
"result": {
"taskId": "textreview-task-xnejhkwvcz5qpr3c"
}
}
失败返回示例(详细的错误码说明见API文档-错误码):
{
"error_code": 282003,
"error_msg": "missing parameters",
"log_id": "259909120864665600"
}
获取结果接口
请求说明
请求示例
HTTP 方法:POST
请求URL: https://aip.baidubce.com/file/2.0/brain/online/v1/textdiff/query_task
URL参数:
参数 | 值 |
---|---|
access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header如下:
参数 | 值 |
---|---|
Content-Type | multipart/form-data |
Body中放置请求参数,参数详情如下:
请求参数
参数 | 是否必选 | 类型 | 说明 |
---|---|---|---|
taskId | 是 | string | 发送提交请求时返回的taskId |
请求代码示例
提示一:使用示例代码前,请记得替换其中的示例Token、taskId。
提示二:目前仅提供Python语言,如需其他语言示例可参考 示例代码中心 。
import requests
'''
文档比对-获取结果
'''
request_host = "https://aip.baidubce.com/file/2.0/brain/online/v1/textdiff/query_task"
params = {"taskId": "[调用提交请求接口获取的taskId]"}
access_token = '[调用鉴权接口获取的token]'
request_url = f"{request_host}?access_token={access_token}"
response = requests.post(request_url, params=params, files=params)
if response:
print(response.json())
返回说明
返回参数
字段 | 类型 | 说明 |
---|---|---|
log_id | uint64 | 唯一的log id,用于问题定位 |
error_code | int | 错误码 |
error_msg | string | 错误描述信息 |
result | dict | 返回的结果列表 |
+ taskId | string | 任务ID |
+ status | string | 任务状态,pending:排队中;processing:运行中;success:成功;failed:失败 |
+ duration | string | 任务持续时长 |
+ errorType | string | 任务错误类型,quotaError:配额超限;taskError:任务失败,失败详情可见compareMessage |
+ param | dict | 文档比对特殊差异识别参数 |
++ sealRecognition | bool | 识别印章差异 |
++ fullWidthHalfWidthRecognition | bool | 识别中英文符号差异 |
++ fontFamilyRecognition | bool | 识别字体差异 |
++ fontSizeRecognition | bool | 识别字号差异 |
++ handWritingRecognition | bool | 识别手写体差异 |
+ subTaskList | dict | 文档比对结果列表 |
++ similarity | string | 两份文档的相似度 |
++ totalDiff | int | 两份文档的差异点数量 |
++ baseDocId | string | 主版文档ID |
++ baseDocName | string | 主版文档名称 |
++ baseDocOssURL | string | 主版文档的对象存储下载链接,有效期30天,为解析后的主版文档PDF地址,用于SDK渲染 |
++ compareDocId | string | 副版文档ID |
++ compareDocName | string | 副版文档名称 |
++ compareDocOssURL | string | 副版文档的对象存储下载链接,有效期30天,为解析后的副版文档PDF地址,用于SDK渲染 |
++ compareStatus | string | 比对任务状态,success:成功;failed:失败 |
++ compareMessage | string | 比对任务失败的描述信息 |
++ reportStatus | string | 比对报告状态,success:成功;failed:失败 |
++ reportMessage | string | 比对报告失败的描述信息 |
++ reportOssURL | string | 比对报告的对象存储下载链接,为两份文档的差异项总结报告 |
++ createdAt | string | 任务创建时间 |
++ finishedAt | string | 任务结束时间 |
++ diffItemList | dict | 任务的比对结果 |
+++ id | string | 比对差异点ID |
+++ basePageNum | int | 主版文档页码 |
+++ baseDiffType | string | 主版差异类型,insert:新增;delete:删除;replace:替换 |
+++ baseBoxArea | [4]int | 主版文档差异点的原文四角点坐标,每个框选范围包含左上角x坐标、左上角y坐标、矩形框宽度、矩形框高度,共四个数值,如[89,74,61,12] |
+++ baseDiffBoxes | string | 主版文档差异点框的位置,二维数组的字符串,当差异项出现换行时,为多个字符串 |
+++ baseDiffContent | string | 主版差异点内容 |
+++ baseDiffContext | string | 主版差异点上下文 |
+++ baseDiffContentType | array | 主版文档比对差异类型,seal:印章;figure:图片;size:字号;font:字体;full_half_width:中英文符号 |
+++ comparePageNum | string | 副版文档页码 |
+++ compareDiffType | string | 副版差异类型,insert:新增;delete:删除;replace:替换 |
+++ compareBoxArea | string | 副版文档差异点的原文四角点坐标,每个框选范围包含左上角x坐标、左上角y坐标、矩形框宽度、矩形框高度,共四个数值,如[89,74,61,12] |
+++ compareDiffBoxes | string | 副版文档差异点框的位置,二维数组的字符串,因为一个差异点可能有多个框(换行情况) |
+++ compareDiffContent | string | 副版差异点内容 |
+++ compareDiffContext | string | 副版差异点上下文 |
+++ compareDiffContentType | array | 副版文档比对差异类型,seal:印章;figure:图片;size:字号;font:字体;full_half_width:中英文符号 |
返回示例
成功返回示例:
{
"error_code": 0,
"error_msg": "",
"log_id": "262826631337504768",
"result": {
"taskId": "task-affq81x73t23pqmk",
"subTaskList": [
{
"baseDocId": "doc-egdc1iziztwmech2",
"baseDocName": "软硬件采购合同主版.docx",
"baseDocOssURL": "http://ai-textmind.bj.bcebos.com//data/mnt/text_flow/parser/doc-egdc1iziztwmech2/pdf/doc-egdc1iziztwmech2.pdf?authorization=bce-auth-v1%2FALTAKsXn1egl7w69bHDIfE3SOD%2F2023-12-27T05%3A16%3A40Z%2F2592000%2Fhost%2Fe922fe2ac5060e0819f5bcda64139be322a733cdcc357ddea189fa1484e3244c",
"compareDocId": "doc-r8xbre9f5r3i8v85",
"compareDocName": "软硬件采购合同副版.docx",
"compareDocOssURL": "http://ai-textmind.bj.bcebos.com//data/mnt/text_flow/parser/doc-r8xbre9f5r3i8v85/pdf/doc-r8xbre9f5r3i8v85.pdf?authorization=bce-auth-v1%2FALTAKsXn1egl7w69bHDIfE3SOD%2F2023-12-27T05%3A16%3A40Z%2F2592000%2Fhost%2Fb48b118b7c6360143a7b8096bfa2353956ba918513dfcf432a5b040b1dbf0b63",
"similarity": "84.69%",
"totalDiff": 30,
"compareStatus": "success",
"reportStatus": "success",
"createdAt": "2023-12-27T05:16:14Z",
"finishedAt": "2023-12-27T05:17:00Z",
"reportOssURL": "http://ai-textmind.bj.bcebos.com//data/mnt/text_flow/paas_textdiff/task-affq81x73t23pqmk/textdiff_report_op/subtask-6625h1civfetzdau/subtask-6625h1civfetzdau.pdf?authorization=bce-auth-v1%2FALTAKsXn1egl7w69bHDIfE3SOD%2F2023-12-27T05%3A17%3A00Z%2F2592000%2Fhost%2Fe847aa97b8bc2387f8b635a68f2b727d3705e176fc13abfc02deed9e558168a7",
"diffItemList": [
{
"id": "item-uy6tbygc11uqrc3x",
"basePageNum": 1,
"baseDiffType": "replace",
"baseBoxArea": [
138,
210,
13,
14
],
"baseDiffBoxes": "[[138,210,13,14]]",
"baseDiffContent": "西",
"baseDiffContext": "地址:天津市河西区幸福街**号",
"comparePageNum": 1,
"compareDiffType": "replace",
"compareBoxArea": [
138,
210,
13,
14
],
"compareDiffBoxes": "[[138,210,13,14]]",
"compareDiffContent": "东",
"compareDiffContext": "地址:天津市河东区幸福街**号",
"baseDiffContentType": [],
"compareDiffContentType": []
},
{
"id": "item-nhhkrhhj55qduap0",
"basePageNum": 10,
"baseDiffType": "replace",
"baseBoxArea": [
327,
490,
11,
12
],
"baseDiffBoxes": "[[327,490,11,12]]",
"baseDiffContent": "百",
"baseDiffContext": "乙方:北京百度网讯科技有限公司",
"comparePageNum": 10,
"compareDiffType": "replace",
"compareBoxArea": [
327,
333,
11,
12
],
"compareDiffBoxes": "[[327,333,11,12]]",
"compareDiffContent": "千",
"compareDiffContext": "乙方:北京千度网讯科技有限公司",
"baseDiffContentType": [],
"compareDiffContentType": []
}
]
}
],
"status": "success",
"param": {
"sealRecognition": false,
"fullWidthHalfWidthRecognition": false,
"fontFamilyRecognition": false,
"fontSizeRecognition": false,
"handWritingRecognition": false
},
"duration": "46秒"
}
}
失败返回示例(详细的错误码说明见API文档-错误码):
{
"error_code": 0,
"error_msg": "",
"log_id": "262791511146655744",
"result": {
"taskId": "task-x41hqi5se8bkec4u",
"subTaskList": [
{
"baseDocId": "doc-9ek1pqekgqsz2gpk",
"baseDocName": "软硬件采购合同主版.docx",
"baseDocOssURL": "",
"compareDocId": "doc-qqwuga6st7hzshq0",
"compareDocName": "软硬件采购合同副版.docx",
"compareDocOssURL": "",
"similarity": "",
"totalDiff": 0,
"compareStatus": "failed",
"reportStatus": "failed",
"createdAt": "2023-12-27T03:38:16Z",
"finishedAt": "2023-12-27T03:38:16Z",
"reportOssURL": ""
}
],
"status": "failed",
"errorType": "quotaError",
"param": {
"sealRecognition": false,
"fullWidthHalfWidthRecognition": false,
"fontFamilyRecognition": false,
"fontSizeRecognition": false,
"handWritingRecognition": false
},
"duration": ""
}
}
前端SDK渲染
辅助用户在网页中便捷地调用文档比对服务,实现与当前智能文档分析平台-文档比对在线工具一致的前端渲染和交互界面。
使用说明
示例URL: https://textmind-sdk.bce.baidu.com/textmind/sdk/textdiff/{taskId}?access_token={access_token}
URL参数:
参数 | 值 |
---|---|
access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
taskId | 发送提交请求时返回的taskId |
iframe引入方式
提示一:使用示例代码前,请记得替换其中的示例Token、taskId。
<iframe
src="https://textmind-sdk.bce.baidu.com/textmind/sdk/textdiff/{taskId}?access_token={access_token}"
/>