文档

Python SDK使用指南

更新时间:

环境准备

  • Python 3

  • 安装 SDK 核心库 OpenAPI ,使用pip安装包依赖:

pip install alibabacloud_tea_openapi
pip install alibabacloud_docmind_api20220711==1.2.1

配置身份认证

  1. 创建AccessKey。

    详细介绍,请参见创建AccessKey

    重要

    阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。使用RAM用户时,需授予RAM用户文档智能相关的访问权限,再使用RAM用户的AccessKey调用SDK。详情请参见通过RAM用户控制文档智能使用权限

    强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。

    如果担心RAM用户的AccessKey泄露,可以考虑通过创建RAM角色并使用STS临时授权的账号调用服务,详情请参见通过STS临时授权的账号调用服务

  2. 添加阿里云SDK Credentials依赖。

    pip install alibabacloud_credentials
  3. 配置身份认证。

    本文以配置文件的方式为例。详细操作,请参见配置方案

调用接口提交文档处理任务

文档智能提供异步任务接口,Python SDK提供了本地文档上传和传入文档URL这两种调用方式。

若您需要识别的文件为大文件,耗时较长。您可对config对象设置以下属性。

# 建立连接超时时间
config.connect_timeout = 60000;
# 读取资源超时时间
config.read_timeout = 60000;

关于文档智能提供的所有OpenAPI,请参见API概览

使用本地文档提交异步任务

图片转Word、图片转Excel、图片转PDF接口不支持文件上传方式。

以下代码示例表示通过本地文件上传方式调用异步任务提交类API。

# -*- coding: utf-8 -*-
import sys
from typing import List
from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models
from alibabacloud_tea_util.client import Client as UtilClient
from alibabacloud_tea_util import models as util_models
from alibabacloud_credentials.client import Client as CredClient

def create_client() -> docmind_api20220711Client:
    """   
    @return: Client
    @throws Exception
    """
    # 调用接口时,程序直接访问凭证,读取您的访问密钥(即AccessKey)并自动完成鉴权。
    # 运行本示例前,请先完成步骤二:配置身份认证。
    # 本示例使用默认配置文件方式,通过配置Credentials文件创建默认的访问凭证。
    # 使用默认凭证初始化Credentials Client。
    cred=CredClient()
    config = open_api_models.Config(
        # 通过Credentials获取配置中的AccessKey ID
        access_key_id=cred.get_access_key_id(),
        # 通过Credentials获取配置中的AccessKey Secret
        access_key_secret=cred.get_access_key_secret()
    )
    # 访问的域名
    config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
    return docmind_api20220711Client(config)


def main() -> None:
    client = create_client()
    request = docmind_api20220711_models.SubmitDocStructureJobAdvanceRequest(
        # file_url_object : 本地文件流
        file_url_object=open("./example.pdf", "rb"),
        # file_name :文件名称。名称必须包含文件类型
        file_name='123.pdf',
        # file_name_extension : 文件后缀格式。与文件名二选一
        file_name_extension='pdf'
    )
    runtime = util_models.RuntimeOptions()
    try:
        # 复制代码运行请自行打印 API 的返回值
        response = client.submit_doc_structure_job_advance(request, runtime)
        # API返回值格式层级为 body -> data -> 具体属性。可根据业务需要打印相应的结果。如下示例为打印返回的业务id格式
        # 获取属性值均以小写开头,
        print(response.body.data.id)       
    except Exception as error:
        # 如有需要,请打印 error
        UtilClient.assert_as_string(error.message)

返回结果如下所示。

{
  "RequestId": "B2969F25-1A0B-5F08-9A16-EE694AD0****",
  "Data": {
    "Id": "docmind-20220922-b15f****"
  }
}

传入文档URL提交任务

您传入的文档URL必须为公网可访问下载的公网URL地址,无跨域限制,URL不带特殊转义字符。

以下代码示例表示通过文档URL方式调用异步任务提交类API。

# -*- coding: utf-8 -*-
import sys
from typing import List
from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models
from alibabacloud_tea_util.client import Client as UtilClient
from alibabacloud_credentials.client import Client as CredClient

def create_client() -> docmind_api20220711Client:
    """   
    @return: Client
    @throws Exception
    """
    # 调用接口时,程序直接访问凭证,读取您的访问密钥(即AccessKey)并自动完成鉴权。
    # 运行本示例前,请先完成步骤二:配置身份认证。
    # 本示例使用默认配置文件方式,通过配置Credentials文件创建默认的访问凭证。
    # 使用默认凭证初始化Credentials Client。
    cred=CredClient()
    config = open_api_models.Config(
        # 通过Credentials获取配置中的AccessKey ID
        access_key_id=cred.get_access_key_id(),
        # 通过Credentials获取配置中的AccessKey Secret
        access_key_secret=cred.get_access_key_secret()
    )
    # 访问的域名
    config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
    return docmind_api20220711Client(config)


def main() -> None:
    client = create_client()
    request = docmind_api20220711_models.SubmitDocStructureJobRequest(
         # file_url : 文件url地址
        file_url='https://example.com/example.pdf',
         # file_name :文件名称。名称必须包含文件类型
        file_name='123.pdf',
        # file_name_extension : 文件后缀格式。与文件名二选一
        file_name_extension='pdf'
    )
    try:
        # 复制代码运行请自行打印 API 的返回值
        response = client.submit_doc_structure_job(request)
        # API返回值格式层级为 body -> data -> 具体属性。可根据业务需要打印相应的结果。如下示例为打印返回的业务id格式
        # 获取属性值均以小写开头,
        print(response.body.data.id)        
    except Exception as error:
        # 如有需要,请打印 error
        UtilClient.assert_as_string(error.message)

返回结果如下所示。

{
  "RequestId": "43A29C77-405E-4CC0-BC55-EE694AD0****",
  "Data": {
    "Id": "docmind-20220712-b15f****"
  }
}

调用结果查询类API

针对结果查询类API,查询结果有处理中、处理成功、处理失败三种情况。

以下代码示例表示调用结果查询类API。

# -*- coding: utf-8 -*-
import sys
from typing import List
from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models
from alibabacloud_tea_util.client import Client as UtilClient
from alibabacloud_credentials.client import Client as CredClient

def create_client() -> docmind_api20220711Client:
    """   
    @return: Client
    @throws Exception
    """
    # 调用接口时,程序直接访问凭证,读取您的访问密钥(即AccessKey)并自动完成鉴权。
    # 运行本示例前,请先完成步骤二:配置身份认证。
    # 本示例使用默认配置文件方式,通过配置Credentials文件创建默认的访问凭证。
    # 使用默认凭证初始化Credentials Client。
    cred=CredClient()
    config = open_api_models.Config(
        # 通过Credentials获取配置中的AccessKey ID
        access_key_id=cred.get_access_key_id(),
        # 通过Credentials获取配置中的AccessKey Secret
        access_key_secret=cred.get_access_key_secret()
    )
    # 访问的域名
    config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com'
    return docmind_api20220711Client(config)


def main() -> None:
    client = create_client()
    request = docmind_api20220711_models.GetDocStructureResultRequest(
        # id :  任务提交接口返回的id
        id='docmind-20220902-824b****'
    )
    try:
        # 复制代码运行请自行打印 API 的返回值
        response = client.get_doc_structure_result(request)
        # API返回值格式层级为 body -> data -> 具体属性。可根据业务需要打印相应的结果。获取属性值均以小写开头
        # 获取异步任务处理情况,可根据response.body.completed判断是否需要继续轮询结果
        print(response.body.completed)
        # 获取返回结果。建议先把response.body.data转成json,然后再从json里面取具体需要的值。
        print(response.body.data)        
    except Exception as error:
        # 如有需要,请打印 error
        UtilClient.assert_as_string(error.message)

返回结果分为处理中、处理成功、处理失败三种情况。

处理中的返回结果如下所示,Completed会返回false,表示任务没有处理结束,仍在处理中。这种需要继续轮询,直到明确返回Completed为true或者超过轮询最大时间。

{
  "RequestId": "2AABD2C2-D24F-12F7-875D-683A27C3****",
  "Completed": false,
  "Code": "DocProcessing",
  "Message": "Document processing",
  "HostId": "ocr-api.cn-hangzhou.aliyuncs.com",
  "Recommend": "https://next.api.aliyun.com/troubleshoot?q=DocProcessing&product=docmind-api"
}

处理成功的返回结果如下所示,Completed会返回true,表示任务处理结束,同时会返回Status为字符串的Success,表示处理成功。具体的处理结果在Data节点中。

{
  "Status": "Success",
  "RequestId": "73134E1A-E281-1B2C-A105-D0EF****",
  "Completed": true,
	"Data": {
		"styles": [{
				"styleId": 0,
				"underline": false,
				"deleteLine": false,
				"bold": true,
				"italic": false,
				"fontSize": 15,
				"fontName": "黑体",
				"color": "000000",
				"charScale": 0.95
			},
			{
				"styleId": 1,
				"underline": false,
				"deleteLine": false,
				"bold": false,
				"italic": false,
				"fontSize": 12,
				"fontName": "微软雅黑",
				"color": "000000",
				"charScale": 1
			}
		],
		"layouts": [{
			"text": "测试标题",
			"index": 0,
			"uniqueId": "xxxx9816e77caea338df554b80ab95c7",
			"alignment": "center",
			"pageNum": [
				0
			],
			"pos": [{
					"x": 405,
					"y": 192
				},
				{
					"x": 860,
					"y": 191
				},
				{
					"x": 860,
					"y": 236
				},
				{
					"x": 406,
					"y": 237
				}
			],
			"type": "title",
      "subType":"doc_title"
		}, {
			"text": "本段为测试内容",
			"index": 1,
			"uniqueId": "xxxx8606c213c01c12d70f98dcfb2525",
			"alignment": "left",
			"pageNum": [
				0
			],
			"pos": [{
					"x": 187,
					"y": 311
				},
				{
					"x": 1075,
					"y": 311
				},
				{
					"x": 1076,
					"y": 373
				},
				{
					"x": 187,
					"y": 373
				}
			],
			"type": "text",
      "subType":"para",
			"lineHeight": 7,
			"firstLinesChars": 30,
			"blocks": [{
					"text": "本段",
					"pos": null,
					"styleId": 0
				},
				{
					"text": "为测试内容",
					"pos": null,
					"styleId": 1
				}
			]
		}],
		"logics": {
			"docTree": [{
				"uniqueId": "xxxx9816e77caea338df554b80ab95c7",
				"level": 0,
				"link": {
					"下级": [

					],
					"包含": [

					]
				},
				"backlink": {
					"上级": [
						"ROOT"
					]
				}
			}],
			"paragraphKVs": null,
			"tableKVs": null
		},
		"docInfo": {
			"docType": "pdf",
			"orignalDocName": "1.pdf",
			"pages": [{
				"imageType": "JPEG",
				"imageUrl": "http://test.moshi.aliyuncs.com/docMind/image/xxxx3cccbfec45b48d3a8081c9c9659e/0",
				"angle": null,
				"imageWidth": 1273,
				"imageHeight": 1801,
				"pageIdCurDoc": 1,
				"pageIdAllDocs": 1
			}]
		}
	}
}

处理失败的返回结果如下所示,处理失败Completed会返回true,表示任务处理结束,同时会返回Status为字符串的Fail,表示处理成功失败,同时会返回失败Code和详细原因Message。访问错误码可以查看错误码详细介绍。

{
  "RequestId": "A8EF3A36-1380-1116-A39E-B377BE27****",
  "Completed": true,
  "Status": "Fail"
  "Code": "UrlNotLegal",
  "Message": "Failed to process the document.  The document url you provided is not legal.",
  "HostId": "docmind-api.cn-hangzhou.aliyuncs.com",
  "Recommend": "https://next.api.aliyun.com/troubleshoot?q=IDP.UrlNotLegal&product=docmind-api"
}

  • 本页导读 (0)
文档反馈