diff --git a/redaction-service-v1/pom.xml b/redaction-service-v1/pom.xml index 1ea73e93..2771d75f 100644 --- a/redaction-service-v1/pom.xml +++ b/redaction-service-v1/pom.xml @@ -5,7 +5,7 @@ platform-dependency com.iqser.red - 1.0.2 + 1.0.3 4.0.0 diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java index ae3762b2..678e23c6 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java @@ -140,6 +140,48 @@ public class Section { } + public void expandToHintAnnotationByRegEx(String type, String pattern, boolean patternCaseInsensitive, int group, String asType) { + + Pattern compiledPattern = Patterns.getCompiledPattern(pattern, patternCaseInsensitive); + + Set expanded = new HashSet<>(); + for (Entity entity : entities) { + + if (!entity.getType().equals(type) || entity.getTextAfter() == null) { + continue; + } + + Matcher matcher = compiledPattern.matcher(entity.getTextAfter()); + + while (matcher.find()) { + String match = matcher.group(group); + if (StringUtils.isNotBlank(match)) { + expanded.addAll(findEntities(entity.getWord() + match, asType, false, false, 0, null, null)); + } + } + } + + EntitySearchUtils.addEntitiesWithHigherRank(entities, expanded, dictionary); + EntitySearchUtils.removeEntitiesContainedInLarger(entities); + } + + + public void addHintAnnotationByRegEx(String pattern, boolean patternCaseInsensitive, int group, String asType) { + + Pattern compiledPattern = Patterns.getCompiledPattern(pattern, patternCaseInsensitive); + + Matcher matcher = compiledPattern.matcher(searchText); + + while (matcher.find()) { + String match = matcher.group(group); + if (StringUtils.isNotBlank(match)) { + Set found = findEntities(match.trim(), asType, false, false, 0, null, null); + EntitySearchUtils.addEntitiesWithHigherRank(entities, found, dictionary); + } + } + } + + public void redactIfPrecededBy(String prefix, String type, int ruleNumber, String reason, String legalBasis) { entities.forEach(entity -> { diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/allAuthors.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/allAuthors.drl index ef08c66d..f0d50983 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/allAuthors.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/allAuthors.drl @@ -316,9 +316,9 @@ rule "26: Redact On behalf of Syngenta Ltd.:" // --------------------------------------- other rules ------------------------------------------------------------------- -rule "27: Redact Purity" +rule "27: Purity Hint" when - Section(searchText.contains("purity")) + Section(searchText.toLowerCase().contains("purity")) then - section.redactByRegEx("purity ?:? (([\\d\\.]+)( .{0,4}\\.)? ?%)", true, 1, "purity", 27, "Purity found", "Reg (EC) No 1107/2009 Art. 63 (2a)"); + section.addHintAnnotationByRegEx("(purity( of)?( ?:)?) [\\d\\.]+( .{0,4}\\.)? ?%", true, 1, "hint_only"); end \ No newline at end of file diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/log4j2-test.xml b/redaction-service-v1/redaction-service-server-v1/src/test/resources/log4j2-test.xml index 6f728b2d..626e5193 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/log4j2-test.xml +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/log4j2-test.xml @@ -10,7 +10,7 @@ - +