From dfd262e9e1902b4a94d075225bb0a3eb3809dc4c Mon Sep 17 00:00:00 2001 From: Corina Olariu Date: Thu, 21 Nov 2024 10:20:44 +0100 Subject: [PATCH] =?UTF-8?q?RED-10046=20The=20punctuation=20mark=20?= =?UTF-8?q?=E2=80=9C.=E2=80=9D=20should=20be=20treated=20as=20a=20word=20b?= =?UTF-8?q?oundary=20when...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v1/server/utils/SeparatorUtils.java | 1 + .../graph/SearchImplementationTest.java | 12 ++++++++++++ .../manualchanges/PrecursorEntityTest.java | 11 +++++++++++ .../test/resources/drools/acceptance_rules.drl | 2 +- .../drools/all_redact_manager_rules.drl | 2 +- .../src/test/resources/drools/rules.drl | 2 +- .../files/Minimal Examples/TestPunctuation.pdf | Bin 0 -> 17834 bytes .../main/resources/all_redact_manager_rules.drl | 2 +- 8 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 redaction-service-v1/redaction-service-server-v1/src/test/resources/files/Minimal Examples/TestPunctuation.pdf diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/SeparatorUtils.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/SeparatorUtils.java index 391a98aa..7e525a8c 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/SeparatorUtils.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/SeparatorUtils.java @@ -55,6 +55,7 @@ public final class SeparatorUtils { return textRange.end() == textBlock.getTextRange().end() ||// SeparatorUtils.isSeparator(textBlock.charAt(textRange.end())) ||// + SeparatorUtils.isSeparator(textBlock.charAt(textRange.end() - 1)) ||// SeparatorUtils.isJapaneseSeparator(textBlock.charAt(textRange.end() - 1)); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/SearchImplementationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/SearchImplementationTest.java index 283fd487..a98865ae 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/SearchImplementationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/SearchImplementationTest.java @@ -20,6 +20,18 @@ public class SearchImplementationTest extends BuildDocumentIntegrationTest { private EntityEnrichmentService entityEnrichmentService; + @Test + public void testSearchImplementationWithPunctuation() { + + Document document = buildGraph("files/Minimal Examples/TestPunctuation"); + + SearchImplementation searchImplementation = new SearchImplementation(List.of("Kuhn, J. O."), true); + EntityCreationService entityCreationService = new EntityCreationService(entityEnrichmentService); + List entities = entityCreationService.bySearchImplementation(searchImplementation, "CBI_author", EntityType.ENTITY, document) + .toList(); + assertEquals(2, entities.size()); + } + @Test public void testSearchImplementationWithSingleEntry() { diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/PrecursorEntityTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/PrecursorEntityTest.java index 9a3f8dba..212f5ae9 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/PrecursorEntityTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/PrecursorEntityTest.java @@ -100,6 +100,17 @@ public class PrecursorEntityTest extends BuildDocumentIntegrationTest { assertTrue(context.entity().removed()); } + @Test + public void createFoundManualRedaction2() { + + Document document = buildGraph("files/Minimal Examples/TestPunctuation"); + EntityCreationService entityCreationService = new EntityCreationService(entityEnrichmentService); + + List tempEntities = entityCreationService.byString("Kuhn, J. O.", "CBI_author", EntityType.ENTITY, document) + .toList(); + assertFalse(tempEntities.isEmpty()); + assertEquals(2, tempEntities.size()); + } private DocumentAndEntity createNotFoundManualRedaction() { diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/acceptance_rules.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/acceptance_rules.drl index 8719d52e..328a01fb 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/acceptance_rules.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/acceptance_rules.drl @@ -856,7 +856,7 @@ rule "PII.9.3: Redact between \"AUTHOR(S)\" and \"(STUDY) COMPLETION DATE\"" when $document: Document(containsStringIgnoreCase("AUTHOR(S)"), containsAnyStringIgnoreCase("COMPLETION DATE", "STUDY COMPLETION DATE")) then - entityCreationService.shortestBetweenAnyStringIgnoreCase(List.of("AUTHOR(S)", "AUTHOR(S):"), List.of("COMPLETION DATE", "COMPLETION DATE:", "STUDY COMPLETION DATE", "STUDY COMPLETION DATE:"), "PII", EntityType.ENTITY, $document) + entityCreationService.shortestBetweenAnyStringIgnoreCase(List.of("AUTHOR(S)", "AUTHOR(S):"), List.of("COMPLETION DATE", "COMPLETION DATE:", "STUDY COMPLETION DATE", "STUDY COMPLETION DATE:"), "PII", EntityType.ENTITY, $document, 200) .forEach(authorEntity -> authorEntity.redact("PII.9.3", "AUTHOR(S) was found", "personal_data_geolocation")); end diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/all_redact_manager_rules.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/all_redact_manager_rules.drl index fe77a3d6..06aeeb78 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/all_redact_manager_rules.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/all_redact_manager_rules.drl @@ -1416,7 +1416,7 @@ rule "PII.9.3: Redact between \"AUTHOR(S)\" and \"(STUDY) COMPLETION DATE\"" when $document: Document(containsStringIgnoreCase("AUTHOR(S)"), containsAnyStringIgnoreCase("COMPLETION DATE", "STUDY COMPLETION DATE")) then - entityCreationService.shortestBetweenAnyStringIgnoreCase(List.of("AUTHOR(S)", "AUTHOR(S):"), List.of("COMPLETION DATE", "COMPLETION DATE:", "STUDY COMPLETION DATE", "STUDY COMPLETION DATE:"), "PII", EntityType.ENTITY, $document) + entityCreationService.shortestBetweenAnyStringIgnoreCase(List.of("AUTHOR(S)", "AUTHOR(S):"), List.of("COMPLETION DATE", "COMPLETION DATE:", "STUDY COMPLETION DATE", "STUDY COMPLETION DATE:"), "PII", EntityType.ENTITY, $document, 200) .forEach(authorEntity -> authorEntity.redact("PII.9.3", "AUTHOR(S) was found", "personal_data_geolocation")); end diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl index 4e9159e5..991cbd8a 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl @@ -837,7 +837,7 @@ rule "PII.9.3: Redact between \"AUTHOR(S)\" and \"(STUDY) COMPLETION DATE\"" when $document: Document(containsStringIgnoreCase("AUTHOR(S)"), containsAnyStringIgnoreCase("COMPLETION DATE", "STUDY COMPLETION DATE")) then - entityCreationService.shortestBetweenAnyStringIgnoreCase(List.of("AUTHOR(S)", "AUTHOR(S):"), List.of("COMPLETION DATE", "COMPLETION DATE:", "STUDY COMPLETION DATE", "STUDY COMPLETION DATE:"), "PII", EntityType.ENTITY, $document) + entityCreationService.shortestBetweenAnyStringIgnoreCase(List.of("AUTHOR(S)", "AUTHOR(S):"), List.of("COMPLETION DATE", "COMPLETION DATE:", "STUDY COMPLETION DATE", "STUDY COMPLETION DATE:"), "PII", EntityType.ENTITY, $document, 200) .forEach(authorEntity -> authorEntity.redact("PII.9.3", "AUTHOR(S) was found", "personal_data_geolocation")); end diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/Minimal Examples/TestPunctuation.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/Minimal Examples/TestPunctuation.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8456410029fd31737683a3e7541bd7557a641872 GIT binary patch literal 17834 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 authorEntity.redact("PII.9.3", "AUTHOR(S) was found", "personal_data_geolocation")); end