Amazon web services AWS:Textract与Cloudsearch

Amazon web services AWS:Textract与Cloudsearch,amazon-web-services,amazon-cloudsearch,amazon-textract,Amazon Web Services,Amazon Cloudsearch,Amazon Textract,我正在创建一个使用一些AWS服务的项目(用于培训目的) 现在大家都知道AWS有很多不同的服务,它需要一些关于如何使用它们以及可以使用它们做什么的知识。这就是我在这里发帖的原因: 我的想法 我想创建一个应用程序,用户可以上传他们的PDF/图像,然后使用AWS Textract处理它们,然后能够智能地搜索他们的文档 这里的诀窍是: 并非所有文档的结构都相同 应用程序的每个用户都有自己的文档(应该是私有的) 因此,在阅读了大量文档之后,这里是我使用AWS Textract和AWS CloudSea

我正在创建一个使用一些AWS服务的项目(用于培训目的)

现在大家都知道AWS有很多不同的服务,它需要一些关于如何使用它们以及可以使用它们做什么的知识。这就是我在这里发帖的原因:

我的想法

我想创建一个应用程序,用户可以上传他们的PDF/图像,然后使用AWS Textract处理它们,然后能够智能地搜索他们的文档

这里的诀窍是:

  • 并非所有文档的结构都相同
  • 应用程序的每个用户都有自己的文档(应该是私有的)
因此,在阅读了大量文档之后,这里是我使用
AWS Textract
AWS CloudSearch

客户端将其文档上载到我的服务。然后,该文档由AWS Textract保存和处理,输出存储在数据库中

搜索

现在,这就是我怀疑的地方。我希望用户能够搜索他的私人文档。我一直在看
cloudsearch
,但是当文档如此不同和独特时,我不能100%确定它的功能


所以我想我的问题是,搜索这些独特文档的最佳方式是什么

在我回答你的问题之前,有一些事情需要注意:

所以我想我的问题是什么是搜索这些独特的 文件

首先,Textract以以下格式提供JSON输出:

"BlockType": "LINE",
      "Confidence": 99.71240997314453,
      "Text": "Previous Employer: None",
      "Geometry": {…}
这意味着字段CloudSearch将看到的是“文本”,而不会看到“前雇主”作为字段,只是文本字符串的一部分。(我会回到这里)

您还应注意,Textract与任何其他OCR一样都不是完美的,因此您应该预计会出现一定数量的错误,例如,上面的文本字段可能会被读取为

"Text": "Previous Employee: None"
它也可能以你意想不到的方式分割或连接事物。因此,您可能会得到两个单独的行块,分别为“前雇主:”和“无”

在隐私方面,单个CloudSearch域没有个人作为数据或个人数据的概念。只有数据

您可以在Lambda或API Gateway中执行某些操作,以限制某些字段的查询或结果,但这不会对person B隐藏person作为数据。此外,由于我们使用Textract,所有内容都将位于字段“Text”下

您唯一的选择是为每个用户提供一个单独的CloudSearch域。这是一个真正的可能性,只要你有100个或更少的客户,并且你没有其他的CloudSearch域名,因为AWS将每个帐户的域名数量限制为100个。有关更多信息,请参阅

虽然我们讨论的是CloudSearch限制,但每个文档只能有200个字段。即使是一个小文档也可能导致包含200多个字段的Textract JSON响应。由于“几何图形”下的所有字段,单个线块有18个字段。因此,在上传到CloudSearch之前,您可能需要迭代Textract生成的任何数据,以去除对您没有任何用处的字段

因此,我们需要进行实际的搜索。您实际上只有一个字段要搜索,即“文本”。这意味着您将无法为上载的任何文档编制索引,这将影响查询响应时间

不过,您可以执行以下类型的请求:

  • 按字段搜索(匹配):

    q=以前的雇主:无&q.options={fields:['Text']}

  • 按字段搜索(包含):

    (短语字段=文本“前雇主”)

  • 按自由文本(word)搜索:

    q=雇主

  • 按自由文本(短语)搜索:

    q=“前任雇主”

  • 草率搜索(单词之间的距离):

    q=“以前无”~2

  • 文本搜索的例子还有很多,但我想说的是,你只能进行文本搜索

    但是Textract的数据结构也是一个问题,因为所有这些查询都会返回相同的结果:

    "BlockType": "LINE",
          "Confidence": 99.71240997314453,
          "Text": "Previous Employer: None",
          "Geometry": {…}
    
    它不会返回文档中的下一行,因为该行具有相同的字段名,并且在技术上是一个单独的文档

    如果您使用Textract结果并创建一个全新的文档(您需要考虑如何准确地管理此工作流),许多问题都可以得到解决

    可能的文件格式:

    {
      "id":   "somethingUnique",
      "fields": {
        "title": "FileName",
        "user": ["UserId"],
        "wholeText": "Giant concatenated string of all text from Textract"
        "page1": ["jsonString1","jsonstring2","etc"],
        "page2": ["jsonString1","jsonstring2","etc"],
        "originalDocImage": [bytes]
      }
    }
    
    其中,每个json字符串都是Textract结果(或只是文本和几何体)的单个块

    通过这种方式,您可以按userId限制搜索,返回用户的整个文档,并使用几何体数据将其覆盖为高亮显示

    它还允许对用户进行索引,并允许用户通过上传的文件名(可能是另一个索引)进行搜索

    这有点痛苦,因为使用多个可能不相邻的单词进行搜索时,仍然需要找到一个包含所有文本的巨大字符串,并且需要迭代JSONSTRING以获取几何体数据来进行高亮显示


    这就为CloudSearch之外的搜索留下了大量处理,所有搜索都必须由API网关/Lambda等代理,以确保人们不能对非自己的数据进行搜索。

    非常感谢您的回答。如果我理解正确的话,CloudSearch似乎不是这份工作的合适工具。你对更好的工具有什么建议吗?我认为你需要的是一个合适的企业搜索工具,而AWS还没有真正得到。也就是说,您的潜在解决方案存在的主要问题是,您只是在转储原始Textract res