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

文档比对

接口描述

文档比对支持精准比对文档的增删改差异,快速定位并高亮显示差异原文,支持导出完整的比对报告,大幅提升比对准确性和效率。如希望快速可视化体验效果,可登录智能文档分析平台,一键上传文档,在线测试;在线工具和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}"
/>
上一篇
合同审查
下一篇
文档抽取