AWS Textract - GetDocumentAnalysisRequest 仅返回文档第一页的正确结果

2024-01-01

我编写了使用 Amazon Textract 从 pdf 中提取表和名称值对的代码。我按照这个例子:https://docs.aws.amazon.com/texttract/latest/dg/async-analyzing-with-sqs.html https://docs.aws.amazon.com/textract/latest/dg/async-analyzing-with-sqs.html这是在java版本1.1的sdk中。 我已经为版本 2 重构了它。

这是一个仅适用于多页文档的异步过程。当我得到结果时,第一页的结果非常准确。但连续的页面大多是空行。我解析的文档是扫描的,因此质量不是很好。但是,如果我获取单个页面的 jpg 并使用单页操作,即AnalyzeDocumentRequest,则每个页面都会显示良好。 Amazon Textract tryit 服务也可以正确呈现页面。

所以错误一定是在我的代码中,但看不到在哪里。 正如你所看到的,这一切都发生在这里:

    GetDocumentAnalysisRequest documentAnalysisRequest = GetDocumentAnalysisRequest.builder().jobId(jobId)
                    .maxResults(maxResults).nextToken(paginationToken).build();

            response = textractClient.getDocumentAnalysis(documentAnalysisRequest);

我真的无法做任何干预。

我最有可能犯错误的地方是收集页面和表块的 util 文件,即这里:

  PageModel pageModel = tableUtil.getTableResults(blocks);

但这对于第一页来说效果很好,而且我还可以在上面的响应对象中看到,返回的块数量要少得多。

这是完整的代码:


private DocumentModel getDocumentAnalysisResults(String jobId) throws Exception {

        int maxResults = 1000;
        String paginationToken = null;
        GetDocumentAnalysisResponse response = null;
        Boolean finished = false;

        int pageCount = 0;
        DocumentModel documentModel = new DocumentModel();
        // loops until pagination token is null
        while (finished == false) {
            GetDocumentAnalysisRequest documentAnalysisRequest = GetDocumentAnalysisRequest.builder().jobId(jobId)
                    .maxResults(maxResults).nextToken(paginationToken).build();

            response = textractClient.getDocumentAnalysis(documentAnalysisRequest);

            // Show blocks, confidence and detection times
            List<Block> blocks = response.blocks();
            PageModel pageModel = tableUtil.getTableResults(blocks);
            pageModel.setPageNumber(pageCount++);
            Map<String,String> keyValues = formUtil.getFormResults(blocks);
            pageModel.setKeyValues(keyValues);
            documentModel.getPages().add(pageModel);
            paginationToken = response.nextToken();
            if (paginationToken == null)
                finished = true;
        }
        return documentModel;

    }

还有其他人遇到过这个问题吗?

非常感谢


如果响应中有NextToken,则需要调用texttract并传入NextToken以获取下一批Block。 我不知道如何在 Java 中执行此操作,但这是来自 AWS 存储库的 python 示例https://github.com/aws-samples/amazon-textract-serverless-large-scale-document-processing/blob/master/src/jobresultsproc.py https://github.com/aws-samples/amazon-textract-serverless-large-scale-document-processing/blob/master/src/jobresultsproc.py

对于我的解决方案,我做了一个简单的 if response['NextToken'] then recall 方法并将 response['Blocks'] 连接到我当前的列表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS Textract - GetDocumentAnalysisRequest 仅返回文档第一页的正确结果 的相关文章

  • 使 div 自动向左而不是向右扩展宽度

    我的网站上有一个 div 其中包含充当菜单的项目列表 我已经设置了CSSwidth auto这样 如果菜单项太长 它会重新调整大小 但目前 这将扩展到右侧 并将我的其余内容 推 到右侧 这很难解释 所以举个例子 如果你去http redsq
  • C 中 _Bool 和 bool 类型之间的区别?

    谁能解释一下两者之间有什么区别 Bool and boolC 中的数据类型 例如 Bool x 1 bool y true printf d x printf d y 这些数据类型是在 C99 中添加的 自从bool在 C99 之前没有保留
  • 如何在 Sails js (nodejs MVC) 中使用外部 REST API

    我正在使用 sails js 作为 Node js 的 MVC 我仍在学习它 我设法从自己的数据库中获取数据并使用它 但现在我需要 想要从外部 REST API 获取数据 我在我的控制器中使用了这个 api controllers Some
  • C++ 的首选命名约定是什么?

    通过查看 boost 库和 stl 然后查看人们的示例 我感到非常困惑 看起来大写的类型名称都散布在所有小写字母中 并用下划线分隔 如今 事情到底应该怎样做呢 我知道 NET 世界有自己的一套约定 但它似乎与 C 领域完全不同 你打开了一个
  • 监听来自 Dart 的 javascript 事件

    Dart 有没有办法监听 javascript 库中的事件 例如 jqrangesliderhttp ghusse github io jQRangeSlider http ghusse github io jQRangeSlider 当有
  • 过滤字典内的数组 - Swift

    我正在尝试搜索索引字典以根据客户的姓氏返回特定客户 以下是我正在使用的数据结构 每个客户端对象都有一个名称属性 它是一个字符串 var clients Client loadAllClients Returns client array v
  • 滚动条触发的jquery mouseleave文档

    document ready function document mouseleave function desktop subscribe modal modal show 我试图在鼠标离开文档窗口时触发一个功能 上面的代码在 Firef
  • knitr 的 kable 将 2.29e-30 打印为“0”

    CODE some data dat lt data frame log2fc c 0 28 10 82 8 54 5 64 8 79 6 46 pvalue c 0 00e 00 2 29e 30 7 02e 30 4 14e 29 1
  • Firebase 流式 REST 连接是否计入并发连接限制?

    In a 最近的问题 https stackoverflow com q 28229543 209103有人指出Firebase 定价文档 https www firebase com pricing html states REST AP
  • 是否可以在 Eclipse 中从多个包运行 JUnit 测试?

    是否可以同时运行多个包的 JUnit 测试 而无需手动创建测试套件 例如 如果我有层次结构 代码 branchone代码 branchone aaa代码 branchone bbb代码 branchtwo代码 branchtwo aaa代码
  • 在整个 Webresource.axd 中使用嵌入式 WebResources

    问题很简单 如何在 ASP NET 应用程序中使用嵌入式资源 将资源包含在程序集中的步骤是什么 以及如何引用它 可能会遇到哪些问题 编辑 对于未引用 Page 和 ClientScript 的版本 请参阅在 Razor 视图上处理嵌入式资源
  • 正则表达式匹配星号和换行符之间的字符串

    例子 blah blah Match this text Match this text Match this text Match this text Match this text more text more text 如何从星号内部
  • Semantic-ui 与 Bootstrap [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 哪一种最好用 如果可能 请提供这两者的区别和优点 语义用户界面 http semantic ui com vs 引导程序 http getboo
  • 将 Rails 应用程序部署到 Heroku 不断崩溃

    这个答案似乎已经以多种方式得到了回答 但似乎没有一个适合我的确切问题 我正在使用 RailsApps 中的应用程序https github com RailsApps rails devise pundit https github com
  • 如何将git存储库的根设置为vi/vim查找路径?

    我想设置 vim 文件搜索路径以包括 git 存储库根 可以通过以下方式找到 git rev parse show toplevel 我不知道如何附加这个输出git命令 set path 在 vimrc 中 Thanks 您可以使用此命令
  • 在从 XAML 实例化的控件中使用 MEF

    我创建了一个 UserControl 它使用 Import 属性 public class MyUserControl UserControl IPartImportsSatisfiedNotification Import public
  • 使用正确的派生类型调用泛型方法

    我有以下场景 我有三个课程 我们称它们为A B and C 它们的共同点是它们继承自相同的接口 ISomeInterface它们是使用实体框架映射到实体的类 我有一个方法接收实现此接口的对象列表 但对象本身将是A B or C 方法外壳看起

随机推荐