From c071a133e61b12c3593feaddd01dad4dcf0bdcc6 Mon Sep 17 00:00:00 2001 From: maverickstuder Date: Tue, 30 Apr 2024 14:41:17 +0200 Subject: [PATCH] RED-7074: Design Subsection section tree structure algorithm * added toc enrichment logic and changed section computation to build upon created toc --- .../processor/LayoutParsingPipeline.java | 20 +- .../model/ClassificationDocument.java | 5 + .../processor/model/graph/DocumentTree.java | 4 +- .../outline/OutlineValidationService.java | 8 +- .../model/outline/TOCEnrichmentService.java | 266 ++++++++++++++++++ .../model/outline/TableOfContentItem.java | 83 +++--- .../model/outline/TableOfContents.java | 46 ++- .../services/SectionsBuilderService.java | 59 ++-- .../factory/DocumentGraphFactory.java | 38 ++- .../services/factory/SectionNodeFactory.java | 19 +- .../server/graph/ViewerDocumentTest.java | 35 ++- .../test/resources/files/new/UTT-Books-53.pdf | Bin 142030 -> 170695 bytes 12 files changed, 482 insertions(+), 101 deletions(-) create mode 100644 layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/TOCEnrichmentService.java diff --git a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/LayoutParsingPipeline.java b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/LayoutParsingPipeline.java index 9c65a49..42da329 100644 --- a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/LayoutParsingPipeline.java +++ b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/LayoutParsingPipeline.java @@ -32,6 +32,7 @@ import com.knecon.fforesight.service.layoutparser.processor.model.image.Classifi import com.knecon.fforesight.service.layoutparser.processor.model.outline.OutlineExtractorService; import com.knecon.fforesight.service.layoutparser.processor.model.outline.OutlineObject; import com.knecon.fforesight.service.layoutparser.processor.model.outline.OutlineValidationService; +import com.knecon.fforesight.service.layoutparser.processor.model.outline.TOCEnrichmentService; import com.knecon.fforesight.service.layoutparser.processor.model.outline.TableOfContents; import com.knecon.fforesight.service.layoutparser.processor.model.table.Cell; import com.knecon.fforesight.service.layoutparser.processor.model.table.CleanRulings; @@ -101,6 +102,7 @@ public class LayoutParsingPipeline { GraphicExtractorService graphicExtractorService; OutlineExtractorService outlineExtractorService; OutlineValidationService outlineValidationService; + TOCEnrichmentService tocEnrichmentService; public LayoutParsingFinishedEvent parseLayoutAndSaveFilesToStorage(LayoutParsingRequest layoutParsingRequest) throws IOException { @@ -279,17 +281,17 @@ public class LayoutParsingPipeline { List emptyTableCells = TableExtractionService.findCells(cleanRulings.getHorizontal(), cleanRulings.getVertical()); var graphics = graphicExtractorService.extractPathElementGraphics(originDocument, - pdPage, - pageNumber, - cleanRulings, - stripper.getTextPositionSequences(), - emptyTableCells, - false); + pdPage, + pageNumber, + cleanRulings, + stripper.getTextPositionSequences(), + emptyTableCells, + false); pdfImages.computeIfAbsent(pageNumber, x -> new ArrayList<>()) .addAll(graphics.stream() - .map(g -> new ClassifiedImage(new Rectangle2D.Double(g.x1, g.y1, g.width(), g.height()), ImageType.GRAPHIC, false, stripper.getPageNumber())) - .toList()); + .map(g -> new ClassifiedImage(new Rectangle2D.Double(g.x1, g.y1, g.width(), g.height()), ImageType.GRAPHIC, false, stripper.getPageNumber())) + .toList()); ClassificationPage classificationPage = switch (layoutParsingType) { case REDACT_MANAGER_OLD -> redactManagerBlockificationService.blockify(stripper.getTextPositionSequences(), emptyTableCells); @@ -372,6 +374,8 @@ public class LayoutParsingPipeline { default -> { sectionsBuilderService.buildSections(classificationDocument); sectionsBuilderService.addImagesToSections(classificationDocument); + + tocEnrichmentService.assignSectionBlocksAndImages(classificationDocument); } } diff --git a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/ClassificationDocument.java b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/ClassificationDocument.java index e6ef1ad..54b8f81 100644 --- a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/ClassificationDocument.java +++ b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/ClassificationDocument.java @@ -1,11 +1,15 @@ package com.knecon.fforesight.service.layoutparser.processor.model; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import com.knecon.fforesight.service.layoutparser.processor.model.outline.OutlineObjectTree; +import com.knecon.fforesight.service.layoutparser.processor.model.outline.TableOfContentItem; import com.knecon.fforesight.service.layoutparser.processor.model.outline.TableOfContents; import com.knecon.fforesight.service.layoutparser.processor.model.text.StringFrequencyCounter; +import com.knecon.fforesight.service.layoutparser.processor.model.text.TextPageBlock; import com.knecon.fforesight.service.layoutparser.processor.model.text.UnclassifiedText; import lombok.Data; @@ -17,6 +21,7 @@ public class ClassificationDocument { private List pages = new ArrayList<>(); private List sections = new ArrayList<>(); + //private Map> sectionsMap = new HashMap<>(); private List headers = new ArrayList<>(); private List footers = new ArrayList<>(); private List unclassifiedTexts = new ArrayList<>(); diff --git a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/graph/DocumentTree.java b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/graph/DocumentTree.java index dff1f4b..a95ee58 100644 --- a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/graph/DocumentTree.java +++ b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/graph/DocumentTree.java @@ -140,8 +140,8 @@ public class DocumentTree { if (treeId.isEmpty()) { return root; } - Entry entry = root.children.get(treeId.get(0)); - for (int id : treeId.subList(1, treeId.size())) { + Entry entry = root; + for (int id : treeId) { entry = entry.children.get(id); } return entry; diff --git a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/OutlineValidationService.java b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/OutlineValidationService.java index d52ba5e..a1d5838 100644 --- a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/OutlineValidationService.java +++ b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/OutlineValidationService.java @@ -39,7 +39,7 @@ public class OutlineValidationService { private boolean containsBlock(TableOfContents toc, TextPageBlock block) { for (TableOfContentItem existingItem : toc.getMainSections()) { - if (existingItem.getTextPageBlock().equals(block) || existingItem.contains(block)) { + if (existingItem.getHeadline().equals(block) || existingItem.contains(block)) { return true; } } @@ -82,7 +82,7 @@ public class OutlineValidationService { assert (parent != null); while (parentDepth < currentDepth && parent.getParent() != null) { parent = parent.getParent(); - parentDepth = getDepth(parent.getTextPageBlock().getClassification()); + parentDepth = getDepth(parent.getHeadline().getClassification()); } parent.addChild(new TableOfContentItem(current)); } @@ -110,12 +110,12 @@ public class OutlineValidationService { } else { assert last != null; - int lastDepth = getDepth(last.getTextPageBlock().getClassification()); + int lastDepth = getDepth(last.getHeadline().getClassification()); if (lastDepth < parentDepth) { parentDepth = lastDepth; } else if (lastDepth == currentDepth && last.getParent() != null) { - parentDepth = getDepth(last.getParent().getTextPageBlock().getClassification()); + parentDepth = getDepth(last.getParent().getHeadline().getClassification()); } TableOfContentItem parent = lastItemsPerDepth.get(parentDepth); diff --git a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/TOCEnrichmentService.java b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/TOCEnrichmentService.java new file mode 100644 index 0000000..f5aa06f --- /dev/null +++ b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/TOCEnrichmentService.java @@ -0,0 +1,266 @@ +package com.knecon.fforesight.service.layoutparser.processor.model.outline; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.knecon.fforesight.service.layoutparser.processor.model.AbstractPageBlock; +import com.knecon.fforesight.service.layoutparser.processor.model.ClassificationDocument; +import com.knecon.fforesight.service.layoutparser.processor.model.ClassificationFooter; +import com.knecon.fforesight.service.layoutparser.processor.model.ClassificationHeader; +import com.knecon.fforesight.service.layoutparser.processor.model.ClassificationPage; +import com.knecon.fforesight.service.layoutparser.processor.model.PageBlockType; +import com.knecon.fforesight.service.layoutparser.processor.model.image.ClassifiedImage; +import com.knecon.fforesight.service.layoutparser.processor.model.table.Cell; +import com.knecon.fforesight.service.layoutparser.processor.model.table.TablePageBlock; +import com.knecon.fforesight.service.layoutparser.processor.model.text.TextPageBlock; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +public class TOCEnrichmentService { + + public void assignSectionBlocksAndImages(ClassificationDocument document) { + + TableOfContents toc = document.getTableOfContents(); + List startBlocks = new ArrayList<>(); + List startImages = new ArrayList<>(); + //Map> sectionsMap = new HashMap<>(); + TableOfContentItem currentSection = null; + boolean foundFirstHeadline = false; + + //for (TableOfContentItem item : toc.getAllTableOfContentItems()) { + // sectionsMap.put(item, new ArrayList<>()); + //} + + List headers = new ArrayList<>(); + List footers = new ArrayList<>(); + TablePageBlock previousTable = null; + List lastFoundTOCItems = new ArrayList<>(); + + for (ClassificationPage page : document.getPages()) { + List currentPageTOCItems = new ArrayList<>(); + List header = new ArrayList<>(); + List footer = new ArrayList<>(); + for (AbstractPageBlock current : page.getTextBlocks()) { + + if (current.getClassification() == null) { + continue; + } + + current.setPage(page.getPageNumber()); + + if (current.getClassification().equals(PageBlockType.HEADER)) { + header.add((TextPageBlock) current); + continue; + } + + if (current.getClassification().equals(PageBlockType.FOOTER)) { + footer.add((TextPageBlock) current); + continue; + } + + if (current instanceof TablePageBlock table) { + if (previousTable != null) { + mergeTableMetadata(table, previousTable); + } + previousTable = table; + } + boolean matched = false; + + for (TableOfContentItem tocItem : toc) { + if (current instanceof TextPageBlock && tocItem.getHeadline().getText().equals(current.getText())) { + if (!foundFirstHeadline) { + foundFirstHeadline = true; + } + currentSection = tocItem; + //sectionsMap.get(tocItem).add(current); + tocItem.getSectionBlocks().add(current); + currentPageTOCItems.add(tocItem); + matched = true; + break; + } + } + + if (!matched) { + if (!foundFirstHeadline) { + startBlocks.add(current); + } else { + currentSection.getSectionBlocks().add(current); + //sectionsMap.get(currentSection).add(current); + } + } + } + + if (!currentPageTOCItems.isEmpty()) { + lastFoundTOCItems = currentPageTOCItems; + } + + for (ClassifiedImage image : page.getImages()) { + + Float xMin = null; + Float yMin = null; + Float xMax = null; + Float yMax = null; + + for (TableOfContentItem tocItem : lastFoundTOCItems) { + var headline = tocItem.getHeadline(); + + if (headline.getPage() != page.getPageNumber()) { + continue; + } + + if (headline.getMinX() < headline.getMaxX()) { + if (xMin == null || headline.getMinX() < xMin) { + xMin = headline.getMinX(); + } + if (xMax == null || headline.getMaxX() > xMax) { + xMax = headline.getMaxX(); + } + } else { + if (xMin == null || headline.getMaxX() < xMin) { + xMin = headline.getMaxX(); + } + if (xMax == null || headline.getMinX() > xMax) { + xMax = headline.getMinX(); + } + } + + if (headline.getMinY() < headline.getMaxY()) { + if (yMin == null || headline.getMinY() < yMin) { + yMin = headline.getMinY(); + } + if (yMax == null || headline.getMaxY() > yMax) { + yMax = headline.getMaxY(); + } + } else { + if (yMin == null || headline.getMaxY() < yMin) { + yMin = headline.getMaxY(); + } + if (yMax == null || headline.getMinY() > yMax) { + yMax = headline.getMinY(); + } + } + + log.debug("Image position x: {}, y: {}", image.getPosition().getX(), image.getPosition().getY()); + log.debug("Headline position xMin: {}, xMax: {}, yMin: {}, yMax: {}", xMin, xMax, yMin, yMax); + + if (image.getPosition().getX() >= xMin && image.getPosition().getX() <= xMax && image.getPosition().getY() >= yMin && image.getPosition().getY() <= yMax) { + tocItem.getImages().add(image); + image.setAppendedToSection(true); + break; + } + } + if (!image.isAppendedToSection()) { + log.debug("Image uses first paragraph"); + if (!lastFoundTOCItems.isEmpty()) { + lastFoundTOCItems.get(0).getImages().add(image); + } else { + startImages.add(image); + } + image.setAppendedToSection(true); + } + } + + if (!header.isEmpty()) { + headers.add(new ClassificationHeader(header)); + } + if (!footer.isEmpty()) { + footers.add(new ClassificationFooter(footer)); + } + } + + if (!startBlocks.isEmpty()) { + TableOfContentItem unassigned = new TableOfContentItem(null); + unassigned.setSectionBlocks(startBlocks); + unassigned.setImages(startImages); + document.getTableOfContents().getMainSections().add(0, unassigned); + } + //document.setSectionsMap(sectionsMap); + document.setHeaders(headers); + document.setFooters(footers); + } + + + private void mergeTableMetadata(TablePageBlock currentTable, TablePageBlock previousTable) { + + // Distribute header information for subsequent tables + if (previousTable != null && hasInvalidHeaderInformation(currentTable) && hasValidHeaderInformation(previousTable)) { + List previousTableNonHeaderRow = getRowWithNonHeaderCells(previousTable); + List tableNonHeaderRow = getRowWithNonHeaderCells(currentTable); + // Allow merging of tables if header row is separated from first logical non-header row + if (previousTableNonHeaderRow.isEmpty() + && previousTable.getRowCount() == 1 + && previousTable.getRows() + .get(0).size() == tableNonHeaderRow.size()) { + previousTableNonHeaderRow = previousTable.getRows() + .get(0) + .stream() + .map(cell -> { + Cell fakeCell = new Cell(cell.getPoints()[0], cell.getPoints()[2]); + fakeCell.setHeaderCells(Collections.singletonList(cell)); + return fakeCell; + }) + .toList(); + } + if (previousTableNonHeaderRow.size() == tableNonHeaderRow.size()) { + for (int i = currentTable.getRowCount() - 1; i >= 0; i--) { // Non header rows are most likely at bottom of table + List row = currentTable.getRows() + .get(i); + if (row.size() == tableNonHeaderRow.size() && row.stream() + .allMatch(cell -> cell.getHeaderCells().isEmpty())) { + for (int j = 0; j < row.size(); j++) { + row.get(j).setHeaderCells(previousTableNonHeaderRow.get(j).getHeaderCells()); + } + } + } + } + } + } + + + private boolean hasValidHeaderInformation(TablePageBlock table) { + + return !hasInvalidHeaderInformation(table); + } + + + private boolean hasInvalidHeaderInformation(TablePageBlock table) { + + return table.getRows() + .stream() + .flatMap(row -> row.stream() + .filter(cell -> !cell.getHeaderCells().isEmpty())) + .findAny().isEmpty(); + + } + + + private List getRowWithNonHeaderCells(TablePageBlock table) { + + for (int i = table.getRowCount() - 1; i >= 0; i--) { // Non header rows are most likely at bottom of table + List row = table.getRows() + .get(i); + if (row.size() == 1) { + continue; + } + boolean allNonHeader = true; + for (Cell cell : row) { + if (cell.isHeaderCell()) { + allNonHeader = false; + break; + } + } + if (allNonHeader) { + return row; + } + } + + return Collections.emptyList(); + + } + +} diff --git a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/TableOfContentItem.java b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/TableOfContentItem.java index 2d57844..bbbbeac 100644 --- a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/TableOfContentItem.java +++ b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/TableOfContentItem.java @@ -1,9 +1,13 @@ package com.knecon.fforesight.service.layoutparser.processor.model.outline; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.stream.Collectors; -import com.knecon.fforesight.service.layoutparser.processor.model.table.TablePageBlock; +import com.knecon.fforesight.service.layoutparser.processor.model.AbstractPageBlock; +import com.knecon.fforesight.service.layoutparser.processor.model.graph.nodes.Section; +import com.knecon.fforesight.service.layoutparser.processor.model.image.ClassifiedImage; import com.knecon.fforesight.service.layoutparser.processor.model.text.TextPageBlock; import lombok.Data; @@ -14,14 +18,19 @@ import lombok.EqualsAndHashCode; public class TableOfContentItem { @EqualsAndHashCode.Include - private TextPageBlock textPageBlock; + private TextPageBlock headline; private List children = new ArrayList<>(); private TableOfContentItem parent; + private List sectionBlocks = new ArrayList<>(); + private List images = new ArrayList<>(); - public TableOfContentItem(TextPageBlock textPageBlock) { + private Section section; - this.textPageBlock = textPageBlock; + + public TableOfContentItem(TextPageBlock headline) { + + this.headline = headline; } @@ -34,60 +43,68 @@ public class TableOfContentItem { public TableOfContentItem getSiblingBefore() { - try { - return parent.getChildren() - .get(parent.getChildren().indexOf(this) - 1); - } catch (IndexOutOfBoundsException indexOutOfBoundsException) { - return null; + if (parent != null) { + int index = parent.getChildren().indexOf(this); + if (index > 0) { + return parent.getChildren() + .get(index - 1); + } } + return null; } + + public TableOfContentItem getSiblingAfter() { - try { - return parent.getChildren() - .get(parent.getChildren().indexOf(this) + 1); - } catch (IndexOutOfBoundsException indexOutOfBoundsException) { - return null; + if (parent != null) { + int index = parent.getChildren().indexOf(this); + if (index >= 0 && index < parent.getChildren().size() - 1) { + return parent.getChildren() + .get(index + 1); + } } + return null; } public boolean contains(TextPageBlock block) { - boolean anyChildContains = false; - if (!children.isEmpty()) { - for (TableOfContentItem child : children) { - if (child.getTextPageBlock().equals(block)) { - return true; - } else { - anyChildContains = anyChildContains || child.contains(block); - } + if (headline.equals(block)) { + return true; + } + for (TableOfContentItem child : children) { + if (child.contains(block)) { + return true; } } - return anyChildContains; + return false; } public boolean contains(TableOfContentItem tocItem) { - boolean anyChildContains = false; - if (!children.isEmpty()) { - for (TableOfContentItem child : children) { - if (child.equals(tocItem)) { - return true; - } else { - anyChildContains = anyChildContains || child.contains(tocItem); - } + if (this.equals(tocItem)) { + return true; + } + for (TableOfContentItem child : children) { + if (child.contains(tocItem)) { + return true; } } - return anyChildContains; + return false; } + public List getNonEmptySectionBlocks() { + + return sectionBlocks.stream().filter(pageBlock -> !pageBlock.isEmpty()).collect(Collectors.toList()); + } @Override public String toString() { - return "OutlineObjectTreeNode{" + "textPageBlock=" + textPageBlock + '}'; + return "OutlineObjectTreeNode{" + "textPageBlock=" + headline + '}'; } + + } diff --git a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/TableOfContents.java b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/TableOfContents.java index bcffa89..769e5ac 100644 --- a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/TableOfContents.java +++ b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/model/outline/TableOfContents.java @@ -1,9 +1,11 @@ package com.knecon.fforesight.service.layoutparser.processor.model.outline; import java.util.ArrayList; -import java.util.HashMap; +import java.util.Iterator; import java.util.List; -import java.util.Map; +import java.util.Stack; + +import org.springframework.lang.NonNull; import com.knecon.fforesight.service.layoutparser.processor.model.text.TextPageBlock; @@ -12,7 +14,7 @@ import lombok.RequiredArgsConstructor; @Data @RequiredArgsConstructor -public class TableOfContents { +public class TableOfContents implements Iterable { private List mainSections = new ArrayList<>(); @@ -35,7 +37,7 @@ public class TableOfContents { private void collectTextPageBlocks(TableOfContentItem item, List textPageBlocks) { - textPageBlocks.add(item.getTextPageBlock()); + textPageBlocks.add(item.getHeadline()); for (TableOfContentItem child : item.getChildren()) { collectTextPageBlocks(child, textPageBlocks); } @@ -56,4 +58,40 @@ public class TableOfContents { } } + + @Override + public @NonNull Iterator iterator() { + + return new TableOfContentItemIterator(mainSections); + } + + private static class TableOfContentItemIterator implements Iterator { + private final Stack> stack = new Stack<>(); + + public TableOfContentItemIterator(List mainSections) { + stack.push(mainSections.iterator()); + } + + @Override + public boolean hasNext() { + ensureStackTopIsCurrent(); + return !stack.isEmpty() && stack.peek().hasNext(); + } + + @Override + public TableOfContentItem next() { + ensureStackTopIsCurrent(); + TableOfContentItem currentItem = stack.peek().next(); + if (currentItem.getChildren() != null && !currentItem.getChildren().isEmpty()) { + stack.push(currentItem.getChildren().iterator()); + } + return currentItem; + } + + private void ensureStackTopIsCurrent() { + while (!stack.isEmpty() && !stack.peek().hasNext()) { + stack.pop(); + } + } + } } diff --git a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/SectionsBuilderService.java b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/SectionsBuilderService.java index fec1b29..a0e9267 100644 --- a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/SectionsBuilderService.java +++ b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/SectionsBuilderService.java @@ -29,6 +29,7 @@ import lombok.extern.slf4j.Slf4j; @Service public class SectionsBuilderService { + public void buildSections(ClassificationDocument document) { List chunkWords = new ArrayList<>(); @@ -71,7 +72,8 @@ public class SectionsBuilderService { chunkBlockList.add(chunkBlock); chunkWords = new ArrayList<>(); if (!chunkBlock.getTables().isEmpty()) { - previousTable = chunkBlock.getTables().get(chunkBlock.getTables().size() - 1); + previousTable = chunkBlock.getTables() + .get(chunkBlock.getTables().size() - 1); } } if (current instanceof TablePageBlock table) { @@ -106,11 +108,12 @@ public class SectionsBuilderService { List sections = new ArrayList<>(); for (var page : document.getPages()) { - page.getTextBlocks().forEach(block -> { - block.setPage(page.getPageNumber()); - var section = buildTextBlock(List.of(block), Strings.EMPTY); - sections.add(section); - }); + page.getTextBlocks() + .forEach(block -> { + block.setPage(page.getPageNumber()); + var section = buildTextBlock(List.of(block), Strings.EMPTY); + sections.add(section); + }); } document.setSections(sections); } @@ -202,8 +205,14 @@ public class SectionsBuilderService { log.debug("Image position x: {}, y: {}", image.getPosition().getX(), image.getPosition().getY()); log.debug("Paragraph position xMin: {}, xMax: {}, yMin: {}, yMax: {}", xMin, xMax, yMin, yMax); - if (xMin != null && xMax != null && yMin != null && yMax != null && image.getPosition().getX() >= xMin && image.getPosition() - .getX() <= xMax && image.getPosition().getY() >= yMin && image.getPosition().getY() <= yMax) { + if (xMin != null + && xMax != null + && yMin != null + && yMax != null + && image.getPosition().getX() >= xMin + && image.getPosition().getX() <= xMax + && image.getPosition().getY() >= yMin + && image.getPosition().getY() <= yMax) { section.getImages().add(image); image.setAppendedToSection(true); break; @@ -226,17 +235,26 @@ public class SectionsBuilderService { List previousTableNonHeaderRow = getRowWithNonHeaderCells(previousTable); List tableNonHeaderRow = getRowWithNonHeaderCells(currentTable); // Allow merging of tables if header row is separated from first logical non-header row - if (previousTableNonHeaderRow.isEmpty() && previousTable.getRowCount() == 1 && previousTable.getRows().get(0).size() == tableNonHeaderRow.size()) { - previousTableNonHeaderRow = previousTable.getRows().get(0).stream().map(cell -> { - Cell fakeCell = new Cell(cell.getPoints()[0], cell.getPoints()[2]); - fakeCell.setHeaderCells(Collections.singletonList(cell)); - return fakeCell; - }).collect(Collectors.toList()); + if (previousTableNonHeaderRow.isEmpty() + && previousTable.getRowCount() == 1 + && previousTable.getRows() + .get(0).size() == tableNonHeaderRow.size()) { + previousTableNonHeaderRow = previousTable.getRows() + .get(0) + .stream() + .map(cell -> { + Cell fakeCell = new Cell(cell.getPoints()[0], cell.getPoints()[2]); + fakeCell.setHeaderCells(Collections.singletonList(cell)); + return fakeCell; + }) + .collect(Collectors.toList()); } if (previousTableNonHeaderRow.size() == tableNonHeaderRow.size()) { for (int i = currentTable.getRowCount() - 1; i >= 0; i--) { // Non header rows are most likely at bottom of table - List row = currentTable.getRows().get(i); - if (row.size() == tableNonHeaderRow.size() && row.stream().allMatch(cell -> cell.getHeaderCells().isEmpty())) { + List row = currentTable.getRows() + .get(i); + if (row.size() == tableNonHeaderRow.size() && row.stream() + .allMatch(cell -> cell.getHeaderCells().isEmpty())) { for (int j = 0; j < row.size(); j++) { row.get(j).setHeaderCells(previousTableNonHeaderRow.get(j).getHeaderCells()); } @@ -279,7 +297,11 @@ public class SectionsBuilderService { private boolean hasInvalidHeaderInformation(TablePageBlock table) { - return table.getRows().stream().flatMap(row -> row.stream().filter(cell -> !cell.getHeaderCells().isEmpty())).findAny().isEmpty(); + return table.getRows() + .stream() + .flatMap(row -> row.stream() + .filter(cell -> !cell.getHeaderCells().isEmpty())) + .findAny().isEmpty(); } @@ -287,7 +309,8 @@ public class SectionsBuilderService { private List getRowWithNonHeaderCells(TablePageBlock table) { for (int i = table.getRowCount() - 1; i >= 0; i--) { // Non header rows are most likely at bottom of table - List row = table.getRows().get(i); + List row = table.getRows() + .get(i); if (row.size() == 1) { continue; } diff --git a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/factory/DocumentGraphFactory.java b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/factory/DocumentGraphFactory.java index 1481776..8b21ec0 100644 --- a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/factory/DocumentGraphFactory.java +++ b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/factory/DocumentGraphFactory.java @@ -12,6 +12,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -35,6 +36,7 @@ import com.knecon.fforesight.service.layoutparser.processor.model.graph.nodes.Pa import com.knecon.fforesight.service.layoutparser.processor.model.graph.nodes.Section; import com.knecon.fforesight.service.layoutparser.processor.model.graph.textblock.AtomicTextBlock; import com.knecon.fforesight.service.layoutparser.processor.model.image.ClassifiedImage; +import com.knecon.fforesight.service.layoutparser.processor.model.outline.TableOfContentItem; import com.knecon.fforesight.service.layoutparser.processor.model.text.TextPageBlock; import com.knecon.fforesight.service.layoutparser.processor.utils.IdBuilder; import com.knecon.fforesight.service.layoutparser.processor.utils.TextPositionOperations; @@ -74,8 +76,14 @@ public class DocumentGraphFactory { private void addSections(LayoutParsingType layoutParsingType, ClassificationDocument classificationDocument, Context context, Document document) { - classificationDocument.getSections() - .forEach(section -> SectionNodeFactory.addSection(layoutParsingType, null, section.getNonEmptyPageBlocks(), section.getImages(), context, document)); + //classificationDocument.getSections() + // .forEach(section -> SectionNodeFactory.addSection(layoutParsingType, null, section.getNonEmptyPageBlocks(), section.getImages(), context, document)); + + for (TableOfContentItem tocItem : classificationDocument.getTableOfContents()) { + var parent = tocItem.getParent() == null ? null : tocItem.getParent().getSection(); + Optional
section = SectionNodeFactory.addSection(layoutParsingType, parent, tocItem.getNonEmptySectionBlocks(), tocItem.getImages(), context, document); + tocItem.setSection(section.orElse(null)); + } } @@ -85,14 +93,11 @@ public class DocumentGraphFactory { GenericSemanticNode node; if (originalTextBlock.isHeadline()) { - node = Headline.builder().documentTree(context.getDocumentTree()) - .build(); + node = Headline.builder().documentTree(context.getDocumentTree()).build(); } else if (originalTextBlock.isToDuplicate()) { - node = DuplicatedParagraph.builder().documentTree(context.getDocumentTree()) - .build(); + node = DuplicatedParagraph.builder().documentTree(context.getDocumentTree()).build(); } else { - node = Paragraph.builder().documentTree(context.getDocumentTree()) - .build(); + node = Paragraph.builder().documentTree(context.getDocumentTree()).build(); } page.getMainBody().add(node); @@ -178,12 +183,8 @@ public class DocumentGraphFactory { private void addFooter(List textBlocks, Context context) { Page page = context.getPage(textBlocks.get(0).getPage()); - Footer footer = Footer.builder().documentTree(context.getDocumentTree()) - .build(); - AtomicTextBlock textBlock = context.textBlockFactory.buildAtomicTextBlock(TextPositionOperations.mergeTextPositionSequence(textBlocks), - footer, - context, - page); + Footer footer = Footer.builder().documentTree(context.getDocumentTree()).build(); + AtomicTextBlock textBlock = context.textBlockFactory.buildAtomicTextBlock(TextPositionOperations.mergeTextPositionSequence(textBlocks), footer, context, page); List tocId = context.getDocumentTree().createNewMainEntryAndReturnId(footer); footer.setTreeId(tocId); footer.setLeafTextBlock(textBlock); @@ -194,8 +195,7 @@ public class DocumentGraphFactory { public void addHeader(List textBlocks, Context context) { Page page = context.getPage(textBlocks.get(0).getPage()); - Header header = Header.builder().documentTree(context.getDocumentTree()) - .build(); + Header header = Header.builder().documentTree(context.getDocumentTree()).build(); AtomicTextBlock textBlock = context.textBlockFactory.buildAtomicTextBlock(TextPositionOperations.mergeTextPositionSequence(textBlocks), header, 0, page); List tocId = context.getDocumentTree().createNewMainEntryAndReturnId(header); header.setTreeId(tocId); @@ -207,8 +207,7 @@ public class DocumentGraphFactory { private void addEmptyFooter(int pageIndex, Context context) { Page page = context.getPage(pageIndex); - Footer footer = Footer.builder().documentTree(context.getDocumentTree()) - .build(); + Footer footer = Footer.builder().documentTree(context.getDocumentTree()).build(); AtomicTextBlock textBlock = context.textBlockFactory.emptyTextBlock(footer, context, page); List tocId = context.getDocumentTree().createNewMainEntryAndReturnId(footer); footer.setTreeId(tocId); @@ -220,8 +219,7 @@ public class DocumentGraphFactory { private void addEmptyHeader(int pageIndex, Context context) { Page page = context.getPage(pageIndex); - Header header = Header.builder().documentTree(context.getDocumentTree()) - .build(); + Header header = Header.builder().documentTree(context.getDocumentTree()).build(); AtomicTextBlock textBlock = context.textBlockFactory.emptyTextBlock(header, 0, page); List tocId = context.getDocumentTree().createNewMainEntryAndReturnId(header); header.setTreeId(tocId); diff --git a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/factory/SectionNodeFactory.java b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/factory/SectionNodeFactory.java index f4b26eb..90b2e8a 100644 --- a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/factory/SectionNodeFactory.java +++ b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/factory/SectionNodeFactory.java @@ -9,6 +9,7 @@ import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType; @@ -27,12 +28,12 @@ import lombok.experimental.UtilityClass; @UtilityClass public class SectionNodeFactory { - public void addSection(LayoutParsingType layoutParsingType, - GenericSemanticNode parentNode, - List pageBlocks, - List images, - DocumentGraphFactory.Context context, - Document document) { + public Optional
addSection(LayoutParsingType layoutParsingType, + GenericSemanticNode parentNode, + List pageBlocks, + List images, + DocumentGraphFactory.Context context, + Document document) { // This is for the case where we have images on a page without any text/footer/header. // The pageBlocks list is empty, but we still need to add those images to the document. @@ -40,11 +41,11 @@ public class SectionNodeFactory { images.stream() .distinct() .forEach(image -> DocumentGraphFactory.addImage(document, image, context)); - return; + return Optional.empty(); } if (pageBlocks.isEmpty()) { - return; + return Optional.empty(); } Map> blocksPerPage = pageBlocks.stream() @@ -73,6 +74,8 @@ public class SectionNodeFactory { images.stream() .distinct() .forEach(image -> DocumentGraphFactory.addImage(section, image, context)); + + return Optional.of(section); } diff --git a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/ViewerDocumentTest.java b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/ViewerDocumentTest.java index 81cebbf..e9a091e 100644 --- a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/ViewerDocumentTest.java +++ b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/ViewerDocumentTest.java @@ -32,10 +32,10 @@ public class ViewerDocumentTest extends BuildDocumentTest { //String fileName = "files/new/abschlussarbeiten-template-institut-fur-informatik-padagogische-hochschule-karlsruhe.pdf"; //String fileName = "files/new/kaust-official-thesis-template.pdf"; //String fileName = "files/new/$100m Offers.pdf"; - //String fileName = "files/new/18-Curacron_ToxicidadeOcularInVitro.pdf"; - String fileName = "files/new/UTT-Books-53.pdf"; + String fileName = "files/new/18-Curacron_ToxicidadeOcularInVitro.pdf"; //String fileName = "files/new/mistitled_outlines_example.pdf"; //String fileName = "files/bdr/Plenarprotokoll 1 (keine Druchsache!) (1) 1.pdf"; + //String fileName = "files/new/UTT-Books-53.pdf"; String tmpFileName = "/tmp/" + Path.of(fileName).getFileName() + "_VIEWER.pdf"; var documentFile = new ClassPathResource(fileName).getFile(); @@ -48,6 +48,32 @@ public class ViewerDocumentTest extends BuildDocumentTest { System.out.printf("Total time: %.2fs%n", ((float) (System.currentTimeMillis() - start)) / 1000); } + @Test + @SneakyThrows + public void testViewerDocumentWithImages() { + + String fileName = "files/new/UTT-Books-53.pdf"; + Path path = Path.of(fileName); + String tmpFileName = "/tmp/" + path.getFileName() + "_VIEWER.pdf"; + String imageFileName = "files/images/test_outlines.IMAGE_INFO.json"; + + var mapper = ObjectMapperFactory.create(); + var imageServiceResponse = mapper.readValue(new ClassPathResource(imageFileName).getInputStream(), ImageServiceResponse.class); + var documentFile = new ClassPathResource(fileName).getFile(); + + var classificationDocument = layoutParsingPipeline.parseLayout(LayoutParsingType.REDACT_MANAGER, + documentFile, + imageServiceResponse, + new TableServiceResponse(), + new VisualLayoutParsingResponse(), + Map.of("file", path.getFileName().toFile().toString())); + ViewerDocumentService viewerDocumentService = new ViewerDocumentService(null); + LayoutGridService layoutGridService = new LayoutGridService(viewerDocumentService); + Document document = DocumentGraphFactory.buildDocumentGraph(LayoutParsingType.REDACT_MANAGER, classificationDocument); + + layoutGridService.addLayoutGrid(documentFile, document, new File(tmpFileName), true); + } + @Test @Disabled @@ -56,7 +82,8 @@ public class ViewerDocumentTest extends BuildDocumentTest { String fileName = "files/cv_tables/brokenTablesOnOcr_ocred.pdf"; String tableFileName = "files/cv_tables/brokenTablesOnOcr_ocred.TABLES.json"; - String tmpFileName = "/tmp/" + Path.of(fileName).getFileName() + "_VIEWER.pdf"; + Path path = Path.of(fileName); + String tmpFileName = "/tmp/" + path.getFileName() + "_VIEWER.pdf"; var mapper = ObjectMapperFactory.create(); var tableResponse = mapper.readValue(new ClassPathResource(tableFileName).getInputStream(), TableServiceResponse.class); @@ -67,7 +94,7 @@ public class ViewerDocumentTest extends BuildDocumentTest { new ImageServiceResponse(), tableResponse, new VisualLayoutParsingResponse(), - Map.of("file", Path.of(fileName).getFileName().toFile().toString())); + Map.of("file", path.getFileName().toFile().toString())); ViewerDocumentService viewerDocumentService = new ViewerDocumentService(null); LayoutGridService layoutGridService = new LayoutGridService(viewerDocumentService); Document document = DocumentGraphFactory.buildDocumentGraph(LayoutParsingType.DOCUMINE, classificationDocument); diff --git a/layoutparser-service/layoutparser-service-server/src/test/resources/files/new/UTT-Books-53.pdf b/layoutparser-service/layoutparser-service-server/src/test/resources/files/new/UTT-Books-53.pdf index c56e8ac93cb997041d7504e5fa624ee85c31ae0b..1626c3f0731cb6ba383ef2cfc967bab8675c9677 100644 GIT binary patch delta 62267 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
2q-C
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
S&M=l?7=rjR2Zy}6!v6u_nQ6lS