

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

# 使用 Amazon Textract 从 PDF 文件中自动提取内容
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract"></a>

*Tianxia Jia，Amazon Web Services*

## Summary
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-summary"></a>

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

在 Amazon Web Services (AWS) Cloud 上，Amazon Textract 会自动从 PDF 文件中提取信息（例如已打印文本、表单和表格），并生成包含原始 PDF 文件信息的 JSON 格式文件。您可以在 AWS 管理控制台 中使用 Amazon Textract，也可以通过 API 调用使用。建议使用[编程 API 调用](https://aws.amazon.com/textract/faqs/)来扩展和自动处理大量 PDF 文件。

当 Amazon Textract 处理文件时，它会创建以下 `Block` 对象列表：页面、文本行和单词、表单（键值对）、表格和单元格以及选择元素。还包括其他对象信息，例如[边界框](https://docs.aws.amazon.com/textract/latest/dg/API_BoundingBox.html)、置信区间和关系。 IDsAmazon Textract 将提取字符串形式的内容信息。需要正确识别和转换数据值，以便下游应用程序更轻松的使用。 

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

## 先决条件和限制
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户。
+ 用于存储待转换为 JPEG 格式以供 Amazon Textract 处理的 PDF 文件的现有 Amazon Simple Storage Service(Amazon S3) 存储桶。有关 S3 存储桶的更多信息，请参阅 Amazon S3 文档中的[存储桶概述](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)。
+ `Textract_PostProcessing.ipynb` Jupyter Notebook（附件），已安装并配置。有关 Jupyter 笔记本的更多信息，请参阅亚马逊文档[中的创建 Jupyter](https://docs.aws.amazon.com/sagemaker/latest/dg/ex1-prepare.html) 笔记本。 SageMaker 
+ 格式相同的现有 PDF 文件。
+ 了解 Python。

**限制**
+ 您的 PDF 文件必须质量良好、且清晰可读。建议使用原生 PDF 文件，但如果所有单词均清晰可见，则可以使用转换至 PDF 格式的扫描文档。有关这方面的更多信息，请参阅 AWS 机器学习博客上的[使用 Amazon Textract 预处理 PDF 文档：视觉效果检测和删除](https://aws.amazon.com/blogs/machine-learning/process-text-and-images-in-pdf-documents-with-amazon-textract/)。
+ 对于多页文件，您可以使用异步操作，或将 PDF 文件拆分为单个页面并使用同步操作。有关这两个选项的更多信息，请参阅 Amazon Textract 文档中的[检测和分析多页文档的文本](https://docs.aws.amazon.com/textract/latest/dg/async.html)和[检测和分析单页文档的文本](https://docs.aws.amazon.com/textract/latest/dg/sync.html)。

## 架构
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-architecture"></a>

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

![\[使用 Amazon Textract 从 PDF 文件中提取内容\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/2d724523-2cab-42c9-a773-65857014d9ec/images/9e20070f-3e0c-46aa-aa98-a8b1eb3395dc.png)


 

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

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

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

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

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

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

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

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

1. 实施后期处理校正。

最终的 JSON 输出文件包含了每个必需字段的正确 `KeyName` 和 `Value`。

**目标技术堆栈**
+ Amazon SageMaker 
+ Amazon S3 
+ Amazon Textract

**自动化和扩缩**

您可以使用 AWS Lambda 函数自动执行*重复运行*工作流程，该函数会在新的 PDF 文件添加至 Amazon S3 中时启动 Amazon Textract。然后，Amazon Textract 会运行处理脚本，并将最终输出保存至存储位置。有关这方面的更多信息，请参阅 Lambda 文档中的[使用 Amazon S3 触发器调用 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html)。

## 工具
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-tools"></a>
+ [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) 是一项完全托管的机器学习服务，可帮助您快速轻松地构建和训练机器学习模型，然后将其直接部署到可用于生产的托管环境中。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [Amazon Textract](https://docs.aws.amazon.com/textract/latest/dg/what-is.html) 可以轻松地将文档文本检测和分析添加至您的应用程序。

## 操作说明
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-epics"></a>

### 首次运行
<a name="first-time-run"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 转换 PDF 文件。 | 为首次运行准备 PDF 文件，方式为将 PDF 文件拆分为单页，并将其转换为适合 Amazon Textract [同步操作](https://docs.aws.amazon.com/textract/latest/dg/sync.html)(`Syn API`)的 JPEG 格式。对于多页 PDF 文件，您也可以使用 Amazon Textract [异步操作](https://docs.aws.amazon.com/textract/latest/dg/async.html)（`Asyn API`）。 | 数据科学家、开发人员 | 
| 解析 Amazon Textract 响应 JSON。 | 打开 `Textract_PostProcessing.ipynb` Jupyter Notebook（附件），然后使用以下代码调用 Amazon Textract API：<pre>response = textract.analyze_document(<br />Document={<br />        'S3Object': {<br />            'Bucket': BUCKET,<br />            'Name': '{}'.format(filename)<br />                    }<br />                },<br />        FeatureTypes=["TABLES", "FORMS"])</pre>使用以下代码将响应 JSON 解析为表单与表格：<pre>parseformKV=form_kv_from_JSON(response)<br />parseformTables=get_tables_fromJSON(response)</pre> | 数据科学家，开发人员 | 
| 编辑 TemplateJSON 文件。 | 对每个 `KeyName` 和对应的 `DataType` 编辑已解析的 JSON（例如：字符串、浮点、整数或日期）以及表格标题（例如 `ColumnNames` 和 `RowNames`）。此模板用于每种单独的 PDF 文件类型，这意味着该模板可重复用于相同格式的 PDF 文件。 | 数据科学家，开发人员 | 
| 定义后处理校正函数。 | Amazon Textract 对 `TemplateJSON` 文件的响应中的值为字符串。日期、浮点数、整数或货币无区别。必须将这些值转换至适合下游用例的正确数据类型。 使用以下代码根据 `TemplateJSON` 文件更正每种数据类型：<pre>finalJSON=postprocessingCorrection(parsedJSON,templateJSON)</pre> | 数据科学家，开发人员 | 

### 重复运行
<a name="repeat-run"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备 PDF 文件。 | 准备 PDF 文件，方式为将 PDF 文件拆分为单页，并将其转换为适合 Amazon Textract [同步操作](https://docs.aws.amazon.com/textract/latest/dg/sync.html) (`Syn API`) 的 JPEG 格式。对于多页 PDF 文件，您也可以使用 Amazon Textract [异步操作](https://docs.aws.amazon.com/textract/latest/dg/async.html)（`Asyn API`）。 | 数据科学家、开发人员 | 
| 调用 Amazon Textract API。 | 使用以下代码调用 Amazon Textract API：<pre>response = textract.analyze_document(<br />        Document={<br />        'S3Object': {<br />            'Bucket': BUCKET,<br />            'Name': '{}'.format(filename)<br />                    }<br />                },<br />        FeatureTypes=["TABLES", "FORMS"])</pre> | 数据科学家，开发人员 | 
| 解析 Amazon Textract 响应 JSON。 | 使用以下代码将响应 JSON 解析为表单与表格：<pre>parseformKV=form_kv_from_JSON(response)<br />parseformTables=get_tables_fromJSON(response)</pre> | 数据科学家，开发人员 | 
| 加载 templateJSON 文件并使其与已解析 JSON 匹配。 | 通过以下命令使用 `TemplateJSON` 文件提取正确的键值对和表：<pre>form_kv_corrected=form_kv_correction(parseformKV,templateJSON)<br />form_table_corrected=form_Table_correction(parseformTables, templateJSON)<br />form_kv_table_corrected_final={**form_kv_corrected , **form_table_corrected}</pre> | 数据科学家，开发人员 | 
| 后期处理校正。 | 在 `TemplateJSON` 文件和后处理功能中使用 `DataType`，以使用以下代码校正数据： <pre>finalJSON=postprocessingCorrection(form_kv_table_corrected_final,templateJSON)</pre> | 数据科学家，开发人员 | 

## 相关资源
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-resources"></a>
+ [使用 Amazon Textract 从文档中自动提取文本和结构化数据](https://aws.amazon.com/blogs/machine-learning/automatically-extract-text-and-structured-data-from-documents-with-amazon-textract/)
+ [使用 Amazon Textract 提取文本和结构化数据](https://aws.amazon.com/getting-started/hands-on/extract-text-with-amazon-textract/)
+ [Amazon Textract 资源](https://aws.amazon.com/textract/resources/?blog-posts-cards.sort-by=item.additionalFields.createdDate&blog-posts-cards.sort-order=desc)

## 附件
<a name="attachments-2d724523-2cab-42c9-a773-65857014d9ec"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/2d724523-2cab-42c9-a773-65857014d9ec/attachments/attachment.zip)