文档比对
接口描述
文档比对支持文档1对1、1对多比对,可指定页面精细化核验,精准识别、高亮定位增删改差异,并一键导出比对报告,大幅提升比对准确性和效率。 如希望快速可视化体验效果,可登录智能文档分析平台,一键上传文档,在线测试;在线工具和API服务的额度共享互通。
文档比对API服务为异步接口,完整流程分为以下两个阶段:
比对结果获取:调用提交请求接口后将返回taskID,建议等待5~10秒后再调用获取结果接口进行轮询。
报告生成与下载:获取到比对结果后,可对比对差异项进行忽略操作;保存忽略项后系统将异步生成最终报告,建议保存成功后开始轮询,获取到报告链接后即可下载。
各接口QPS限制如下:提交请求接口为2,获取结果接口与保存忽略项接口均为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 | 与 baseFileURL 二选一 | file | - | 文件数据,标准文档(主版)。 支持的文件类型:图片(bmp/jpg/jpeg/png/tif/tiff)、文档(doc/docx/wps/pdf/ofd)。 支持的文件数量:仅支持传入一个标准文档。 支持的文件大小:单个文件不超过 50M。 支持的图像尺寸:最短边至少 15px,最长边最大 4096px。 优先级: baseFile > baseFileURL,当 baseFile 字段存在时,baseFileURL 字段失效 |
| compareFile | 与 compareFileURL 二选一 | file | - | 文件数据,比对文档(副版)。 支持的文件类型:图片(bmp/jpg/jpeg/png/tif/tiff)、文档(doc/docx/wps/pdf/ofd)、压缩包:zip(包内文件须为上述图片或文档格式)。 支持的文件数量:可一次传入一个或多个比对文档,或一个 zip 压缩包。 支持的文件大小:单个文件不超过 50M;zip 压缩包不超过 200M,包内单文件不超过 50M。 支持的图像尺寸:最短边至少 15px,最长边最大 4096px。 优先级: compareFile > compareFileURL,当 compareFile 字段存在时,compareFileURL 字段失效。 |
| baseFileURL | 与 baseFile 二选一 | string | - | 文件完整 URL,仅支持 BOS 公网访问,URL 长度不超过 1024 字节。 支持的文件类型:图片(bmp/jpg/jpeg/png/tif/tiff)、文档(doc/docx/wps/pdf/ofd)。支持的文件数量:仅支持传入一篇标准文档。 支持的文件大小:单个文件不超过 50M。 支持的图像尺寸:最短边至少 15px,最长边最大 4096px。 优先级: baseFile > baseFileURL,当 baseFile 字段存在时,baseFileURL 字段失效。 请注意关闭 URL 防盗链 |
| compareFileURL | 与 compareFile 二选一 | string | - | 文件完整 URL,仅支持 BOS 公网访问,URL 长度不超过 1024 字节。 支持的文件类型:图片(bmp/jpg/jpeg/png/tif/tiff)、文档(doc/docx/wps/pdf/ofd)、压缩包:zip(仅1VN多文档比对使用,包内文件须为上述图片或文档格式)。 支持的文件数量:可传入单个URL,或单个字段传JSON数组字符串一次传入多个URL,或一个zip压缩包URL。 支持的文件大小:单个文件不超过 50M;zip 压缩包不超过 200M,包内单文件不超过 50M。 支持的图像尺寸:最短边至少 15px,最长边最大 4096px。 优先级: compareFile > compareFileURL,当 compareFile 字段存在时,compareFileURL 字段失效。 请注意关闭 URL 防盗链。 |
| param | 否 | string | - | 文档比对参数,将指定参数以 json 格式传递。其中特殊差异识别参数(sealRecognition 等)默认为 false,布局差异识别参数(coverRecognition 等)默认为 true。 例如,传递参数{"sealRecognition":true,"handWritingRecognition":true} 将分别启用印章识别与手写体识别功能。 |
| + specificType | 否 | string | specificPageContent / specificPageNumber |
特定页比对模式。 不传或传空表示全文比对;specificPageContent 表示按内容识别特殊页,specificPageNumber 表示按页码范围比对。两者互斥,且必须与所传子对象匹配 |
| + specificPageContent | 否 | dict | - | specificType=specificPageContent 时生效,含四个 bool 子字段,默认均为 false,不可全为 false |
| ++ needSealPage | 否 | bool | true/false | 是否比对印章页,默认为 false |
| ++ needCoverPage | 否 | bool | true/false | 是否比对封面页,默认为 false。封面页取文档第一页 |
| ++ needCatalogPage | 否 | bool | true/false | 是否比对目录页,默认为 false |
| ++ needBackCoverPage | 否 | bool | true/false | 是否比对封底页,默认为 false。封底页取文档最后一页 |
| + specificPageNumber | 否 | dict | - | specificType=specificPageNumber 时生效,含 baseStart / baseEnd(标准文档起止页)、compareStart / compareEnd(比对文档起止页)四项,均必填;且 baseStart/baseEnd、compareStart/compareEnd 页码范围必须相等 |
| ++ baseStart | 是 | int | ≥1 | 标准文档起始页页码,specificType=specificPageNumber 时必填。需 ≥1 且不大于 baseEnd |
| ++ baseEnd | 是 | int | ≥baseStart | 标准文档终止页页码,specificType=specificPageNumber 时必填。不得超过标准文档实际总页数 |
| ++ compareStart | 是 | int | ≥1 | 比对文档起始页页码,specificType=specificPageNumber 时必填。需 ≥1 且不大于 compareEnd |
| ++ compareEnd | 是 | int | ≥compareStart | 比对文档终止页页码,specificType=specificPageNumber 时必填。不得超过比对文档实际总页数 |
| + 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 |
| + coverRecognition | 否 | bool | true/false | 是否识别封面差异,默认为 true。特定页比对模式(specificType 非空)不支持传参,恒按默认值 true 生效 |
| + catalogRecognition | 否 | bool | true/false | 是否识别目录页差异,默认为 true。特定页比对模式(specificType 非空)不支持传参,恒按默认值 true 生效 |
| + headerFooterRecognition | 否 | bool | true/false | 是否识别页眉页脚差异,默认为 true。 |
| + appendixRecognition | 否 | bool | true/false | 是否识别附录页差异,默认为 true。特定页比对模式(specificType 非空)不支持传参,恒按默认值 true 生效 |
| + paragraphErrorRecognition | 否 | bool | true/false | 是否识别信息错段,默认为 true。特定页比对模式(specificType 非空)不支持传参,恒按默认值 true 生效 |
| + pageErrorRecognition | 否 | bool | true/false | 是否识别信息错页,默认为 true。 特定页比对模式(specificType 非空)不支持传参,恒按默认值 true 生效 |
请求代码示例
提示:使用示例代码前,请记得替换其中的示例Token、文档地址或Base64信息。
示例1: 1V1两两文档比对
1import requests
2import os
3import json
4
5'''
6文档比对-提交请求
7'''
8
9
10request_host = "https://aip.baidubce.com/file/2.0/brain/online/v1/textdiff/create_task"
11# 二进制方式打开文件
12f1 = '[本地文件-标准文档]'
13f2 = '[本地文件-比对文档]'
14body = {
15 "baseFile": (os.path.basename(f1), open(f1, 'rb'), "multipart/form-data"),
16 "compareFile": (os.path.basename(f2), open(f2, 'rb'), "multipart/form-data"),
17}
18
19param = {
20 "sealRecognition": False,
21 "handWritingRecognition": False
22}
23data = {"param": json.dumps(param)}
24access_token = '[调用鉴权接口获取的token]'
25request_url = f"{request_host}?access_token={access_token}"
26response = requests.post(request_url, data=data, files=body)
27if response:
28 print(response.json())
示例2: 1VN多文档对比&特定页模式比对
1import json
2import os
3import requests
4
5'''
6文档比对-提交请求(1VN 多文档:compareFileURL 单字段传 JSON 数组字符串)
7'''
8
9request_host = "https://aip.baidubce.com/file/2.0/brain/cloud/online/v1/textdiff/create_task"
10access_token = '[调用鉴权接口获取的token]'
11
12base_file_url = '[标准文档(主版)的 BOS 公网 URL]'
13compare_file_urls = [
14 '[比对文档(副版)1 的 BOS 公网 URL]',
15 '[比对文档(副版)2 的 BOS 公网 URL]',
16]
17
18param = {
19 "sealRecognition": False,
20 "handWritingRecognition": False,
21}
22
23# 关键:compareFileURL 只传一个字段,值是 JSON 数组字符串
24body = [
25 ("param", (None, json.dumps(param))),
26 ("baseFileURL", (None, base_file_url)),
27 ("compareFileURL", (None, json.dumps(compare_file_urls))),
28]
29
30request_url = f"{request_host}?access_token={access_token}"
31response = requests.post(request_url, files=body, timeout=300)
32print(response.json())
33
34# ===== 非 URL(本地文件上传)模式说明 =====
35# 如果不用 URL 而是上传本地文件,把 baseFileURL / compareFileURL 换成 baseFile / compareFile,
36# 值改为 (文件名, 文件二进制, "multipart/form-data") 三元组;1VN 时 compareFile 用同名多值即可,不需要 JSON 数组字符串:
37#
38# f1 = '[本地文件-标准文档(主版)]'
39# f2 = '[本地文件-比对文档(副版)1]'
40# f3 = '[本地文件-比对文档(副版)2]'
41# body = [
42# ("param", (None, json.dumps(param))),
43# ("baseFile", (os.path.basename(f1), open(f1, 'rb'), "multipart/form-data")),
44# ("compareFile", (os.path.basename(f2), open(f2, 'rb'), "multipart/form-data")),
45# ("compareFile", (os.path.basename(f3), open(f3, 'rb'), "multipart/form-data")),
46# ]
47#
48# baseFile/baseFileURL、compareFile/compareFileURL 分别二选一,二者同时存在时以文件字段为准。
返回说明
返回参数
| 字段 | 类型 | 说明 |
|---|---|---|
| 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": "task-affq81x73t23pqmk"
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。仅 status 为 failed 时返回,任务正常时不返回该字段 |
| + param | dict | 任务实际生效的文档比对参数回显,含特定页比对参数、特殊差异识别参数与布局差异识别参数 |
| ++ specificType | string | 任务实际生效的特定页比对模式回显,全文比对时为空 |
| ++ specificPageContent | dict | 按内容识别特殊页的参数回显,specificType=specificPageContent 时有值,否则为空 |
| +++ needSealPage | bool | 是否比对印章页 |
| +++ needCoverPage | bool | 是否比对封面页(文档第一页) |
| +++ needCatalogPage | bool | 是否比对目录页 |
| +++ needBackCoverPage | bool | 是否比对封底页(文档最后一页) |
| ++ specificPageNumber | dict | 按页码范围比对的参数回显,specificType=specificPageNumber 时有值,否则为空 |
| +++ baseStart | int | 标准文档实际参与比对的起始页页码 |
| +++ baseEnd | int | 标准文档实际参与比对的终止页页码 |
| +++ compareStart | int | 比对文档实际参与比对的起始页页码 |
| +++ compareEnd | int | 比对文档实际参与比对的终止页页码 |
| ++ sealRecognition | bool | 是否识别印章差异 |
| ++ fullWidthHalfWidthRecognition | bool | 是否识别中英文符号差异 |
| ++ fontFamilyRecognition | bool | 是否识别字体差异 |
| ++ fontSizeRecognition | bool | 是否识别字号差异 |
| ++ handWritingRecognition | bool | 是否识别手写体差异 |
| ++ coverRecognition | bool | 是否识别封面差异,特定页比对模式(specificType 非空)不支持传参,恒回显为 true |
| ++ catalogRecognition | bool | 是否识别目录页差异,特定页比对模式(specificType 非空)不支持传参,恒回显为 true |
| ++ headerFooterRecognition | bool | 是否识别页眉页脚差异,回显实际生效值 |
| ++ appendixRecognition | bool | 是否识别附录页差异,特定页比对模式(specificType 非空)不支持传参,恒回显为 true |
| + subTaskList | array | 文档比对结果列表。1VN 多文档比对时该列表包含多个元素,每个比对文档对应一个子任务,差异结果、报告与状态均按子任务独立返回;1V1 时为一个元素。 |
| ++ subtaskId | string | 子任务ID,1VN 场景下用于区分各比对文档对应的差异结果与报告 |
| ++ similarity | string | 该子任务两份文档的相似度,compareStatus 非 success 时为空 |
| ++ totalDiff | int | 该子任务两份文档的差异点数量,不因差异项被忽略而减少 |
| ++ baseDocId | string | 标准文档ID |
| ++ baseDocName | string | 标准文档名称 |
| ++ baseDocOssURL | string | 标准文档的对象存储下载链接,有效期30天,为解析后的标准文档PDF地址,用于SDK渲染;compareStatus 非 success 时为空 |
| ++ compareDocId | string | 比对文档ID |
| ++ compareDocName | string | 比对文档名称 |
| ++ compareDocOssURL | string | 比对文档的对象存储下载链接,有效期30天,为解析后的比对文档PDF地址,用于SDK渲染;compareStatus 非 success 时为空 |
| ++ compareStatus | string | 比对子任务状态,pending:排队中;processing:运行中;success:成功;failed:失败 |
| ++ compareMessage | string | 比对子任务失败的描述信息,compareStatus 为 failed 时有值;否则不返回该字段 |
| ++ reportStatus | string | 比对报告状态,success:成功;failed:失败;pending:排队中;processing:生成中(含保存忽略项后重新生成,此期间 reportOssURL 与 reportExcelOssURL 为空) |
| ++ reportMessage | string | 比对报告失败的描述信息,reportStatus 为 failed 时有值;否则不返回该字段 |
| ++ reportOssURL | string | 比对报告的对象存储下载链接,有效期30天,为两份文档的差异项总结报告;reportStatus 非 success 时为空 |
| ++ reportExcelOssURL | string | 比对报告 Excel(差异详情清单)的对象存储下载链接,有效期30天,与 PDF 报告由同一次报告生成一并产出;reportStatus 非 success 时为空且不返回该字段 |
| ++ createdAt | string | 子任务创建时间 |
| ++ finishedAt | string | 子任务结束时间,1VN 场景下各子任务的结束时间相互独立 |
| ++ diffItemList | array | 该子任务的比对结果列表,元素为单个差异项;无差异时不返回该字段 |
| +++ 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 | int | 比对文档页码 |
| +++ compareDiffType | string | 比对文档差异类型,insert:新增;delete:删除;replace:修改 |
| +++ compareBoxArea | [4]int | 比对文档差异点的原文四角点坐标,每个框选范围包含左上角x坐标、左上角y坐标、矩形框宽度、矩形框高度,共四个数值,如[89,74,61,12];该侧无对应差异内容时(如差异类型为 delete)为空数组 |
| +++ compareDiffBoxes | string | 比对文档差异点框的位置,二维数组的字符串,当差异项出现换行时,为多个字符串;该侧无对应差异内容时为"[]" |
| +++ compareDiffContent | string | 比对文档差异点内容 |
| +++ compareDiffContext | string | 比对文档差异点上下文 |
| +++ compareDiffContentType | array | 比对文档比对差异类型,seal:印章;figure:图片;size:字号;font:字体;full_half_width:中英文符号 |
| +++ ignored | bool | 该差异项是否已被人工忽略,默认 false。忽略状态由保存忽略项接口写入,本接口仅回显;差异项总数 totalDiff 不因忽略而减少 |
| +++ ignoreReason | string | 该差异项被忽略的原因,未忽略时为空字符串 |
返回示例
成功返回示例(以1VN多文档比对为例,包含字段:subtaskId、reportExcelOssURL、ignored、ignoreReason、param.specificType 及布局差异识别参数回显;为控制篇幅,示例中各子任务的 diffItemList 仅节选部分差异项,实际返回条数与 totalDiff 一致):
1{
2 "error_code": 0,
3 "error_msg": "",
4 "log_id": "262826631337504768",
5 "result": {
6 "taskId": "task-affq81x73t23pqmk",
7 "subTaskList": [
8 {
9 "subtaskId": "subtask-6625h1civfetzdau",
10 "baseDocId": "doc-egdc1iziztwmech2",
11 "baseDocName": "软硬件采购合同标准版.docx",
12 "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",
13 "compareDocId": "doc-r8xbre9f5r3i8v85",
14 "compareDocName": "软硬件采购合同A.docx",
15 "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",
16 "similarity": "84.69%",
17 "totalDiff": 30,
18 "compareStatus": "success",
19 "compareMessage": "",
20 "reportStatus": "success",
21 "reportMessage": "",
22 "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",
23 "reportExcelOssURL": "http://ai-textmind.bj.bcebos.com/data/mnt/text_flow/paas_textdiff/task-affq81x73t23pqmk/textdiff_report_op/subtask-6625h1civfetzdau/subtask-6625h1civfetzdau.xlsx?authorization=bce-auth-v1%2FALTAKsXn1egl7w69bHDIfE3SOD%2F2023-12-27T05%3A17%3A00Z%2F2592000%2Fhost%2F3f1d0c7a5b2e48d9a6c07be91d4a5c8e2b7f6013cd94a2f5e8b17c60d3a94f21",
24 "createdAt": "2023-12-27T05:16:14Z",
25 "finishedAt": "2023-12-27T05:17:00Z",
26 "diffItemList": [
27 {
28 "id": "item-uy6tbygc11uqrc3x",
29 "basePageNum": 1,
30 "baseDiffType": "replace",
31 "baseBoxArea": [
32 138,
33 210,
34 13,
35 14
36 ],
37 "baseDiffBoxes": "[[138,210,13,14]]",
38 "baseDiffContent": "西",
39 "baseDiffContext": "地址:天津市河西区幸福街**号",
40 "baseDiffContentType": [],
41 "comparePageNum": 1,
42 "compareDiffType": "replace",
43 "compareBoxArea": [
44 138,
45 210,
46 13,
47 14
48 ],
49 "compareDiffBoxes": "[[138,210,13,14]]",
50 "compareDiffContent": "东",
51 "compareDiffContext": "地址:天津市河东区幸福街**号",
52 "compareDiffContentType": [],
53 "ignored": true,
54 "ignoreReason": "地址表述差异,人工确认可忽略"
55 },
56 {
57 "id": "item-nhhkrhhj55qduap0",
58 "basePageNum": 10,
59 "baseDiffType": "replace",
60 "baseBoxArea": [
61 327,
62 490,
63 11,
64 12
65 ],
66 "baseDiffBoxes": "[[327,490,11,12]]",
67 "baseDiffContent": "百",
68 "baseDiffContext": "乙方:北京百度网讯科技有限公司",
69 "baseDiffContentType": [],
70 "comparePageNum": 10,
71 "compareDiffType": "replace",
72 "compareBoxArea": [
73 327,
74 333,
75 11,
76 12
77 ],
78 "compareDiffBoxes": "[[327,333,11,12]]",
79 "compareDiffContent": "千",
80 "compareDiffContext": "乙方:北京千度网讯科技有限公司",
81 "compareDiffContentType": [],
82 "ignored": false,
83 "ignoreReason": ""
84 }
85 ]
86 },
87 {
88 "subtaskId": "subtask-p3wq8mzn5tvc1jde",
89 "baseDocId": "doc-egdc1iziztwmech2",
90 "baseDocName": "软硬件采购合同标准版.docx",
91 "baseDocOssURL": "http://ai-textmind.bj.bcebos.com/data/mnt/text_flow/parser/doc-egdc1iziztwmech2/pdf/doc-egdc1iziztwmech2.pdf?authorization=...",
92 "compareDocId": "doc-mk29sfd7q1zxbv63",
93 "compareDocName": "软硬件采购合同B.docx",
94 "compareDocOssURL": "http://ai-textmind.bj.bcebos.com/data/mnt/text_flow/parser/doc-mk29sfd7q1zxbv63/pdf/doc-mk29sfd7q1zxbv63.pdf?authorization=...",
95 "similarity": "91.23%",
96 "totalDiff": 12,
97 "compareStatus": "success",
98 "compareMessage": "",
99 "reportStatus": "success",
100 "reportMessage": "",
101 "reportOssURL": "http://ai-textmind.bj.bcebos.com/data/mnt/text_flow/paas_textdiff/task-affq81x73t23pqmk/textdiff_report_op/subtask-p3wq8mzn5tvc1jde/subtask-p3wq8mzn5tvc1jde.pdf?authorization=...",
102 "reportExcelOssURL": "http://ai-textmind.bj.bcebos.com/data/mnt/text_flow/paas_textdiff/task-affq81x73t23pqmk/textdiff_report_op/subtask-p3wq8mzn5tvc1jde/subtask-p3wq8mzn5tvc1jde.xlsx?authorization=...",
103 "createdAt": "2023-12-27T05:16:14Z",
104 "finishedAt": "2023-12-27T05:17:26Z",
105 "diffItemList": [
106 {
107 "id": "item-c8vq1ktz09hbxr4m",
108 "basePageNum": 3,
109 "baseDiffType": "delete",
110 "baseBoxArea": [
111 96,
112 318,
113 42,
114 13
115 ],
116 "baseDiffBoxes": "[[96,318,42,13]]",
117 "baseDiffContent": "质保期",
118 "baseDiffContext": "质保期为验收合格后12个月",
119 "baseDiffContentType": [],
120 "comparePageNum": 3,
121 "compareDiffType": "delete",
122 "compareBoxArea": [],
123 "compareDiffBoxes": "[]",
124 "compareDiffContent": "",
125 "compareDiffContext": "",
126 "compareDiffContentType": [],
127 "ignored": false,
128 "ignoreReason": ""
129 }
130 ]
131 }
132 ],
133 "status": "success",
134 "param": {
135 "specificType": "specificPageNumber",
136 "specificPageNumber": {
137 "baseStart": 1,
138 "baseEnd": 10,
139 "compareStart": 1,
140 "compareEnd": 10
141 },
142 "sealRecognition": false,
143 "fullWidthHalfWidthRecognition": false,
144 "fontFamilyRecognition": false,
145 "fontSizeRecognition": false,
146 "handWritingRecognition": false,
147 "coverRecognition": true,
148 "catalogRecognition": true,
149 "headerFooterRecognition": true,
150 "appendixRecognition": true
151 },
152 "duration": "72秒"
153 }
154}
说明:1V1 比对时 subTaskList 仅一个元素,结构与上例中单个子任务完全一致;轮询期间未完成的子任务,其 similarity、reportOssURL、reportExcelOssURL、diffItemList 不返回,此时任务 status 为 pending 或 processing。全文比对(未传 specificType)时,param 中 specificType 为空且不返回 specificPageNumber / specificPageContent。
失败返回示例(详细的错误码说明见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": "软硬件采购合同A.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}
保存忽略项接口
说明: 该接口用于保存某个子任务的差异项忽略结果。服务端以本次提交的列表为全量忽略结果整体覆盖落库——列表内的差异项置为已忽略,未出现在列表中的差异项一律置为未忽略(即撤销忽略)。 忽略状态落库后,服务端异步重新生成 PDF 与 Excel 报告,本接口不等待报告生成完成即返回。重生成期间子任务 reportStatus 为 processing,此时 reportOssURL / reportExcelOssURL 为空;需通过获取结果接口轮询至 reportStatus 为 success 后,重新读取这两个字段获取新的报告下载链接(旧链接不再更新,请勿复用)。 同一子任务的报告重生成串行执行,reportStatus 为 processing 时本接口会拒绝新的保存请求;重生成失败仅将 reportStatus 置为 failed,不改变 compareStatus 与任务终态,已保存的忽略状态不变化。差异项总数 totalDiff 不因忽略而减少。
请求说明
请求示例
HTTP 方法:POST
请求URL: https://aip.baidubce.com/rest/2.0/brain/online/v1/textdiff/save_ignores
URL参数:
| 参数 | 值 |
|---|---|
| access_token | 通过API Key和Secret Key获取的access_token,参考"Access Token获取" |
Header如下:
| 参数 | 值 |
|---|---|
| Content-Type | application/x-www-form-urlencoded |
Body中放置请求参数(JSON 格式),参数详情如下:
请求参数
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| taskId | 是 | string | 发送提交请求时返回的taskId |
| subtaskId | 是 | string | 子任务ID,取自获取结果接口返回的 subTaskList 中的 subtaskId。忽略项按子任务粒度保存,1VN 多文档比对时需逐个子任务分别保存 |
| diffItemIdList | 是 | string | 已忽略差异项的ID列表(JSON 数组字符串,如 ["item-1","item-2"]),元素取值为获取结果接口返回的 diffItemList 中的 id。需提交该子任务的全量已忽略ID,不可只提交本次新增忽略的部分;全部撤销忽略时传 "[]"。列表中包含不属于该子任务的差异项ID时返回错误 |
请求代码示例
提示:使用示例代码前,请记得替换其中的示例Token、taskId、subtaskId、差异项ID。
1import json
2import requests
3
4'''
5文档比对-保存忽略项
6'''
7
8request_host = "https://aip.baidubce.com/rest/2.0/brain/online/v1/textdiff/save_ignores"
9# 需提交该子任务的全量已忽略差异项ID,全部撤销忽略时传 "[]"
10body = {
11 "taskId": "[调用提交请求接口获取的taskId]",
12 "subtaskId": "[调用获取结果接口获取的subtaskId]",
13 "diffItemIdList": json.dumps([
14 "item-uy6tbygc11uqrc3x",
15 "item-nhhkrhhj55qduap0"
16 ]),
17}
18
19access_token = '[调用鉴权接口获取的token]'
20request_url = f"{request_host}?access_token={access_token}"
21response = requests.post(request_url, data=body)
22if response:
23 print(response.json())
返回说明
返回参数
| 字段 | 类型 | 说明 |
|---|---|---|
| log_id | uint64 | 唯一的log id,用于问题定位 |
| error_code | int | 错误码,0 表示保存成功 |
| error_msg | string | 错误描述信息,成功时为空字符串 |
| result | null | 本接口无返回数据,调用方以 error_code 为 0 判断保存是否成功 |
返回示例
成功返回示例:
1{
2 "error_code": 0,
3 "error_msg": "",
4 "log_id": "262826631337504773",
5 "result": null
6}
失败返回示例(详细的错误码说明见API文档-错误码):
1{
2 "error_code": 282003,
3 "error_msg": "missing parameters",
4 "log_id": "262826631337504770"
5}
前端SDK渲染
辅助用户在网页中便捷地调用文档比对服务,实现与当前智能文档分析平台-文档比对在线工具一致的前端渲染和交互界面。
使用说明
示例URL: https://textmind-sdk.bce.baidu.com/textmind/sdk/textdiff/{taskId}?access_token={access_token}&subtaskId={subtaskId}
URL参数:
| 参数 | 值 |
|---|---|
| access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
| taskId | 发送提交请求时返回的taskId |
| subtaskId | 子任务ID,1VN 多文档比对时用于指定渲染哪一组比对结果;1V1 时可省略 |
iframe引入方式
提示一:使用示例代码前,请记得替换其中的示例Token、taskId。
1<iframe
2 src="https://textmind-sdk.bce.baidu.com/textmind/sdk/textdiff/{taskId}?access_token={access_token}&subtaskId={subtaskId}"
3/>
评价此篇文章
