private IdentifyDocumentTextResult processTextractBlocks()

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();
    }