我正在对 AWS Textract 功能进行一些研究。我发现有两种主要方法可以(同步)从 PDF 文件中获取信息:DetectDocumentText 和AnalyzeDocument。我一直在试图理解这两个函数之间的区别,但我似乎找不到具体的信息。
基于 API 文档 DetectDocumentText 返回文档中检测到的文本,而 AnalyzeDocument 分析文档和表单以查找检测到的文本之间的关系。但是,我看到 DetectDocumentText 返回关系,因此这就是我对两个 API 调用之间的差异感到困惑的地方。
检测文档文本返回:
一些问题:
任何帮助理解这两个函数的帮助将不胜感激。谢谢!
但是,我看到 DetectDocumentText 返回关系,因此这就是我对两个 API 调用之间的差异感到困惑的地方。
Textract 调用的结果始终是一个图形结构:特别是一个森林,每个页面都是树的根,所有检测都是从那里下降的节点。当然,所有图都有节点和边。然而,这里重要的部分是 Textract 为您提供仅包含平面节点列表的 JSON。关系字段包含这些边:它是与当前节点相邻的检测的 ID 列表。无论您调用哪个 Textract API,这都是一样的。
基于 API 文档 DetectDocumentText 返回文档中检测到的文本
根据我刚才的描述,这实际上并不是 100% 正确。您不仅仅获得长字符串形式的原始文本,您还获得该图表,其中每个节点都包含有关其在页面上的几何形状、其在文档中的层次结构以及该特定的置信度的一整套信息检测。它非常精细,就像一两个单词,因此无论您使用什么,都需要在应用程序中进行一定程度的重建才能获取文档的全文。考虑一下具有复杂的栏和段落排列的文档 - 例如报纸的头版。 Textract 不知道如何自行重新组合该文本的阅读顺序(即空间索引),因此它不会代表您做出任何假设。
仅当数据中没有表单时才应使用 DetectDocumentText 吗?
不一定,如果您不需要要检测的表单,可以使用DetectDocumentText。 (或表,或查询等)。 AnalyzeDocument 将在该图中为您提供非常好的数据结构,专门突出显示这些文档功能,而 DetectDocumentText 将使这些功能显示为行和单词,与页面上的其他文本无法区分。
这是否意味着需要在AnalyzeDocument之前调用DetectDocumentText,以便检测到文本,然后调用AnalyzeDocument来了解文本之间的关系?绝对不是。 AnalyzeDocument 将为您提供从 DetectDocumentText 中获得的所有内容以及额外的内容 - 包括文档中的所有文本。通常,您应该根据您的用例提前知道是否需要这些文档功能(例如表格和表单)。但它绝对不需要两次 API 调用。
使用 DetectDocumentText 与 AnalyzeDocument 相比有什么好处?因为 DetectDocumentText 功能不全,我认为每次 API 调用更便宜。