我编写了使用 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;
}
还有其他人遇到过这个问题吗?
非常感谢