文档智能布局模型

此内容适用于:选中标记 v3.1 (GA) | 先前版本:蓝色复选标记 v3.0 蓝色复选标记 v2.1

此内容适用于: 选中标记 v3.0 (GA) | 最新版本: 紫色复原标记 v3.1 | 先前版本: 蓝色复选标记 v2.1

此内容适用于:选中标记 v2.1

文档智能布局模型是一种基于机器学习的高级文档分析 API,在文档智能云中可用。 它使你能够使用各种格式的文档,并返回文档的结构化数据表示形式。 它结合了强大的增强版光学字符识别 (OCR) 功能与深度学习模型,能够提取文本、表、选择标记和文档结构。

文档布局分析

文档结构布局分析是分析文档以提取感兴趣的区域及其相互关系的过程。 目标是从页面中提取文本和结构元素,以构建更好的语义理解模型。 文档布局中有两种类型的角色:

  • 几何角色:文本、表、图形和选择标记是几何角色的示例。
  • 逻辑角色:标题、标头和页脚是文本逻辑角色的示例。

下图显示了示例页图像中的典型组件。

文档布局示例的图示。

开发选项

文档智能 v3.1 支持以下工具、应用程序和库:

功能 资源 模型 ID
布局模型 文档智能工作室
REST API
C# SDK
Python SDK
Java SDK
JavaScript SDK
预生成布局

文档智能 v3.0 支持以下工具、应用程序和库:

功能 资源 模型 ID
布局模型 文档智能工作室
REST API
C# SDK
Python SDK
Java SDK
JavaScript SDK
预生成布局

文档智能 v2.1 支持以下工具、应用程序和库:

功能 资源
布局模型 文档智能标记工具
REST API
客户端库 SDK
文档智能 Docker 容器

输入要求

  • 支持的文件格式:

    型号 PDF 图像:
    JPEG/JPGPNGBMPTIFFHEIF
    Microsoft Office:
    Word (DOCX)、Excel (XLSX)、PowerPoint (PPTX)、HTML
    读取
    布局 ✔(2024-07-31-preview、2024-02-29-preview、2023-10-31-preview)
    常规文档
    预生成
    自定义提取
    自定义分类 ✔(2024-07-31-preview、2024-02-29-preview)
  • 为获得最佳结果,请针对每个文档提供一张清晰的照片或高质量的扫描件。

  • 对于 PDF 和 TIFF,最多可处理 2,000 页(对于免费层订阅,仅处理前两页)。

  • 用于分析文档的文件大小对于付费 (S0) 层为 500 MB,对于免费 (F0) 层为 4 MB。

  • 图像尺寸必须介于 50 像素 x 50 像素与 10,000 像素 x 10,000 像素之间。

  • 如果 PDF 是密码锁定的文件,则必须先删除锁,然后才能提交它们。

  • 对于 1024 x 768 像素的图像,要提取的文本的最小高度为 12 像素。 此尺寸对应于 150 点/英寸 (DPI) 的大约 8 号字文本。

  • 对于自定义模型训练,自定义模板模型的训练数据最大页数为 500,自定义神经模型的训练数据最大页数为 50,000。

    • 对于自定义提取模型训练,模板模型的训练数据总大小为 50 MB,神经网络模型的训练数据总大小为 1 GB。

    • 对于自定义分类模型训练,训练数据总大小为 1 GB,上限为 10,000 页。 对于 2024-07-31-preview 及更高版本,训练数据的总大小为 2 GB,上限为 10,000 页。

  • 支持的文件格式:JPEG、PNG、PDF 和 TIFF。
  • 支持的页数:对于 PDF 和 TIFF,最多处理 2,000 页。 对于免费层订阅服务器,只处理前两页。
  • 支持的文件大小:文件大小必须小于 50 MB,且尺寸介于 50 x 50 和 10,000 x 10,000 像素之间。

布局模型入门

了解如何使用文档智能从文档中提取数据,包括文本、表、表标题、选择标记和结构信息。 需要以下资源:

  • Azure 订阅 - 可以创建试用订阅

  • Azure 门户中的文档智能实例。 可以使用免费定价层 (F0) 来试用该服务。 在部署资源后,选择“转到资源”以获取密钥和终结点。

该屏幕截图显示了 Azure 门户中密钥和终结点的位置。

注意

文档智能工作室提供 v3.0 API 及更高版本。

使用文档智能工作室处理的示例文档

在文档智能工作室中处理报纸页的 `布局` 屏幕截图。

  1. 文档智能工作室主页上,选择“布局”

  2. 可以分析示例文档或上传自己的文件。

  3. 选择“运行分析”按钮,并根据需要配置“分析选项”:

    文档智能工作室中“运行分析”和“分析选项”按钮的屏幕截图。

文档智能示例标记工具

  1. 导航到“文档智能示例工具”。

  2. 在示例工具主页上,选择“使用布局获取文本、表和选择标记”。

    文档智能布局过程的连接设置屏幕截图。

  3. 在“文档智能服务终结点”字段中,粘贴使用文档智能订阅获得的终结点。

  4. 在“密钥”字段中,粘贴从文档智能资源中获取的密钥。

  5. 在“源”字段中,从下拉菜单中选择“URL”。可以使用我们的示例文档:

  6. 选择“运行布局”。 文档智能示例标记工具会调用 Analyze Layout API 来分析文档。

    `布局` 下拉窗口的屏幕截图。

  7. 查看结果 - 查看突出显示的提取的文本、检测到的选择标记和检测到的表。

    文档智能示例标记工具的连接设置屏幕截图。

支持的语言和区域设置

有关支持的语言的完整列表,请参阅语言支持 - 文档分析模型

文档智能 v2.1 支持以下工具、应用程序和库:

功能 资源
布局 API

数据提取

布局模型从文档中提取文本、选择标记、表格、段落和段落类型 (roles)。

注意

版本 2024-02-29-preview2023-10-31-preview 及更高版本支持 Microsoft Office(DOCX、XLSX、PPTX)和 HTML 文件。 不支持以下功能:

  • 每个页面对象没有角度、宽度/高度和单位。
  • 对于检测到的每个对象,没有边界多边形或边界区域。
  • 页范围 (pages) 不支持作为参数。
  • lines 对象。

页面

页面集合是文档内页面的列表。 每个页面在文档中按顺序表示,并包括方向角度,表示页面是否旋转以及宽度和高度(以像素为单位)。 模型输出中的页面单位计算如下:

文件格式 计算页单位 全部页
图片(JPEG/JPG、PNG、BMP、HEIF) 每个图像 = 1 个页面单位 图像总数
PDF PDF 中的每个页面 = 1 个页面单位 PDF 中的总页数
TIFF TIFF 中的每个图像 = 1 个页面单位 TIFF 中的图像总数
Word (DOCX) 最多 3,000 个字符 = 1 个页面单位,不支持嵌入或链接的图像 每页最多 3,000 个字符的总页数
Excel (XLSX) 每个工作表 = 1 个页面单位,不支持嵌入或链接的图像 工作表总数
PowerPoint (PPTX) 每张幻灯片 = 1 个页面单位,不支持嵌入或链接的图像 幻灯片总数
HTML 最多 3,000 个字符 = 1 个页面单位,不支持嵌入或链接的图像 每页最多 3,000 个字符的总页数
"pages": [
    {
        "pageNumber": 1,
        "angle": 0,
        "width": 915,
        "height": 1190,
        "unit": "pixel",
        "words": [],
        "lines": [],
        "spans": []
    }
]
# Analyze pages.
for page in result.pages:
    print(f"----Analyzing layout from page #{page.page_number}----")
    print(
        f"Page has width: {page.width} and height: {page.height}, measured with unit: {page.unit}"
    )

# Analyze pages.
for page in result.pages:
    print(f"----Analyzing layout from page #{page.page_number}----")
    print(f"Page has width: {page.width} and height: {page.height}, measured with unit: {page.unit}")

从文档中提取所选页面

对于较大的多页文档,请使用 pages 查询参数指示用于文本提取的特定页码或页面范围。

段落

布局模型将 paragraphs 集合中所有已识别的文本块提取为 analyzeResults 下的顶级对象。 此集合中的每个条目都表示一个文本块,并包含提取的文本 (content) 和边界 polygon 坐标。 span 信息指向包含文档全文的顶级 content 属性中的文本片段。


"paragraphs": [
    {
        "spans": [],
        "boundingRegions": [],
        "content": "While healthcare is still in the early stages of its Al journey, we are seeing pharmaceutical and other life sciences organizations making major investments in Al and related technologies.\" TOM LAWRY | National Director for Al, Health and Life Sciences | Microsoft"
    }
]

段落角色

新的基于机器学习的页面对象检测提取逻辑角色,如标题、节标头、页眉、页脚等。 文档智能布局模型为 paragraphs 集合中的某些文本块分配模型预测的特定角色或类型。 对于非结构化文档,最好使用段落角色来帮助了解所提取内容的布局,从而进行更丰富的语义分析。 支持以下段落角色:

预测角色 描述 支持的文件类型
title 页面中的主标题 pdf、image、docx、pptx、xlsx、html
sectionHeading 页面上的一个或多个子标题 pdf、image、docx、xlsx、html
footnote 页面底部附近的文本 pdf、image
pageHeader 页面顶部边缘附近的文本 pdf、image、docx
pageFooter 页面底部边缘附近的文本 pdf、image、docx、pptx、html
pageNumber 页码 pdf、image
{
    "paragraphs": [
                {
                    "spans": [],
                    "boundingRegions": [],
                    "role": "title",
                    "content": "NEWS TODAY"
                },
                {
                    "spans": [],
                    "boundingRegions": [],
                    "role": "sectionHeading",
                    "content": "Mirjam Nilsson"
                }
    ]
}

文本、行、字词

档智能中的文档布局模型将打印和手写样式文本提取为 lineswordsstyles 集合包含任何手写的行样式(如果检测到的话)以及指向关联文本的跨度。 此功能适用于受支持的手写语言

对于 Microsoft Word、Excel、PowerPoint 和 HTML,文档智能版本 2024-02-29-preview 和 2023-10-31-preview 布局模型按原样提取所有嵌入文本。 文本被提取为字词和段落。 不支持嵌入图像。

"words": [
    {
        "content": "While",
        "polygon": [],
        "confidence": 0.997,
        "span": {}
    },
],
"lines": [
    {
        "content": "While healthcare is still in the early stages of its Al journey, we",
        "polygon": [],
        "spans": [],
    }
]
# Analyze lines.
for line_idx, line in enumerate(page.lines):
    words = line.get_words()
    print(
        f"...Line # {line_idx} has word count {len(words)} and text '{line.content}' "
        f"within bounding polygon '{format_polygon(line.polygon)}'"
    )

    # Analyze words.
    for word in words:
        print(
            f"......Word '{word.content}' has a confidence of {word.confidence}"
        )

文本行的手写风格

响应将分类说明每个文本行是否为手写体,同时包括置信度评分。 了解详细信息。 请参阅手写语言支持。 以下示例演示了一个示例 JSON 片段。

"styles": [
{
    "confidence": 0.95,
    "spans": [
    {
        "offset": 509,
        "length": 24
    }
    "isHandwritten": true
    ]
}

如果启用了字体/样式加载项功能,则还会获得作为 styles 对象的一部分的字体/样式结果。

选定标记

布局模型还从文档中提取选定标记。 提取的选定标记显示在每个页面的 pages 集合中。 它们包括边界 polygonconfidence 和选择 state (selected/unselected)。 文本表示形式(即 :selected::unselected)也会作为起始索引 (offset) 和 length 包含在内,后者引用了包含文档全文的顶级 content 属性。

{
    "selectionMarks": [
        {
            "state": "unselected",
            "polygon": [],
            "confidence": 0.995,
            "span": {
                "offset": 1421,
                "length": 12
            }
        }
    ]
}
# Analyze selection marks.
for selection_mark in page.selection_marks:
    print(
        f"Selection mark is '{selection_mark.state}' within bounding polygon "
        f"'{format_polygon(selection_mark.polygon)}' and has a confidence of {selection_mark.confidence}"
    )

提取表是处理包含大量数据(通常格式化为表)的文档的关键要求。 此布局模型提取 JSON 输出的 pageResults 节中的表。 提取的表信息包括列数和行数、行高和列高。 系统会输出带有边界多边形的每个单元格,以及指明该区域是否识别为 columnHeader 的信息。 该模型支持提取旋转的表。 每个表单元格都包含行和列索引以及边界多边形坐标。 对于单元格文本,模型输出包含起始索引 (offset) 的 span 信息。 该模型还输出包含文档全文的顶级内容中的 length

以下是使用文档智能包提取功能时要考虑的几个因素:

  • 要提取的数据是否以表的形式呈现,该表的结构是否有意义?

  • 如果数据不采用表格式,数据是否适合放入二维网格?

  • 表是否跨越多个页面? 如果是,请在将 PDF 发送到文档智能之前将其拆分为多个页面,这样就不必标记所有页面。 分析后,将页面后处理为单个表。

  • 如果要创建自定义模型,请参阅表格字段。 对于每个列,动态表包含可变数量的行。 对于每个列,固定表包含恒定数量的行。

注意

  • 如果输入文件为 XLSX,则不支持表分析。
{
    "tables": [
        {
            "rowCount": 9,
            "columnCount": 4,
            "cells": [
                {
                    "kind": "columnHeader",
                    "rowIndex": 0,
                    "columnIndex": 0,
                    "columnSpan": 4,
                    "content": "(In millions, except earnings per share)",
                    "boundingRegions": [],
                    "spans": []
                    },
            ]
        }
    ]
}

# Analyze tables.
for table_idx, table in enumerate(result.tables):
    print(
        f"Table # {table_idx} has {table.row_count} rows and "
        f"{table.column_count} columns"
    )
    for region in table.bounding_regions:
        print(
            f"Table # {table_idx} location on page: {region.page_number} is {format_polygon(region.polygon)}"
        )
    for cell in table.cells:
        print(
            f"...Cell[{cell.row_index}][{cell.column_index}] has text '{cell.content}'"
        )
        for region in cell.bounding_regions:
            print(
                f"...content on page {region.page_number} is within bounding polygon '{format_polygon(region.polygon)}'"
            )

注释(仅在 2023-02-28-preview API 中可用。)

布局模型可提取文档中的注释,例如对勾和叉号标记。 响应包括注释类型以及置信度分数和边界多边形。

    {
    "pages": [
    {
        "annotations": [
        {
            "kind": "cross",
            "polygon": [...],
            "confidence": 1
        }
        ]
    }
    ]
}

自然读取顺序输出(仅限拉丁语)

你可以使用 readingOrder 查询参数指定文本行的输出顺序。 使用 natural 可提供更易于阅读的读取顺序输出,如以下示例中所示。 此功能仅支持拉丁语。

`布局` 模型读取订单处理的屏幕截图。

选择页码或页面范围以进行文本提取

对于较大的多页文档,请使用 pages 查询参数指示用于文本提取的特定页码或页面范围。 以下示例演示了一个包含 10 个页面的文档,将按照所有页面 (1-10) 和选定页面 (3-6) 这两种条件提取文本。

布局模型所选页面输出的屏幕截图。

Get Analyze Layout Result 操作

第二步是调用 Get Analyze Layout Result 操作。 此操作采用 Analyze Layout 操作创建的结果 ID 作为输入。 此操作返回一个 JSON 响应,其中包含具有以下可能值的 status 字段。

字段 类型 可能值
status string notStarted:分析操作未启动。

running:正在进行分析操作。

failed:分析操作失败。

succeeded:分析操作成功。

可以不断地以迭代方式调用此操作,直到它返回 succeeded 值为止。 为了避免超过每秒请求数 (RPS) 速率,请使用 3 到 5 秒的间隔。

当“状态”字段的值为 succeeded 时,JSON 响应将包含提取的布局、文本、表和选定标记。 提取的数据包括提取的文本行和单词、边界框、带有手写指示的文本外观、表以及所指示的选定/未选择的选定标记。

文本行的手写分类(仅限拉丁语)

响应将分类说明每个文本行是否为手写体,同时包括置信度评分。 此功能仅支持拉丁语。 以下示例演示了图像中文本的手写分类。

`布局` 模型手写分类过程的屏幕截图。

示例 JSON 输出

对 Get Analyze Layout Result 操作的响应是文档的结构化表示形式,其中提取了所有信息。 有关示例文档文件及其结构化输出示例布局输出,请参阅此处。

JSON 输出分为两个部分:

  • readResults 节点包含所有已识别的文本和选定标记。 文本的呈现层次结构依次是页面、行和单个单词。
  • pageResults 节点包含提取的表和单元格及其边界框、置信度以及对“readResults”字段中的行和词的引用。

示例输出

文本

布局 API 可从具有多种文本角度和颜色的文档和图像提取文本。 它接受文档、传真、打印和/或手写(仅英文)文本和混合模式的照片。 提取文本时会提供有关行、词、边界框、置信度评分和样式(手写体或其他样式)的信息。 所有文本信息都包含在 JSON 输出的 readResults 部分中。

包含表头的表

布局 API 可提取 JSON 输出的 pageResults 节中的表。 可以扫描、拍摄或数字化文档。 表可能会比较复杂,有的带合并单元格或列,有的带边框,有的不带边框,还有的带奇角。 提取的表信息包括列数和行数、行高和列高。 系统会输出带有边界框的每个单元格,以及指明该区域是否识别为标头一部分的信息。 模型预测的表头单元格可以跨多行,并且不一定是表中的第一行。 它们也适用于经过旋转的表。 每个表单元格还包含完整文本,这些文本引用 readResults 节中的单个字词。

表示例

选定标记

布局 API 还从文档中提取选定标记。 提取的选定标记包含边界框、置信度和状态(选择/取消选择)。 在 JSON 输出的 readResults 部分提取选定标记信息。

迁移指南

后续步骤