From d48e69816700715c3c2b471b503c90af593d0c2f Mon Sep 17 00:00:00 2001 From: Andrei Isvoran Date: Thu, 28 Mar 2024 16:01:05 +0200 Subject: [PATCH 1/2] RED-8828 - Fix error when resizing dict based redaction --- .../document/EntityCreationService.java | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java index 99e8b6a7..98072eef 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java @@ -664,6 +664,8 @@ public class EntityCreationService { addEntityToGraph(mergedEntity, node); insertToKieSession(mergedEntity); + + entitiesToMerge.stream().filter(e -> !e.equals(mergedEntity)).forEach(node.getEntities()::remove); return mergedEntity; } @@ -746,26 +748,39 @@ public class EntityCreationService { DocumentTree documentTree = node.getDocumentTree(); try { if (node.getEntities().contains(entity)) { - // If entity already exists and it has a different text range, we add the text range to the list of duplicated text ranges - node.getEntities().stream()// - .filter(e -> e.equals(entity))// - .filter(e -> !e.getTextRange().equals(entity.getTextRange()))// - .findAny()// - .ifPresent(entityToDuplicate -> addDuplicateEntityToGraph(entityToDuplicate, entity.getTextRange(), node)); + // If entity already exists but is missing textBefore/textAfter re-add it and enrich the entity with the missing values + if (entity.getTextBefore() == null || entity.getTextAfter() == null) { + node.getEntities().remove(entity); + addNewEntityToGraph(entity, documentTree); + } else { + // If entity already exists and it has a different text range, we add the text range to the list of duplicated text ranges + node.getEntities() + .stream()// + .filter(e -> e.equals(entity))// + .filter(e -> !e.getTextRange().equals(entity.getTextRange()))// + .findAny()// + .ifPresent(entityToDuplicate -> addDuplicateEntityToGraph(entityToDuplicate, entity.getTextRange(), node)); + } } else { entity.addIntersectingNode(documentTree.getRoot().getNode()); addEntityToGraph(entity, documentTree); } } catch (NoSuchElementException e) { - entity.setDeepestFullyContainingNode(documentTree.getRoot().getNode()); - entityEnrichmentService.enrichEntity(entity, entity.getDeepestFullyContainingNode().getTextBlock()); - entity.addIntersectingNode(documentTree.getRoot().getNode()); - addToPages(entity); - addEntityToNodeEntitySets(entity); + addNewEntityToGraph(entity, documentTree); } } + private void addNewEntityToGraph(TextEntity entity, DocumentTree documentTree) { + + entity.setDeepestFullyContainingNode(documentTree.getRoot().getNode()); + entityEnrichmentService.enrichEntity(entity, entity.getDeepestFullyContainingNode().getTextBlock()); + entity.addIntersectingNode(documentTree.getRoot().getNode()); + addToPages(entity); + addEntityToNodeEntitySets(entity); + } + + private void addDuplicateEntityToGraph(TextEntity entityToDuplicate, TextRange newTextRange, SemanticNode node) { entityToDuplicate.addTextRange(newTextRange); -- 2.47.2 From b9553e1f8d63fe6e1c41f7f016685131c84a57d6 Mon Sep 17 00:00:00 2001 From: Andrei Isvoran Date: Thu, 28 Mar 2024 17:21:03 +0200 Subject: [PATCH 2/2] RED-8828 - Fix error when resizing dict based redaction --- .../document/EntityCreationService.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java index 98072eef..b7a09411 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java @@ -748,19 +748,19 @@ public class EntityCreationService { DocumentTree documentTree = node.getDocumentTree(); try { if (node.getEntities().contains(entity)) { - // If entity already exists but is missing textBefore/textAfter re-add it and enrich the entity with the missing values - if (entity.getTextBefore() == null || entity.getTextAfter() == null) { + // If entity already exists and it has a different text range, we add the text range to the list of duplicated text ranges + Optional optionalTextEntity = node.getEntities() + .stream()// + .filter(e -> e.equals(entity))// + .filter(e -> !e.getTextRange().equals(entity.getTextRange()))// + .findAny(); + if (optionalTextEntity.isPresent()) { + addDuplicateEntityToGraph(optionalTextEntity.get(), entity.getTextRange(), node); + } else { node.getEntities().remove(entity); addNewEntityToGraph(entity, documentTree); - } else { - // If entity already exists and it has a different text range, we add the text range to the list of duplicated text ranges - node.getEntities() - .stream()// - .filter(e -> e.equals(entity))// - .filter(e -> !e.getTextRange().equals(entity.getTextRange()))// - .findAny()// - .ifPresent(entityToDuplicate -> addDuplicateEntityToGraph(entityToDuplicate, entity.getTextRange(), node)); } + } else { entity.addIntersectingNode(documentTree.getRoot().getNode()); addEntityToGraph(entity, documentTree); -- 2.47.2