构建一个收据和发票处理管道,使用 Amazon Textract 机器学习博客
构建一个收据和发票处理管道,使用 Amazon Textract 机器学习博客
2026-01-27 14:29:14

使用 Amazon Textract 构建收据和发票处理管道

作者 Sushant Pradhan Maran Chandrasekaran Shibin Michaelraj Suprakash Dutta日期 2024年3月26日分类 Amazon Textract、专家 (400)、技术指南链接 永久链接

关键要点

灵活的账户应付流程可以通过自动化使用 Amazon Textract 进行数据提取。解决方案包括文档捕捉、数据提取、验证、归档和智能搜索等多个阶段。可以使用 AWS 的多种服务来存储、验证和搜索提取的信息,实现在发票管理上的优化。

在当今商业环境中,组织不断寻求优化其财务流程、提高效率和降低成本的方式。应付账款是一个具有显著改进潜力的领域。应付账款流程大致包括接收和扫描发票、从中提取相关数据、验证、审批和归档。而提取环节则相对复杂,因为每张发票和收据的格式不同,标签不一致,重要信息如价格、供应商名称、供应商地址和付款条款往往没有明确标记,需根据上下文进行解释。传统的人工数据提取方法既耗时又易出错,且不可扩展。

在这篇文章中,我们展示了如何使用 Amazon Textract 自动化应付账款流程的数据提取。我们还提供了一个参考架构,以构建一个发票自动化管道,能够实现提取、验证、归档和智能搜索。

解决方案概述

下图展示了一个收据和发票处理工作流程的架构。首先是文档捕捉阶段,该阶段用于安全地收集和存储扫描的发票和收据。接下来是提取阶段,您需要将收集到的发票和收据传递给 Amazon Textract 的 AnalyzeExpense API,以提取与财务相关的文本关系,例如供应商名称、发票收据日期、订单日期、到期金额、已支付金额等。在下一阶段,使用预定义的费用规则来确定是否自动批准或拒绝收据。批准和拒绝的文档将分别存入 Amazon Simple Storage Service (Amazon S3) 存储桶中的相应文件夹。对于批准的文档,可以使用 Amazon OpenSearch Service 对提取的所有字段和数值进行搜索,并可使用 OpenSearch Dashboards 可视化索引的元数据。批准的文档还将被设置为在 S3 生命周期策略的指导下移动至 Amazon S3 IntelligentTiering 进行长期保留和归档。

接下来的部分将引导您逐步完成解决方案的创建过程。

前提条件

为部署此解决方案,您必须具备以下条件

一个 AWS 账户。一个 AWS Cloud9 环境。AWS Cloud9 是一个基于云的集成开发环境 (IDE),可以让您通过浏览器编写、运行和调试代码,包含代码编辑器、调试器和终端。

要创建 AWS Cloud9 环境,请提供名称和描述,其他设置保持默认。选择 AWS Cloud9 控制台上的 IDE 链接进入 IDE。您已准备好使用 AWS Cloud9 环境。

部署解决方案

要设置解决方案,您将使用 AWS 云开发套件 (AWS CDK) 部署一个 AWS CloudFormation 堆栈。

在 AWS Cloud9 IDE 终端中,克隆 GitHub 仓库 并安装依赖项。运行以下命令以部署 InvoiceProcessor 堆栈:

bash git clone https//githubcom/awssamples/amazontextractinvoiceprocessorgit pip install r requirementstxt cdk bootstrap cdk deploy

部署约需 25 分钟,具体取决于 GitHub 仓库中的默认配置设置。详细的输出信息也可以在 AWS CloudFormation 控制台上查看。

AWS CDK 部署完成后,在 Amazon DynamoDB 表中创建费用验证规则。您可以在同一 AWS Cloud9 终端中运行以下命令:

bash aws dynamodb executestatement statement INSERT INTO (aws cloudformation listexports query Exports[Name==InvoiceProcessorWorkflowRulesTableName]Value output text) VALUE {ruleId 1 type regex field INVOICERECEIPTID check (i)[09]{3}[az]{3}[09]{3} errorTxt 收据号码无效,格式应为 123ABC456} aws dynamodb executestatement statement INSERT INTO (aws cloudformation listexports query Exports[Name==InvoiceProcessorWorkflowRulesTableName]Value output text) VALUE {ruleId 2 type regex field PONUMBER check (i)[az09] errorTxt PO号码缺失}

在以 invoiceprocessorworkflowinvoiceprocessorbucketf1 开头的 S3 存储桶中创建一个上传文件夹。

在 Amazon Cognito 中,您应该已经有一个名为 OpenSearchResourcesCognitoUserPool 的现有用户池,我们将使用此用户池创建一个新用户。

在 Amazon Cognito 控制台中,导航到用户池 OpenSearchResourcesCognitoUserPool。创建一个新的 Amazon Cognito 用户。提供您选择的用户名和密码,并记录以供后用。将文档 randominvoice1 和 randominvoice2 上传到 S3 的 uploads 文件夹以开始处理工作流程。

接下来让我们逐步解析每个文档处理步骤。

文档捕捉

客户处理的发票和收据来自不同供应商,格式多样。这些文档通常通过纸质副本、上传到文件存储的扫描副本或共享存储设备接收。在文档捕获阶段,您将所有扫描的收据和发票存储在高度可扩展的存储中,例如 S3 存储桶。

数据提取

下一阶段是提取阶段,您需要将已收集的发票和收据传递给 Amazon Textract 的 AnalyzeExpense API,以提取与财务相关的文本关系,如供应商名称、发票收据日期、订单日期、到期金额/已支付金额等。

AnalyzeExpense 是专门处理发票和收据文档的 API。该 API 既可以作为同步 API 使用,也可以作为异步 API 使用。同步 API 允许您以字节格式发送图像,异步 API 则允许您发送 JPG、PNG、TIFF 和 PDF 格式的文件。AnalyzeExpense API 的响应由三个不同的部分组成:

摘要字段 这一部分包括标准化的键和值以及显示的键值对。AnalyzeExpense 将供应商名称和地址、纳税人 ID、付款相关字段如到期金额和折扣及一般键如发票 ID、交货日期和账户号码进行标准化。而未标准化的键仍会作为键值对出现在摘要字段中。有关支持的费用字段的完整列表,请参见 分析发票和收据。行项目 本部分包括标准化的行项目键,如商品描述、单价、数量和产品代码。OCR 块 该块包含从发票页面提取的原始文本,原始文本提取可用于后处理和识别不属于摘要和行项目字段的其他信息。

本文使用 Amazon Textract IDP CDK 构造模块AWS CDK 组件,用于定义智能文档处理 (IDP) 工作流,使您能够构建特定用例的可自定义 IDP 工作流。这些构造模块和示例是用于在 AWS 上定义 IDP 流程的组件集合,并已经发布至 GitHub。主要概念包括 AWS CDK 构造模块、实际的 AWS CDK 堆栈 和 AWS Step Functions。

下面的图展示了 Step Functions 工作流。

提取工作流包括以下步骤:

InvoiceProcessorDecider 一个 AWS Lambda 函数,用于验证输入文件格式是否受 Amazon Textract 支持。有关支持的格式的更多详细信息,请参见 输入文档。DocumentSplitter 一个 Lambda 函数,将文件生成最大 2500 页的块,并可处理大型多页文档。Map State 一个 Lambda 函数并行处理每个块。TextractAsync 此任务使用异步 API 调用 Amazon Textract,并遵循 最佳实践,结合 Amazon Simple Notification Service (Amazon SNS) 通知,使用 OutputConfig 将 Amazon Textract JSON 输出存储到之前创建的 S3 存储桶中。它由两个 Lambda 函数组成:一个用于提交文档进行处理,另一个在 SNS 通知触发时运行。TextractAsyncToJSON2 由于 TextractAsync 任务可能生成多个分页输出文件,TextractAsyncToJSON2 过程将这些文件合并为一个 JSON 文件。

接下来的三个步骤的详细信息将在以下部分讨论。

验证和批准

在验证阶段,SetMetaData Lambda 函数根据之前在 DynamoDB 表中配置的规则验证上传的文件是否为有效的费用。本文使用了以下示例规则:

如果 INVOICERECEIPTID 存在且与正则表达式 (i)[09]{3}[az]{3}[09]{3} 匹配 且 PONUMBER 存在且与正则表达式 (i)[az09] 匹配,则验证成功。如果 PONUMBER 或 INVOICERECEIPTID 在文档中不正确或缺失,则验证失败。

在文件处理后,费用验证函数将输入文件移动到相同 S3 存储桶中的 approved 或 declined 文件夹。

出于本解决方案的目的,我们使用 DynamoDB 存储费用验证规则。然而,您可以修改此解决方案以与您自己的或商业的费用验证或管理解决方案集成。

智能索引和搜索

通过 OpenSearchPushInvoke Lambda 函数,将提取的费用元数据推送到 OpenSearch Service 索引,并可供搜索。

最后的 TaskOpenSearchMapping 步骤清除上下文,否则可能会超出 Step Functions 配额,因为任务、状态或工作流运行的最大输入或输出大小限制。

创建 OpenSearch Service 索引后,您可以通过 OpenSearch Dashboards 搜索提取文本中的关键字。

归档、审计与分析

要管理发票和收据的生命周期和归档,您可以配置 S3 生命周期规则,以将 S3 对象从标准存储类别转换为智能归类存储类别。S3 IntelligentTiering 监控访问模式,自动在 30 天未访问后将对象移动到不常用访问层。90 天未访问后,对象将在不影响性能或操作负担的情况下移动到存档即时访问层。

对于审计和分析,本解决方案使用 OpenSearch Service 运行发票请求的分析。OpenSearch Service 使您能够轻松摄取、保护、搜索、聚合、查看和分析数据,以进行多种应用场景,如日志分析、应用搜索、企业搜索等。

构建一个收据和发票处理管道,使用 Amazon Textract 机器学习博客

登录 OpenSearch Dashboards,导航到 Stack Management,选择 Saved objects,然后点击 Import。选择克隆仓库中的 invoicesndjson 文件并进行导入。这将预填充索引并构建可视化。

刷新页面,导航到 Home , Dashboard,打开 Invoices。您现在可以选择和应用过滤器并扩展时间窗口,以探索历史发票。

飞机加速器npv下载

清理

在您完成评估 Amazon Textract 处理收据和发票的过程后,建议清理您可能创建的所有资源。完成以下步骤:

删除 S3 存储桶 invoiceprocessorworkflowinvoiceprocessorbucketf1 中的所有内容。在 AWS Cloud9 中,运行以下命令以删除 Amazon Cognito 资源和 CloudFormation 堆栈:

bash cognitouserpool=(aws cloudformation listexports query Exports[Name==InvoiceProcessorWorkflowCognitoUserPoolId]Value output text) echo cognitouserpool cdk destroy aws cognitoidp deleteuserpool userpoolid cognitouserpool

删除您在 AWS Cloud9 控制台中创建的 AWS Cloud9 环境。

结论

在本文中,我们概述了如何使用 Amazon Textract 构建发票自动化管道进行数据提取,并创建验证、归档和搜索的工作流程。我们提供了如何使用 AnalyzeExpense API 提取发票中关键字段的示例代码。

要开始使用,请登录 Amazon Textract 控制台尝试此功能。如需了解有关 Amazon Textract 能力的更多信息,请参考 Amazon Textract 开发者指南 或 [Textract 资源](https//awsamazoncom/textract/resources/blogpostscardssortby=itemadditionalFieldscreatedDateampblogpostsc