点击围观!腾讯 TAPD 助力金融行业研发提效、敏捷转型最佳实践! 了解详情
写点什么

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

  • 2020-04-07
  • 本文字数:3588 字

    阅读完需:约 12 分钟

利用 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-04-07 17:21518

评论

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

模块一作业(架构实战训练营)

Justin

架构实战营

《零基础学 Python(2023 版)》学习笔记 Day1

IT蜗壳-Tango

Higress & Kruise Rollout: 渐进式交付为应用发布保驾护航

阿里巴巴云原生

阿里云 云原生 Higress

让 Java Agent 在 Dragonwell 上更好用

阿里巴巴云原生

Java 阿里云 云原生

云原生人才培养计划2.0 之 消息产品「全家桶训练营」重磅来袭

阿里巴巴云原生

阿里云 云原生

模块四作业

Ryan

架构

13 个前端可能用得上的 CSS技巧

devpoint

CSS ios 前端开发 scss

airserver2023最新版免费使用教程

茶色酒

AirServer2023

ImageView(图像视图)

向阳逐梦

imageView android布局 图像视图

Spring 响应式编程,真香!!!

老周聊架构

响应式编程

2023-01-08:小红定义一个仅有r、e、d三种字符的字符串中, 如果仅有一个长度不小于2的回文子串,那么这个字符串定义为“好串“。 给定一个正整数n,输出长度为n的好串有多少个。 结果对10^9

福大大架构师每日一题

算法 rust Solidity 福大大

微博评论的高性能高可用计算架构

闲人Eric

#架构实战营

流量路由技术解析

阿里巴巴云原生

阿里云 云原生 流量路由

新同事卷的要死 , 天天加班,动不动就手写spring , 直呼崩溃

程序知音

Java java面试 后端技术 春招 Java面试八股文

2023年玩兔年小游戏《兔兔保卫萝卜战》赢新年祝福「钱兔无量」

非喵鱼

Java swing 小游戏 新年祝福

MSE ZooKeeper 数据导入导出功能上线

阿里巴巴云原生

zookeeper 阿里云 云原生

React源码分析3-render阶段(穿插scheduler和reconciler)

flyzz177

React

架构实战营模块 4 作业

刘博

程序员为什么下班后只关显示器从不关电脑

风铃架构日知录

Java 程序员 后端 码农 IT

对话开发者:Serverless 落地的困境与破局

阿里巴巴云原生

阿里云 Serverless 云原生

年终盘点一 | 云原生的 2022 年:降本提效、全面 Serverless 化

阿里巴巴云原生

阿里云 Serverless 云原生

RocketMQ 多语言 SDK 开源贡献召集令

阿里巴巴云原生

阿里云 RocketMQ 云原生

恭喜 OpenSergo 获得中国开源云联盟 2022 “优秀开源项目”

阿里巴巴云原生

阿里云 开源 云原生 OpenSergo

React源码分析4-深度理解diff算法

flyzz177

React

自动驾驶技术平台分享:百度Apollo开放平台8.0再升级,更简单,更便捷,更高效

石臻臻的杂货铺

自动驾驶

利用 Amazon Textract 和 Amazon Comprehend 构建由 NLP 提供支持的搜索索引_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章