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