文档比对
接口描述
文档比对支持精准比对文档的增删改差异,快速定位并高亮显示差异原文,支持导出完整的比对报告,大幅提升比对准确性和效率。如希望快速可视化体验效果,可登录智能文档分析平台,一键上传文档,在线测试;在线工具和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/jpg/jpeg/png/tif/tiff-文档:doc/docx/wps/pdf/ofd支持的文件大小:仅支持上传一篇文件,文件大小不超过10M。图像最短边至少15px,最长边最大4096px优先级: baseFile > baseFileURL,当baseFile字段存在时,baseFileURL字段失效 |
compareFile | 和 compareFile/compareFileURL 二选一 | file | - | 文件数据,副版比对文档支持的文件类型:-图片:bmp/jpg/jpeg/png/tif/tiff-文档:doc/docx/wps/pdf/ofd支持的文件大小:仅支持上传一篇文件,文件大小不超过10M。图像最短边至少15px,最长边最大4096px优先级: compareFile > compareFileURL,当compareFile字段存在时,compareFileURL字段失效 |
baseFileURL | 和 baseFile/baseFileURL 二选一 | string | - | 文件完整URL,仅支持BOS公网访问,URL长度不超过1024字节支持的文件类型:-图片:bmp/jpg/jpeg/png/tif/tiff-文档:doc/docx/wps/pdf/ofd支持的文件大小:仅支持上传一篇文件,文件大小不超过10M。图像最短边至少15px,最长边最大4096px优先级: baseFile > baseFileURL,当baseFile字段存在时,baseFileURL字段失效请注意关闭URL防盗链 |
compareFileURL | 和 compareFile/compareFileURL 二选一 | string | - | 文件完整URL,仅支持BOS公网访问,URL长度不超过1024字节支持的文件类型:-图片:bmp/jpg/jpeg/png/tif/tiff-文档:doc/docx/wps/pdf/ofd支持的文件大小:仅支持上传一篇文件,文件大小不超过10M。图像最短边至少15px,最长边最大4096px优先级: 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信息。
1import requests
2import os
3
4'''
5文档比对-提交请求
6'''
7
8
9request_host = "https://aip.baidubce.com/file/2.0/brain/online/v1/textdiff/create_task"
10# 二进制方式打开图片文件
11f1 = '[本地文件-主版比对文档]'
12f2 = '[本地文件-副版比对文档]'
13body = {
14 "baseFile": (os.path.basename(f1), open(f1, 'rb'), "multipart/form-data"),
15 "compareFile": (os.path.basename(f2), open(f2, 'rb'), "multipart/form-data"),
16}
17
18data = {
19 "sealRecognition": False,
20 "handWritingRecognition": False
21}
22access_token = '[调用鉴权接口获取的token]'
23request_url = f"{request_host}?access_token={access_token}"
24response = requests.post(request_url, data=data, files=body)
25if response:
26 print(response.json())
返回说明
返回参数
字段 | 类型 | 说明 |
---|---|---|
log_id | uint64 | 唯一的log id,用于问题定位 |
error_code | int | 错误码 |
error_msg | string | 错误描述信息 |
result | dict | 返回的结果列表 |
+ taskId | string | 该请求生成的taskId,后续使用该taskId获取比对结果 |
返回示例
成功返回示例:
1{
2 "error_code": 0,
3 "error_msg": "",
4 "log_id": "259575694341050368",
5 "result": {
6 "taskId": "textreview-task-xnejhkwvcz5qpr3c"
7 }
8}
失败返回示例(详细的错误码说明见API文档-错误码):
1{
2 "error_code": 282003,
3 "error_msg": "missing parameters",
4 "log_id": "259909120864665600"
5}
获取结果接口
请求说明
请求示例
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。
1import requests
2
3'''
4文档比对-获取结果
5'''
6
7
8request_host = "https://aip.baidubce.com/file/2.0/brain/online/v1/textdiff/query_task"
9params = {"taskId": "[调用提交请求接口获取的taskId]"}
10
11access_token = '[调用鉴权接口获取的token]'
12request_url = f"{request_host}?access_token={access_token}"
13response = requests.post(request_url, params=params, files=params)
14if response:
15 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:中英文符号 |
返回示例
成功返回示例:
1{
2 "error_code": 0,
3 "error_msg": "",
4 "log_id": "262826631337504768",
5 "result": {
6 "taskId": "task-affq81x73t23pqmk",
7 "subTaskList": [
8 {
9 "baseDocId": "doc-egdc1iziztwmech2",
10 "baseDocName": "软硬件采购合同主版.docx",
11 "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",
12 "compareDocId": "doc-r8xbre9f5r3i8v85",
13 "compareDocName": "软硬件采购合同副版.docx",
14 "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",
15 "similarity": "84.69%",
16 "totalDiff": 30,
17 "compareStatus": "success",
18 "reportStatus": "success",
19 "createdAt": "2023-12-27T05:16:14Z",
20 "finishedAt": "2023-12-27T05:17:00Z",
21 "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",
22 "diffItemList": [
23 {
24 "id": "item-uy6tbygc11uqrc3x",
25 "basePageNum": 1,
26 "baseDiffType": "replace",
27 "baseBoxArea": [
28 138,
29 210,
30 13,
31 14
32 ],
33 "baseDiffBoxes": "[[138,210,13,14]]",
34 "baseDiffContent": "西",
35 "baseDiffContext": "地址:天津市河西区幸福街**号",
36 "comparePageNum": 1,
37 "compareDiffType": "replace",
38 "compareBoxArea": [
39 138,
40 210,
41 13,
42 14
43 ],
44 "compareDiffBoxes": "[[138,210,13,14]]",
45 "compareDiffContent": "东",
46 "compareDiffContext": "地址:天津市河东区幸福街**号",
47 "baseDiffContentType": [],
48 "compareDiffContentType": []
49 },
50 {
51 "id": "item-nhhkrhhj55qduap0",
52 "basePageNum": 10,
53 "baseDiffType": "replace",
54 "baseBoxArea": [
55 327,
56 490,
57 11,
58 12
59 ],
60 "baseDiffBoxes": "[[327,490,11,12]]",
61 "baseDiffContent": "百",
62 "baseDiffContext": "乙方:北京百度网讯科技有限公司",
63 "comparePageNum": 10,
64 "compareDiffType": "replace",
65 "compareBoxArea": [
66 327,
67 333,
68 11,
69 12
70 ],
71 "compareDiffBoxes": "[[327,333,11,12]]",
72 "compareDiffContent": "千",
73 "compareDiffContext": "乙方:北京千度网讯科技有限公司",
74 "baseDiffContentType": [],
75 "compareDiffContentType": []
76 }
77 ]
78 }
79 ],
80 "status": "success",
81 "param": {
82 "sealRecognition": false,
83 "fullWidthHalfWidthRecognition": false,
84 "fontFamilyRecognition": false,
85 "fontSizeRecognition": false,
86 "handWritingRecognition": false
87 },
88 "duration": "46秒"
89 }
90}
失败返回示例(详细的错误码说明见API文档-错误码):
1{
2 "error_code": 0,
3 "error_msg": "",
4 "log_id": "262791511146655744",
5 "result": {
6 "taskId": "task-x41hqi5se8bkec4u",
7 "subTaskList": [
8 {
9 "baseDocId": "doc-9ek1pqekgqsz2gpk",
10 "baseDocName": "软硬件采购合同主版.docx",
11 "baseDocOssURL": "",
12 "compareDocId": "doc-qqwuga6st7hzshq0",
13 "compareDocName": "软硬件采购合同副版.docx",
14 "compareDocOssURL": "",
15 "similarity": "",
16 "totalDiff": 0,
17 "compareStatus": "failed",
18 "reportStatus": "failed",
19 "createdAt": "2023-12-27T03:38:16Z",
20 "finishedAt": "2023-12-27T03:38:16Z",
21 "reportOssURL": ""
22 }
23 ],
24 "status": "failed",
25 "errorType": "quotaError",
26 "param": {
27 "sealRecognition": false,
28 "fullWidthHalfWidthRecognition": false,
29 "fontFamilyRecognition": false,
30 "fontSizeRecognition": false,
31 "handWritingRecognition": false
32 },
33 "duration": ""
34 }
35}
前端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。
1<iframe
2 src="https://textmind-sdk.bce.baidu.com/textmind/sdk/textdiff/{taskId}?access_token={access_token}"
3/>