From 6db3ca0968426725e3a61139650d258f0fa1c97d Mon Sep 17 00:00:00 2001 From: Andrei Isvoran Date: Tue, 8 Aug 2023 16:32:51 +0300 Subject: [PATCH] DM-357 - Save manual redactions for which we did not find an exact match --- .../adapter/CustomEntityCreationAdapter.java | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/CustomEntityCreationAdapter.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/CustomEntityCreationAdapter.java index 02ea1556..a4e12c64 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/CustomEntityCreationAdapter.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/CustomEntityCreationAdapter.java @@ -47,25 +47,25 @@ public class CustomEntityCreationAdapter { } - public List toRedactionEntity(RedactionLog redactionLog, SemanticNode node) { + public void toRedactionEntity(RedactionLog redactionLog, SemanticNode node) { List entityIdentifiers = redactionLog.getRedactionLogEntry().stream().map(EntityIdentifier::fromRedactionLogEntry).toList(); - return toRedactionEntity(entityIdentifiers, node); + toRedactionEntity(entityIdentifiers, node); } - public List createRedactionEntities(Set manualRedactionEntries, SemanticNode node) { + public void createRedactionEntities(Set manualRedactionEntries, SemanticNode node) { List entityIdentifiers = manualRedactionEntries.stream() .filter(manualRedactionEntry -> !(manualRedactionEntry.isAddToDictionary() || manualRedactionEntry.isAddToDossierDictionary())) .map(EntityIdentifier::fromManualRedactionEntry) .toList(); - return toRedactionEntity(entityIdentifiers, node); + toRedactionEntity(entityIdentifiers, node); } - private List toRedactionEntity(List entityIdentifiers, SemanticNode node) { + private void toRedactionEntity(List entityIdentifiers, SemanticNode node) { Set pageNumbers = entityIdentifiers.stream().flatMap(entry -> entry.entityPosition().stream().map(RectangleWithPage::pageNumber)).collect(Collectors.toSet()); Set entryValues = entityIdentifiers.stream().map(EntityIdentifier::value).map(String::toLowerCase).collect(Collectors.toSet()); @@ -73,15 +73,14 @@ public class CustomEntityCreationAdapter { Map> tempEntitiesByValue = findAllPossibleEntitiesAndGroupByValue(node, pageNumbers, entryValues); assert allValuesFound(tempEntitiesByValue, entryValues); - List correctEntities = entityIdentifiers.stream() - .map(entityIdentifier -> findClosestEntity(entityIdentifier, tempEntitiesByValue).map(tempEntity -> createCorrectEntity(entityIdentifier, - node, - tempEntity.getBoundary()))) - .filter(Optional::isPresent) - .map(Optional::get) - .toList(); + entityIdentifiers.forEach(entityIdentifier -> { + findClosestEntity(entityIdentifier, tempEntitiesByValue) + .ifPresent(entities -> entities.forEach(redactionEntity -> { + createCorrectEntity(entityIdentifier, node, redactionEntity.getBoundary()); + })); + }); + tempEntitiesByValue.values().stream().flatMap(Collection::stream).forEach(RedactionEntity::removeFromGraph); - return correctEntities; } @@ -91,9 +90,8 @@ public class CustomEntityCreationAdapter { * @param entityIdentifier The entity identifier for the RedactionEntity. * @param node The SemanticNode associated with the RedactionEntity. * @param closestBoundary The closest Boundary to the RedactionEntity. - * @return The created correct RedactionEntity. */ - private RedactionEntity createCorrectEntity(EntityIdentifier entityIdentifier, SemanticNode node, Boundary closestBoundary) { + private void createCorrectEntity(EntityIdentifier entityIdentifier, SemanticNode node, Boundary closestBoundary) { RedactionEntity correctEntity = entityCreationService.forceByBoundary(closestBoundary, entityIdentifier.type(), entityIdentifier.entityType, node); @@ -104,11 +102,10 @@ public class CustomEntityCreationAdapter { } correctEntity.setDictionaryEntry(entityIdentifier.isDictionaryEntry()); correctEntity.setDossierDictionaryEntry(entityIdentifier.isDossierDictionaryEntry()); - return correctEntity; } - private Optional findClosestEntity(EntityIdentifier identifier, Map> entitiesWithSameValue) { + private Optional> findClosestEntity(EntityIdentifier identifier, Map> entitiesWithSameValue) { List possibleEntities = entitiesWithSameValue.get(identifier.value().toLowerCase(Locale.ROOT)); @@ -123,7 +120,7 @@ public class CustomEntityCreationAdapter { if (optionalClosestEntity.isEmpty()) { log.warn("No Entity with value {} found on page {}", identifier.value(), identifier.entityPosition()); - return optionalClosestEntity; + return Optional.of(possibleEntities); } RedactionEntity closestEntity = optionalClosestEntity.get(); @@ -134,10 +131,10 @@ public class CustomEntityCreationAdapter { MATCH_THRESHOLD, identifier.entityPosition(), closestEntity.getRedactionPositionsPerPage())); - return Optional.empty(); + return Optional.of(possibleEntities); } - return Optional.of(closestEntity); + return Optional.of(List.of(closestEntity)); } -- 2.47.2