使用 Amazon Textract 从 PDF 文件中自动提取内容 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon Textract 从 PDF 文件中自动提取内容

由 Tianxia Jia (AWS) 创建

环境:生产

技术:机器学习和人工智能;分析;大数据

AWS 服务:亚马逊 S3;亚马逊 Textract;亚马逊 SageMaker

总结

许多组织需要从上传至其业务应用程序的 PDF 文件中提取信息。例如,组织可能需要准确地从税务或医疗 PDF 文件中提取用于税务分析或医疗索赔处理的信息。

在 Amazon Web Services (AWS) Cloud 上,Amazon Textract 会自动从 PDF 文件中提取信息(例如已打印文本、表单和表格),并生成包含原始 PDF 文件信息的 JSON 格式文件。您可以在 Amazon Web Services Management Console 中使用 Amazon Textract,也可以通过 API 调用使用。建议使用 编程 API 调用来扩展和自动处理大量 PDF 文件。

当 Amazon Textract 处理文件时,它会创建以下 Block对象列表:页面、文本行和单词、表单(键值对)、表格和单元格以及选择元素。还包括其他对象信息,例如边界框、置信区间、ID 与关系。Amazon Textract 将提取字符串形式的内容信息。需要正确识别和转换数据值,以便下游应用程序更轻松的使用。 

此模式描述了使用 Amazon Textract 自动从 PDF 文件中提取内容并将其处理成干净输出 step-by-step 的工作流程。此模式使用模板匹配技术正确识别必填字段、密钥名称和表,然后对每种数据类型进行后期处理更正。您可以使用此模式处理不同类型的 PDF 文件,然后可以扩展和自动化此工作流程,以处理相同格式的 PDF 文件。  

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account。

  • 用于存储待转换为 JPEG 格式以供 Amazon Textract 处理的 PDF 文件的现有 Amazon Simple Storage Service(Amazon S3) 存储桶。有关 S3 存储桶的更多信息,请参阅 Amazon S3 文档中的存储桶概述

  • Textract_PostProcessing.ipynbJupyter 笔记本(附件),已安装并配置。有关 Jupyter 笔记本的更多信息,请参阅亚马逊文档中的创建 Jupyter 笔记本。 SageMaker

  • 格式相同的现有 PDF 文件。

  • 了解 Python。

限制

架构

此模式的工作流程是首先在示例 PDF 文件上运行 Amazon Textract (首次运行),然后在与首个 PDF 文件相同格式的 PDF 文件上运行 (重复运行)。下图显示了 首次运行重复运行 的组合工作流程,该工作流程自动重复地从相同格式的 PDF 文件中提取内容。

使用 Amazon Textract 从 PDF 文件中提取内容

图表显示了此模式的以下工作流程:

  1. 将 PDF 文件转换为 JPEG 格式,并将其存储在 S3 存储桶中。 

  2. 调用 Amazon Textract API 并解析 Amazon Textract 响应 JSON 文件。 

  3. 通过为每个必填字段添加正确的KeyName:DataType对编辑 JSON 文件。为重复运行阶段创建 TemplateJSON文件。

  4. 为每种数据类型(例如浮点数、整数和日期)定义后处理校正函数。

  5. 准备与首个 PDF 文件格式相同的 PDF 文件。

  6. 调用 Amazon Textract API 并解析 Amazon Textract 响应 JSON。

  7. 将已解析 JSON 文件与TemplateJSON文件相匹配。

  8. 实施后期处理校正。

最终的 JSON 输出文件包含了每个必需字段的正确 KeyNameValue

目标技术堆栈

  • Amazon SageMaker 

  • Amazon S3 

  • Amazon Textract

自动化和扩展

您可以使用 AWS Lambda 函数自动执行重复运行工作流程,该函数会在新的 PDF 文件添加至 Amazon S3 中时启动 Amazon Textract。然后,Amazon Textract 会运行处理脚本,并将最终输出保存至存储位置。有关这方面的更多信息,请参阅 Lambda 文档中的使用 Amazon S3 触发器调用 Lambda 函数

工具

  • Amazon SageMaker 是一项完全托管的机器学习服务,可帮助您快速轻松地构建和训练机器学习模型,然后将其直接部署到可用于生产的托管环境中。

  • Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。

  • Amazon Textract 可以轻松地将文档文本检测和分析添加至您的应用程序。

操作说明

任务描述所需技能

转换 PDF 文件。

为首次运行准备 PDF 文件,方式为将 PDF 文件拆分为单页,并将其转换为适合 Amazon Textract 同步操作(Syn API)的 JPEG 格式。

请注意:对于多页 PDF 文件,您也可以使用 Amazon Textract 异步操作Asyn API)。

数据科学家,开发人员

解析 Amazon Textract 响应 JSON。

打开 Textract_PostProcessing.ipynbJupyter 笔记本(附件),然后使用以下代码调用 Amazon Textract API:

response = textract.analyze_document( Document={ 'S3Object': { 'Bucket': BUCKET, 'Name': '{}'.format(filename) } }, FeatureTypes=["TABLES", "FORMS"])

使用以下代码将响应 JSON 解析为表单与表格:

parseformKV=form_kv_from_JSON(response) parseformTables=get_tables_fromJSON(response)
数据科学家,开发人员

编辑 TemplateJSON 文件。

对每个KeyName和对应的DataType编辑已解析的 JSON(例如:字符串、浮点、整数或日期)以及表格标题(例如ColumnNamesRowNames)。

此模板用于每种单独的 PDF 文件类型,这意味着该模板可重复用于相同格式的 PDF 文件。

数据科学家,开发人员

定义后处理校正函数。

Amazon Textract 对TemplateJSON文件的响应中的值为字符串。日期、浮点数、整数或货币无区别。必须将这些值转换至适合下游用例的正确数据类型。 

使用以下代码根据 TemplateJSON文件更正每种数据类型:

finalJSON=postprocessingCorrection(parsedJSON,templateJSON)
数据科学家,开发人员
任务描述所需技能

准备 PDF 文件。

准备 PDF 文件,方式为将 PDF 文件拆分为单页,并将其转换为适合 Amazon Textract 同步操作(Syn API)的 JPEG 格式。

请注意:对于多页 PDF 文件,您也可以使用 Amazon Textract 异步操作Asyn API)。

数据科学家,开发人员

调用 Amazon Textract API。

使用以下代码调用 Amazon Textract API:

response = textract.analyze_document( Document={ 'S3Object': { 'Bucket': BUCKET, 'Name': '{}'.format(filename) } }, FeatureTypes=["TABLES", "FORMS"])
数据科学家,开发人员

解析 Amazon Textract 响应 JSON。

使用以下代码将响应 JSON 解析为表单与表格:

parseformKV=form_kv_from_JSON(response) parseformTables=get_tables_fromJSON(response)
数据科学家,开发人员

加载 templateJSON 文件并使其与已解析 JSON 匹配。

通过以下命令使用 TemplateJSON文件提取正确的键值对和表:

form_kv_corrected=form_kv_correction(parseformKV,templateJSON) form_table_corrected=form_Table_correction(parseformTables, templateJSON) form_kv_table_corrected_final={**form_kv_corrected , **form_table_corrected}
数据科学家,开发人员

后期处理校正。

TemplateJSON文件和后处理功能中使用DataType,以使用以下代码校正数据: 

finalJSON=postprocessingCorrection(form_kv_table_corrected_final,templateJSON)
数据科学家,开发人员

相关资源

附件

要访问与此文档相关联的其他内容,请解压以下文件:attachment.zip