从文档中提取信息

已完成

注释

有关更多详细信息,请参阅 “文本和图像 ”选项卡!

如今的业务流程在很大程度上依赖于表单、收据和发票等文档中包含的数据。 手动处理可能会引入延迟和错误,使数据提取自动化比以往更加重要。

Azure 内容理解的工作原理

Azure 内容理解遵循模型驱动的提取工作流,其中非结构化内容作为结构化数据引入、分析和返回。

  1. 引入内容:将内容提交到 Azure 内容理解。

  2. AI 支持的分析:该服务使用:光学字符识别(OCR)、语音识别、自然语言理解和多模式 AI 模型的组合来分析内容。

  3. 结构化输出:服务返回与模型匹配的结构化结果(例如 JSON),使数据易于存储、搜索或集成到下游系统。

注释

JSON (JavaScript 对象表示法)是一种基于文本的数据格式,用于在系统之间存储和交换结构化数据。 人类很容易读取和写入,并且计算机易于分析和生成。

了解架构

OCR(光学字符识别)允许计算机从图片中“读取”文本,如扫描的文档、收据的照片或打印页面的图像,并将该文本转换为可编辑和可搜索的数字文本。 基本 OCR 用于识别印刷体文本,重点是文本提取,并且 了解字词之间的含义、上下文或关系。

Azure 内容理解的文档分析功能除了简单的基于 OCR 的文本提取之外,还包括 基于架构 的字段提取及其值。 架构驱动的方法是将 Azure 内容理解与基本 OCR 或听录服务区分开来。

架构描述 要提取哪些信息 以及如何 构造该信息。 定义架构时,指定要提取的字段。 架构列出了你关注的特定字段或实体。

例如,假设你定义了一个架构,该架构包含通常在发票中找到的常用字段,例如:

  • 供应商名称
  • 发票号码
  • 发票日期
  • 客户名称
  • 自定义地址
  • 项目 - 订购的项目,其中每个项目包括:
    • 项目描述
    • 单价
    • 订购数量
    • 行项总计
  • 发票小计
  • 税款
  • 寄送费用
  • 发票总计

现在,假设需要从以下发票中提取此信息:

发票的照片。

Azure 内容理解可以将发票架构应用于发票,并标识相应的字段,即使这些字段标有不同的名称(或根本不标记)。 生成的分析生成如下所示的结果:

已分析发票的照片,上面标注出了检测到的字段。

架构还定义字段结构。 架构支持 结构化字段和嵌套字段,而不仅仅是平面文本。 例如:

  • Items 是集合
  • 每个项都有 descriptionunit pricequantityline total

识别结构化字段可确保 Azure 内容理解能够理解值之间的关系,而仅靠 OCR 是无法做到的。

在发票示例中,对于每个检测到 的字段,可以提取嵌套值:

  • 供应商名称:Adventure Works Cycles
  • 发票编号:1234
  • 发票日期:2025/03/07
  • 客户名称:John Smith
  • 自定义地址:123 河街,马什敦,英格兰马什敦,GL1 234
  • 项目
    • 项目 1:
      • 项目说明:38 英寸赛车自行车(红色)
      • 单价:1299.00
      • 订购数量:1
      • 行项总计:1299.00
    • 项目 2:
      • 项目说明:自行车头盔(黑色)
      • 单价:25.99
      • 订购数量:1
      • 行项总计:25.99
    • 项目 3:
      • 项目说明:自行车衬衫 (L)
      • 单价:42.50
      • 订购数量:2
      • 行项总计:85.00
  • 发票小计:1409.99
  • :140.99
  • 发货费用:35.00
  • 发票总计:1585.98

Azure 内容理解提取预期的含义,而不仅仅是标签。 模式在语义上应用,这意味着:

  • 即使标签不同,也可以提取字段
  • 即使缺少标签,也可以提取字段

例如, 发票编号发票 #或未标记的数字都可以映射到 InvoiceNumber 分析器是否确定它们表示相同的概念。

了解分析器

分析器是 Azure 内容理解中的一个单元,它采用输入、应用 AI 分析并生成结构化结果。 分析器一致地对所有传入内容应用相同的提取逻辑。 配置后,分析器可确保每次分析请求都一致地重复使用架构。 分析器还会生成可预测的 JSON 结果。 结构化结果使下游处理(存储、搜索、自动化)更加轻松。

Azure 内容理解为常见方案提供预生成分析器,并支持根据需求定制的自定义分析器。 在高级别中:

  1. 选择或创建分析器。
  2. 分析器包括定义字段和结构的架构。
  3. 您提交内容以供分析
  4. 服务应用架构
  5. 你会收到与架构匹配的结构化 JSON 结果

在 Foundry 门户中使用 Azure 内容理解

注释

Foundry 门户具有经典用户界面(UI)和新用户界面。

创建 Microsoft Foundry 资源后,可以使用 经典 Foundry 门户界面 测试 Azure 内容理解。 Foundry 门户提供内容示例,并允许上传自己的材料进行分析。

可以使用可视界面选择源文档并提取默认信息字段。 例如,在文档图像上试用 Azure 内容理解时,该服务将返回文档文本和文本布局信息。

经典 Foundry 门户的屏幕截图,其中包含使用 Azure 内容理解分析的文档。

Azure 内容理解的分析器可识别文档中的文本值,并将其映射到特定字段。 例如,给定发票后,服务将返回字段(如供应商地址)和字段中的数据(如 123 456th Street)。

经典 Foundry 门户的屏幕截图,其中包含使用 Azure 内容理解分析的发票。

在 Foundry 门户中,还可以查看处理的 JSON 结果。

经典 Foundry 门户的屏幕截图,其中包含使用 Azure 内容理解分析的发票的 JSON 结果。

使用 Azure 内容理解生成客户端应用程序

可以使用 内容理解 API 生成以编程方式提取数据的轻型客户端应用程序。

注释

客户端应用程序是在用户的设备上运行的软件程序,它通过网络从另一个系统(通常是服务器)请求服务或数据。 客户端是用户与之交互的应用程序的一部分,而服务器在后台执行繁重的工作。 应用程序可以从服务请求数据或作,并使用 API 接收结构化响应。

使用内容理解 API 时,可以选择预生成分析器或创建自定义分析器。 预生成分析器包括: prebuilt-invoiceprebuilt-imageSearchprebuilt-audioSearchprebuilt-videoSearch。 向分析器提交要分析的内容时,分析是 异步的,这意味着稍后在分析器准备就绪时会得到结果。 由于分析是异步的,因此需要轮询操作位置 URL(或 analyzerResults),直到作业成功。

使用 Azure 内容理解 Python SDK

让我们看看如何使用 Python SDK 从 URL 分析发票的过程。

  1. 安装 Azure 内容理解 Python SDK。
python -m pip install azure-ai-contentunderstanding
  1. 确定 Foundry 资源终结点和 API 密钥或 Microsoft Entra ID。 终结点通常如下所示: https://<your-resource-name>.services.ai.azure.com/

  2. 创建并运行客户端应用程序代码。 analzyer_id是预生成分析器的 ID。 可 在此处找到预生成分析器 ID 值的列表。

import os
from azure.ai.contentunderstanding import ContentUnderstandingClient
from azure.core.credentials import AzureKeyCredential

endpoint = os.environ["FOUNDRY_ENDPOINT"]
key = os.environ["FOUNDRY_KEY"]

client = ContentUnderstandingClient(endpoint=endpoint, credential=AzureKeyCredential(key))

# 1) start analysis with analyzer id + inputs
analyzer_id = "prebuilt-invoice"
inputs = [
    {"url": "https://github.com/Azure-Samples/azure-ai-content-understanding-python/raw/refs/heads/main/data/invoice.pdf"}
]

# 2) wait for the Long Running Operation (LRO) to complete
poller = client.begin_analyze(analyzer_id=analyzer_id, inputs=inputs)  # starts LRO
result = poller.result()  # waits for completion (polling handled by SDK)

# 3) read structured fields + markdown
# The result typically includes extracted "fields" and "markdown" per input content item.
for content in result.contents:
    print(content.markdown)
    print(content.fields)

生成的输出是 JSON,显示提取的 markdown、字段、字段中的数据和置信度分数。 例如:

{
	"status": "Succeeded",
	"result": {
		"analyzerId": "prebuilt-invoice",
		"apiVersion": "2025-05-01-preview",
		"contents": [
			{
				"markdown": "# INVOICE\n\nCONTOSO LTD.\n\nContoso Headquarters\n123 456th St\nNew York, NY, 10001\n\nINVOICE: INV-100\n\nINVOICE DATE: 11/15/2019\n\nDUE DATE: 12/15/2019\n\nCUSTOMER NAME: MICROSOFT CORPORATION\n",
				"fields": {
					"CustomerName": {
						"type": "string",
						"valueString": "MICROSOFT CORPORATION",
						"confidence": 0.95,
					},
					"InvoiceDate": {
						"type": "date",
						"valueDate": "2019-11-15",
						"confidence": 0.994,
					}
                }
            }
        ]
    }
}

接下来,了解如何使用 Azure 内容理解分析器从音频和视频中提取结构化数据。