in aws-predictions/src/main/java/com/amplifyframework/predictions/aws/service/AWSTextractService.java [132:196]
private IdentifyDocumentTextResult processTextractBlocks(List<Block> blocks) {
StringBuilder fullTextBuilder = new StringBuilder();
List<String> rawLineText = new ArrayList<>();
List<IdentifiedText> words = new ArrayList<>();
List<IdentifiedText> lines = new ArrayList<>();
List<Selection> selections = new ArrayList<>();
List<Table> tables = new ArrayList<>();
List<BoundedKeyValue> keyValues = new ArrayList<>();
List<Block> tableBlocks = new ArrayList<>();
List<Block> keyValueBlocks = new ArrayList<>();
Map<String, Block> blockMap = new HashMap<>();
for (Block block : blocks) {
// This is the map that will be used for traversing the graph.
// Each block can contain "relationships", which point to other blocks by ID.
String id = block.getId();
blockMap.put(id, block);
BlockType type = BlockType.fromValue(block.getBlockType());
switch (type) {
case LINE:
rawLineText.add(block.getText());
lines.add(TextractResultTransformers.fetchIdentifiedText(block));
continue;
case WORD:
fullTextBuilder.append(block.getText()).append(" ");
words.add(TextractResultTransformers.fetchIdentifiedText(block));
continue;
case SELECTION_ELEMENT:
selections.add(TextractResultTransformers.fetchSelection(block));
continue;
case TABLE:
tableBlocks.add(block);
continue;
case KEY_VALUE_SET:
keyValueBlocks.add(block);
continue;
default:
}
}
for (Block tableBlock : tableBlocks) {
Table table = TextractResultTransformers.fetchTable(tableBlock, blockMap);
if (table != null) {
tables.add(table);
}
}
for (Block keyValueBlock : keyValueBlocks) {
BoundedKeyValue keyValue = TextractResultTransformers.fetchKeyValue(keyValueBlock, blockMap);
if (keyValue != null) {
keyValues.add(keyValue);
}
}
return IdentifyDocumentTextResult.builder()
.fullText(fullTextBuilder.toString().trim())
.rawLineText(rawLineText)
.lines(lines)
.words(words)
.selections(selections)
.tables(tables)
.keyValues(keyValues)
.build();
}