1

我编写了代码来使用 Amazon Textract 从 pdf 中提取表和名称值对。我遵循了这个示例: 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;

    }

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

非常感谢

4

0 回答 0