利用 Amazon Textract 和 Amazon Comprehend 构建由 NLP 提供支持的搜索索引

2020 年 4 月 07 日

利用 Amazon Textract 和 Amazon Comprehend 构建由 NLP 提供支持的搜索索引

所有行业的公司组织都拥有大量的物理文档。如果文档中包含表格、表单、段落和复选框之类的格式,则难以从扫描的文档中提取文本。这些公司已使用光学字符辨识 (OCR) 技术解决了这些问题,但是,它需要使用表单提取和自定义工作流模板。


提取和分析图像或 PDF 中的文本是一个典型的机器学习 (ML) 和自然语言处理 (NLP) 问题。从文档中提取内容时,您需要维持整体环境并以可读取和可搜索的格式存储信息。创建复杂的算法需要使用大量训练数据和计算资源。构建和训练完美的机器学习模型可能非常昂贵并且费时。


本博客将引导您使用 Amazon Textract 和 Amazon Comprehend 作为存储和分析扫描图像文档的自动化内容处理管道,以此创建由 NLP 提供支持的搜索索引。有关 PDF 文档的处理,请参阅 AWS 示例 Github 存储库,以使用文本提取器


本解决方案使用无服务器技术和托管服务来获得可扩展性和成本有效性。本解决方案中使用的服务包括:



架构


  1. 用户上传 OCR 图像,以便在 Amazon S3 上进行分析。

  2. Amazon S3 上传触发器 AWS Lambda。

  3. AWS Lambda 调用 Amazon Textract 以提取图像中的文本。

  4. AWS Lambda 向 Amazon Comprehend 发送从图像中提取的文本,以便进行实体和主要词提取。

  5. 此数据将被编制索引并加载到 Amazon Elasticsearch 中。

  6. Kibana 获取索引数据。

  7. 用户登录到 Amazon Cognito。

  8. Amazon Cognito 对至 Kibana 的访问进行身份验证,以搜索文档。



使用 AWS CloudFormation 部署架构


第一步是使用 AWS CloudFormation 模板预置必要的 IAM 角色和 AWS Lambda 函数,以便与 Amazon S3、AWS Lambda、Amazon Textract 和 Amazon Comprehend API 进行交互。


  1. 在 US-East-1(弗吉尼亚北部)区域启动 AWS CloudFormation 模板:[



2. 您将会在创建堆栈界面上看到以下信息:


堆栈名称:document-search


CognitoAdminEmail:abc@amazon.com


域名:documentsearchapp。使用您的电子邮件地址编辑 CognitoAdminEmail。您将会收到一封包含临时 Kibana 凭据的电子邮件。



3. 向下滚动至功能并选中两个复选框,以确认 AWS CloudFormation 将创建 IAM 资源。有关更多信息,请参阅 AWS IAM 资源



4. 向下滚动至转换并选择创建更改集



AWS CloudFormation 模板使用 AWS SAM,这简化了定义无服务器应用程序的函数和 API 以及环境变量之类的服务功能的流程。在 AWS CloudFormation 模板中部署 AWS SAM 模板时,您需要执行转换步骤以转换 AWS SAM 模板。


5. 等待几秒,以便更改集完成计算更改。您的界面应如下所示,其中包括“操作”、“逻辑 ID”、“物理 ID”、“资源类型”和“替换”。最后,单击执行按钮,让 AWS CloudFormation 在后端启动资源。



6. 在以下堆栈详细信息页面的屏幕截图中,CloudFormation 堆栈的状态显示为 CREATE_IN_PROGRESS。等待 20 分钟,以便状态更改为 CREATE_COMPLETE。在输出中,复制 S3KeyPhraseBucketKibanaLoginURL 的值。



将文档上传至 S3 存储桶


要将文档上传至您在上一步中新建的 S3 存储桶,请完成以下操作:


  1. 单击您从 CloudFormation 输出中复制的 Amazon S3 存储桶 URL。

  2. GitHub 存储库下载示例数据集 demo-data.zip。此数据集包含多个图像,这些图像中包含表单、含有段落的扫描图像和两栏式文档。

  3. 解压缩数据。

  4. 将演示数据文件夹中的文件上传至以 document-search-blog-s3- 开头的 Amazon S3 存储桶。


有关更多信息,请参阅如何将文件和文件夹上传至 S3 存储桶?


上传完成之后,您可以在 S3 存储桶中看到以下四个图像文件:Employment_application.JPG、expense.png、simple-document-image.jpg 和 two-column-image.jpg。



将数据上传至 S3 存储桶将会触发调用 Lambda 函数的 Lambda S3 事件通知。您可以在高级设置 -> 事件下的 Amazon S3 存储桶属性中查找配置的事件触发器。您将会看到以 document-search-blog-ComprehendKeyPhraseAnalysis-<Random string> 开头的 Lambda 函数。此 Lambda 函数将执行以下操作:


  • 使用 Amazon Textract 从图像中提取文本。

  • 使用 Amazon Comprehend 执行关键词提取。

  • 使用 Amazon ES 搜索文本。


以下代码示例将使用 Amazon Textract 从图像中提取文本:


textract = boto3.client(
service_name='textract',
region_name=region)
#Main lambda handlerdef lambda_handler(event, context): # Get the object from the lambda event and show its content type bucket = event['Records'][0]['s3']['bucket']['name'] key = unquote_plus(event['Records'][0]['s3']['object']['key']) s3.Bucket(bucket).download_file(Key=key,Filename='/tmp/{}')# Read document content and extract text using Textractwith open('/tmp/{}', 'rb') as document: imageBytes = bytearray(document.read())response=textract.analyze_document(Document={'Bytes':imageBytes},FeatureTypes=["TABLES", "FORMS"])
复制代码


以下代码示例将使用 Amazon Comprehend 提取关键词:


#Initializing comprehendcomprehend = boto3.client(service_name='comprehend', region_name=region)#Detect Keyphrases and Entitieskeyphrase_response = comprehend.detect_key_phrases(Text=text, LanguageCode='en')detect_entity= comprehend.detect_entities(Text=text, LanguageCode='en')
复制代码


您可以对从 Amazon Textract 和 Amazon Comprehend 接收到的响应编制索引,并将其加载到 Amazon ES 中,以创建由 NLP 提供支持的搜索索引。请参阅以下代码:


#Connection to Elasticsearch
es=connectES()#Saving Index to Elastocsearch endpoint in primary lambda handler
es.index(index="document", doc_type="_doc", body=searchdata)
复制代码


有关更多信息,请参阅 GitHub 存储库


使用 Kibana 可视化和搜索文档


要使用 Kibana 可视化和搜索文档,请执行以下步骤。


  1. 在您的收件箱中找到主题行为 “临时密码”的电子邮件。 如果您在收件箱中未看到此电子邮件,请检查垃圾邮件文件夹。



2. 转至从 AWS CloudFormation 输出复制的 Kibana 登录 URL。


3. 使用您的电子邮件地址作为用户名和确认电子邮件中的临时密码作为密****码登录。 单击登录



注意:如果在部署 AWS CloudFormation 时未收到电子邮件或者在丢失了该电子邮件,请选择登录


4. 在下一个页面上,输入新密码。


5. 在 Kibana 登陆页的菜单中,选择发现


6. 在管理/Kibana 页面上,您将看到步骤 1/2:定义索引模式,对于索引模式,输入 document*。此时将显示“成功! 您的索引模式匹配 1 个索引”。选择下一步。单击创建索引模式



几秒之后,您可以看到文档索引页面。


7. 再次从菜单中选择发现。在下面的屏幕截图中,您可以看到文档属性。


   s3link:s3 location of uploaded documents in S3,   KeyPhrases: Key phrases from the documents uploaded in S3,   Entity: it can be DATE, PERSON, ORGANIZATION etc,   text: raw text from documents,   table:tables extracted from documents, and forms:form extracted from documents
复制代码



  1. 要查看每个条目的特定字段,请将鼠标悬停在左侧栏中的字段上,然后单击添加


这会将字段移至选定字段菜单。Kibana 仪表板将以易读格式表示数据。以下屏幕截图所示为将 Entity.DATE、Entity.Location、Entity.PERSON、S3link 和文本添加到选定字段菜单之后的视图:



要查看原始文档,请选择 s3link


注意:此外,您还可以添加表单和表格,以查看和搜索表格和表单。


小结


本博文演示了如何提取和处理图像文档中的数据并将其可视化,以创建可指导行动的见解。


处理扫描图像文档可以帮助您获得大量数据,从而为您带来新的业务前景。借助诸如 Amazon Textract 和 Amazon Comprehend 之类的托管机器学习服务,您可以从先前未发现的数据中获得见解。例如,您可以构建自定义应用程序,以获取扫描的法律文档、购买收据和采购订单中的文本。


每一个行业内的数据均具有相关性。无论您是处理图像还是 PDF 中的数据,AWS 均可简化数据提取和分析,同时保持整体 IT 成本的可管理性。


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/building-an-nlp-powered-search-index-with-amazon-textract-and-amazon-comprehend/


2020 年 4 月 07 日 17:21127

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布
暂无评论
发现更多内容

ARTS Week12

丽子

UML学习笔记

Edison

UML

LeetCode题解:242. 有效的字母异位词,哈希表一次循环,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

如何理解区块链行业的安全问题?

CECBC区块链专委会

区块链 人工智能 大数据

架构师训练营第 3 周作业

netspecial

极客大学架构师训练营

最完整的PyTorch数据科学家指南(1)

计算机与AI

学习 PyTorch

架构师训练营第一期 - 第三周课后 - 作业二

极客大学架构师训练营

区块链12年:应用在了哪些领域?

CECBC区块链专委会

区块链 教育 金融 物流

区块链到底是什么?它为什么如此受人关注

CECBC区块链专委会

区块链 金融

第三周学习心得

alpha

极客大学架构师训练营

互联网上正规平台的辨别方法?被AG黑网投黑钱拿回的技巧方案

InfoQ_6b6a6317a692

第三周 学习总结

Yangjing

极客大学架构师训练营

架构师训练营 - 第三周作业

一个节点

极客大学架构师训练营

架构师训练营第三周学习总结

听夜雨

极客大学架构师训练营

go语言设计的理解-工程化语言

superman

Java go 面向对象编程

架构师训练营第一期 - 第三周课后 - 作业一

极客大学架构师训练营

架构师训练营 - 第三周总结

一个节点

极客大学架构师训练营

架构师训练营第三周作业

听夜雨

极客大学架构师训练营

第三周用组合设计模式编写程序

Geek_fabd84

极客时间架构师培训 1 期 - 第 3周总结

Kaven

极客时间架构师培训 1 期 - 第 3 周作业

Kaven

微服务部署测试简单实践

MySQL从删库到跑路

zookeeper 微服务 dubbo Sprint Boot session

智能的本质—DIKW结构

良少

学习 AI 智能 DIKW

为啥你用@JsonFormat注解时,LocalDateTime会反序列化失败?

冰河

springboot LocalDateTime JsonFormat

spring-boot-route(一)Controller接收参数的几种方式

Java旅途

Java Spring Boot

区块链技术在司法行业的服务应用

CECBC区块链专委会

区块链 司法

第三周作业

alpha

极客大学架构师训练营

AQS 都看完了,Condition 原理可不能少!

程序员小航

Java 源码 源码阅读 JUC Condition

架构师训练营第 1 期 - 第三周课后练习

Anyou Liu

极客大学架构师训练营

LeetCode题解:242. 有效的字母异位词,哈希表两次循环,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

一个草根的日常杂碎(10月1日)

刘新吾

随笔杂谈 生活记录 社会百态

利用 Amazon Textract 和 Amazon Comprehend 构建由 NLP 提供支持的搜索索引-InfoQ