文档智能布局模型
此内容适用于: 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/JPG
、PNG
、BMP
、TIFF
、HEIF
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 像素之间。
布局模型入门
了解如何使用文档智能从文档中提取数据,包括文本、表、表标题、选择标记和结构信息。 需要以下资源:
注意
文档智能工作室提供 v3.0 API 及更高版本。
使用文档智能工作室处理的示例文档
在文档智能工作室主页上,选择“布局”。
可以分析示例文档或上传自己的文件。
选择“运行分析”按钮,并根据需要配置“分析选项”:
文档智能示例标记工具
支持的语言和区域设置
有关支持的语言的完整列表,请参阅语言支持 - 文档分析模型页。
文档智能 v2.1 支持以下工具、应用程序和库:
功能 | 资源 |
---|---|
布局 API | • 文档智能标记工具 • REST API • 客户端库 SDK • 文档智能 Docker 容器 |
数据提取
布局模型从文档中提取文本、选择标记、表格、段落和段落类型 (roles
)。
注意
版本 2024-02-29-preview
、2023-10-31-preview
及更高版本支持 Microsoft Office(DOCX、XLSX、PPTX)和 HTML 文件。 不支持以下功能:
- 每个页面对象没有角度、宽度/高度和单位。
- 对于检测到的每个对象,没有边界多边形或边界区域。
- 页范围 (
pages
) 不支持作为参数。 - 无
lines
对象。
页面
页面集合是文档内页面的列表。 每个页面在文档中按顺序表示,../包括方向角度,表示页面是否旋转以及宽度和高度(以像素为单位)。 模型输出中的页面单位计算如下:
文件格式 | 计算页单位 | 全部页 |
---|---|---|
图片(JPEG/JPG、PNG、BMP、HEIF) | 每个图像 = 1 个页面单位 | 图像总数 |
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}"
)
从文档中提取所选页面
对于较大的多页文档,请使用 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"
}
]
}
文本、行、字词
档智能中的文档布局模型将打印和手写样式文本提取为 lines
和 words
。 styles
集合../包含任何手写的行样式(如果检测到的话)以及指向关联文本的跨度。 此功能适用于受支持的手写语言。
对于 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
集合中。 它们包括边界 polygon
、confidence
和选择 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
部分提取选定标记信息。
迁移指南
- 请参阅我们的文档智能 v3.1 迁移指南,以了解如何在应用程序和工作流中使用 v3.1 版本。
后续步骤
完成文档智能快速入门,并使用你选择的开发语言开始创建文档处理应用。