From 26da18fb26d22671173fdead185905055c5d38c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kilian=20Sch=C3=BCttler?= Date: Fri, 4 Aug 2023 10:19:13 +0200 Subject: [PATCH] CYB-001: cyberport custom --- .../server/document/graph/nodes/SemanticNode.java | 15 +++++++++++++++ .../document/services/EntityCreationService.java | 12 +++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/SemanticNode.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/SemanticNode.java index 6d398921..22ffaac8 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/SemanticNode.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/SemanticNode.java @@ -424,6 +424,21 @@ public interface SemanticNode { } + /** + * Checks whether this SemanticNode intersects the provided rectangle + * @param x the lower left corner X value + * @param y the lower left corner Y value + * @param w width + * @param h height + * @param pageNumber the pagenumber of the rectangle + * @return true if intersects, false otherwise + */ + default boolean intersectsRectangle(int x, int y, int w, int h, int pageNumber) { + + return getBBox().entrySet().stream().filter(entry -> entry.getKey().getNumber() == pageNumber).map(Map.Entry::getValue).anyMatch(rect -> rect.intersects(x, y, w, h)); + } + + /** * This function is used during insertion of EntityNodes into the graph, it checks if the boundary of the RedactionEntity intersects or even contains the RedactionEntity. * It sets the fields accordingly and recursively calls this function on all its children. diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/EntityCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/EntityCreationService.java index acd0c68b..cc8a25cc 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/EntityCreationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/EntityCreationService.java @@ -1,8 +1,6 @@ package com.iqser.red.service.redaction.v1.server.document.services; -import static com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility.anyMatch; import static com.iqser.red.service.redaction.v1.server.redaction.utils.SeparatorUtils.boundaryIsSurroundedBySeparators; -import static java.util.stream.Collectors.toMap; import java.util.Collection; import java.util.Collections; @@ -21,6 +19,7 @@ import org.kie.api.runtime.KieSession; import com.google.common.base.Functions; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Engine; import com.iqser.red.service.redaction.v1.server.document.graph.Boundary; +import com.iqser.red.service.redaction.v1.server.document.graph.ConsecutiveBoundaryCollector; import com.iqser.red.service.redaction.v1.server.document.graph.DocumentTree; import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; import com.iqser.red.service.redaction.v1.server.document.graph.entity.RedactionEntity; @@ -33,7 +32,6 @@ import com.iqser.red.service.redaction.v1.server.document.graph.nodes.TableCell; import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; import com.iqser.red.service.redaction.v1.server.document.utils.RectangleTransformations; import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility; -import com.iqser.red.service.redaction.v1.server.document.graph.ConsecutiveBoundaryCollector; import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntities; import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntitiesAdapter; import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.SearchImplementation; @@ -431,6 +429,14 @@ public class EntityCreationService { .map(Optional::get); } + public Optional semanticNodeAfterString(String string, String type, EntityType entityType, SemanticNode node) { + + if (!node.containsString(string)) { + return Optional.empty(); + } + Boundary boundary = new Boundary(node.getTextBlock().indexOf(string) + string.length(), node.getBoundary().end()); + return byBoundary(boundary, type, entityType, node); + } public Optional bySemanticNode(SemanticNode node, String type, EntityType entityType) {