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 @@
-
+