文档解析(旧接口)
更新时间:2024-07-26
接口描述
支持对doc、pdf、图片、xlsx等16种格式文档进行解析,输出文档的版面、表格、阅读顺序、标题层级、旋转角度等信息,将非结构化数据转化为易于处理的结构化数据,识别准确率可达 90% 以上。
该接口正在公测中,完成个人/企业认证的用户可领取200页免费额度,如需申请更多额度或者QPS,请合作咨询,或者提交工单。
文档解析为异步接口,需要先调用提交请求接口获取 task_id,然后调用获取结果接口进行结果轮询,建议提交请求后 5~10 秒轮询。提交请求接口QPS为2,获取结果接口QPS为10。
提交请求接口
请求说明
请求示例
HTTP 方法:POST
请求URL: https://aip.baidubce.com/file/2.0/brain/online/v1/parser/task
URL参数:
参数 | 值 |
---|---|
access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header如下:
参数 | 值 |
---|---|
Content-Type | multipart/form-data |
Body中放置请求参数,参数详情如下:
请求参数
参数 | 是否必选 | 类型 | 可选值范围 | 说明 |
---|---|---|---|---|
file | 和file_url二选一 | file | - | 文件数据,支持的文件类型:-版式文档:pdf、jpg、jpeg、png、bmp、tif、tiff、ofd、ppt、pptx-流式文档:doc、docx、txt、xls、xlsx、wps文档大小不超过50M,文档页数不超过1000页(流式文档按2000字算一页)优先级: file > file_url,当file字段存在时,file_url字段失效 |
file_url | 和file二选一 | string | - | 文件完整URL,仅支持北京区域的BOS公网访问,URL长度不超过1024字节,支持格式与file一致,仅支持上传1篇文件,文件大小不超过50M优先级: file > file_url,当file字段存在时,file_url字段失效请注意关闭URL防盗链 |
file_name | 是 | string | - | 文件名,请保证文件名后缀正确,例如 "1.pdf " |
return_para_nodes | 否 | bool | true/false | 是否返回标题层级段落树。默认为false |
请求代码示例
提示:使用示例代码前,请记得替换其中的示例Token、文档地址或Base64信息。
import requests
import os
def create_task(url, file_path, file_url):
"""
Args:
url: string, 服务请求链接
file_path: 本地文件路径
file_url: 文件链接
Returns: 响应
"""
# 文件请求
body = {
"file": (os.path.basename(file_path), open(file_path, 'rb'), "multipart/form-data"),
}
# 文件链接请求
# body = {
# "file_url": (file_url, "multipart/form-data")
# }
data = {
"file_name": os.path.basename(file_path),
"return_para_nodes": True
}
response = requests.post(url, data=data, files=body)
return response
if __name__ == '__main__':
request_host = "https://aip.baidubce.com/file/2.0/brain/online/v1/parser/task?" \
"access_token={token}"
file_path = "test.pdf"
response = create_task(request_host, file_path, "")
print(response.json())
返回说明
返回参数
字段 | 类型 | 说明 |
---|---|---|
log_id | uint64 | 唯一的log id,用于问题定位 |
error_code | int | 错误码 |
error_msg | string | 错误描述信息 |
result | dict | 返回的结果列表 |
+ task_id | string | 该请求生成的task_id,后续使用该task_id获取审查结果 |
返回示例
成功返回示例:
{
"error_code": 0,
"error_msg": "",
"log_id": "10138598131137362685273505665433",
"result": {
"task_id": "task-3zy9Bg8CHt1M4pPOcX2q5bg28j26801S"
}
}
失败返回示例(详细的错误码说明见API文档-错误码):
{
"error_code": 282003,
"error_msg": "missing parameters",
"log_id": "37507631033585544507983253924141",
"result": "null"
}
获取结果接口
请求说明
请求示例
HTTP 方法:POST
请求URL: https://aip.baidubce.com/file/2.0/brain/online/v1/parser/task/query
URL参数:
参数 | 值 |
---|---|
access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header如下:
参数 | 值 |
---|---|
Content-Type | multipart/form-data |
Body中放置请求参数,参数详情如下:
请求参数
参数 | 是否必选 | 类型 | 说明 |
---|---|---|---|
task_id | 是 | string | 发送提交请求时返回的task_id |
请求代码示例
提示:使用示例代码前,请记得替换其中的示例Token、task_id。
import requests
def query_task(url, task_id):
"""
Args:
url: string, 请求链接
task_id: string, task id
Returns: 响应
"""
data = {
"task_id": task_id
}
response = requests.post(url, data=data, files=data)
return response
if __name__ == '__main__':
task_id = "task-3ej6eh9m98OzWEovWlJv0B2pJpVhd1T0"
request_host = "https://aip.baidubce.com/file/2.0/brain/online/v1/parser/task/query?" \
"access_token={token}"
resp = query_task(request_host, task_id)
print(resp.json())
返回说明
返回参数
字段 | 类型 | 说明 |
---|---|---|
log_id | uint64 | 唯一的log id,用于问题定位 |
error_code | int | 错误码 |
error_msg | string | 错误描述信息 |
result | dict | 返回的结果列表 |
+ task_id | string | 任务ID |
+ status | string | 任务状态,pending:排队中;running:运行中;success:成功;failed:失败 |
+ task_error | string | 解析报错信息,包含任务失败、额度不够 |
+ duration | string | 任务执行时长 |
+ parse_result_url | string | 文档解析结果的bos链接 |
可通过parse_result_url下载解析结果的JSON文件,parse_result_url的返回参数如下:
字段 | 类型 | 说明 |
---|---|---|
file_name | string | 文档名称 |
file_content | list |
文档解析的内容 |
+ page_num | int | 页码,从0开始 |
+ page_size | dict | 页面大小,版式格式时有效 |
++ width | float | 页面宽度,版式格式时有效 |
++ height | float | 页面高度,版式格式时有效 |
+ page_angle | int | 页面旋转角度,版式格式时有效 |
+ is_scan | bool | 是否为扫描件 |
+ page_content | dict | 文档单页的解析内容 |
++ layout | string | 页面内layout布局数据 |
+++ node_id | int | 和para_node中的node_id对应 |
+++ box | list |
边框数据 「x, y, w, h」(x, y)为坐标点坐标,w为box宽度,h为box高度(以页面坐标为原点),版式格式时有效 |
+++ type | string | 布局类型 「text」- 段落、「image」- 图片、「table」- 表格、「head_tail」- 页眉页脚、「contents」- 目录、「cell」- 单元格(仅表格内才有) |
+++ text | string | 布局内文字信息 |
+++ children | list |
布局嵌套数据, 当前layout type为table时有值,列表内部数据结构同layout ,为单元格的内容 |
++++ box | list |
边框数据 「x, y, w, h」(x, y)为坐标点坐标,w为box宽度,h为box高度(以页面坐标为原点),版式格式时有效 |
++++ type | string | 「cell」- 单元格(仅表格内才有) |
++++ text | string | 表格单元格内文字 |
+++ matrix | list |
二维数组 表示表格内部合并单元格信息,「table类型layout返回,见table layout示例」 |
+++ merge_table | string | 表格结构才有该字段,「begin」- 跨页表格开始、「inner」- 跨页表格中间表格(表格跨页超过两页)、「end」- 跨页表格结束 |
++ sheet_name | string | excel sheet表名 |
++ type | string | 页面属性 「text」- 正文、「contents」- 目录、「appendix」- 附录、「others」- 其他 |
para_nodes | list |
文章段落标题层级结构树,「return_para_nodes=True」时返回 |
+ node_id | int | 节点id(从1开始计数,存在root节点id为0) |
+ text | string | 节点对应文本内容 |
+ node_type | string | 节点类型 样举值「root、title、text、image、table、head_tail、contents」 |
+ parent | int | 最近父节点node_id |
+ children | list |
子节点 node_id 数组 |
+ para_type | string | 标题类型,当nodetype为title时,固定格式 title{int}(如title_1、title_2)对应标题层数,其余情况同node_type |
+ position | list |
节点对应在文档中的位置信息,包含layout的位置信息。列表形式,每个元素为一个layout的位置信息 |
++ pageno | int | 对应文档页码 |
++ layout_index | int | layout在文档当前页中的索引 |
++ box | list |
layout在文档当前页中的外接矩形的坐标[x, y, w, h] |
返回示例
成功返回示例:
{
"log_id": "23596597899286921761579365582373",
"error_code": 0,
"error_msg": "",
"result":
{
"task_id": "task-UnvGsgbYZp9pS3BZRHn11ifzjNvKzTgf",
"status": "success",
"task_error": null,
"duration": 902.0,
"parse_result_url": "https:xxxxxxxxxxxxxxxxxxx"
}
}
解析结果示例:
{
"file_name": "示例文件.pdf",
"para_nodes": [
{
"node_id": 0,
"text": "",
"node_type": "root",
"parent": null,
"children": [1],
"para_type": "root",
"position": []
},
{
"node_id": 1,
"text": "建构大模型智能审查方案",
"node_type": "title",
"parent": 0,
"children": [2],
"para_type": "title_1",
"position": [
{
"pageno": 0,
"layout_index": 0,
"box": [164, 115, 288, 28]
}
]
},
{
"node_id": 2,
"text": "阿德勒的主张",
"node_type": "title",
"parent": 1,
"children": [3],
"para_type": "title_2",
"position": [
{
"pageno": 0,
"layout_index": 1,
"box": [79, 175, 271, 15]
}
]
},
{
"node_id": 3,
"text": "阿德勒是个体心理学的创始人,他的理论强调个体在社会关系中的自我提升和归属感。",
"node_type": "text",
"parent": 2,
"children": [],
"para_type": "text",
"position": [
{
"pageno": 0,
"layout_index": 2,
"box": [79, 224, 441, 44]
}
]
}
],
"file_content": [
{
"page_num": 0,
"page_size": {
"width": 612,
"height": 792
},
"page_angle": 0,
"is_scan": false,
"page_content": {
"layout": [
{
"box": [164, 115, 288, 28],
"type": "text",
"text": "建构大模型智能审查方案",
"node_id": 1
},
{
"box": [79, 175, 271, 15],
"type": "text",
"text": "阿德勒的主张",
"node_id": 2
},
{
"box": [79, 224, 441, 44],
"type": "text",
"text": "阿德勒是个体心理学的创始人,他的理论强调个体在社会关系中的自我提升和归属感。",
"node_id": 3
}
]
}
}
]
}
失败返回示例(详细的错误码说明见API文档-错误码):
{"log_id": "13665091038742503867108513247608",
"error_code": "282007",
"error_msg": "task not exist, please check task id",
"result": "null"}