From 0c7d39ff0c34d2e518740f2b8d79ee2389a92a44 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Thu, 19 Oct 2023 19:18:44 +0200 Subject: [PATCH 1/3] RED-7679: WIP: Added Table Demo rules according to given examples in pdf --- .../model/document/nodes/SemanticNode.java | 29 + .../document/textblock/AtomicTextBlock.java | 18 + .../textblock/ConcatenatedTextBlock.java | 8 + .../model/document/textblock/TextBlock.java | 1 + .../document/EntityCreationService.java | 45 +- .../redaction/v1/server/AnalysisTest.java | 121 ++++ .../drools/all_redact_manager_rules.drl | 4 +- .../src/test/resources/drools/table_demo.drl | 450 +++++++++++++++ .../test/resources/drools/table_demo_OLD.drl | 134 +++++ .../drools/table_demo_components.drl | 520 ++++++++++++++++++ .../files/TableDemo/Table_examples.pdf | Bin 0 -> 194794 bytes 11 files changed, 1325 insertions(+), 5 deletions(-) create mode 100644 redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AnalysisTest.java create mode 100644 redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo.drl create mode 100644 redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo_OLD.drl create mode 100644 redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo_components.drl create mode 100644 redaction-service-v1/redaction-service-server-v1/src/test/resources/files/TableDemo/Table_examples.pdf diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java index c5e75340..0b065ecf 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java @@ -424,6 +424,35 @@ public interface SemanticNode { return Arrays.stream(strings).allMatch(this::containsStringIgnoreCase); } + default boolean containsWord(String word) { + + return getTextBlock().getWords().stream().anyMatch(s -> s.equals(word)); + } + + default boolean containsWordIgnoreCase(String word) { + + return getTextBlock().getWords().stream().map(String::toLowerCase).anyMatch(s -> s.equals(word.toLowerCase(Locale.ENGLISH))); + } + + default boolean containsAnyWord(String... words) { + + return Arrays.stream(words).anyMatch(word -> getTextBlock().getWords().stream().anyMatch(word::equals)); + } + + default boolean containsAnyWordIgnoreCase(String... words) { + + return Arrays.stream(words).map(String::toLowerCase).anyMatch(word -> getTextBlock().getWords().stream().map(String::toLowerCase).anyMatch(word::equals)); + } + + default boolean containsAllWords(String... words) { + + return Arrays.stream(words).allMatch(word -> getTextBlock().getWords().stream().anyMatch(word::equals)); + } + + default boolean containsAllWordsIgnoreCase(String... words) { + + return getTextBlock().getWords().stream().map(String::toLowerCase).allMatch(word -> getTextBlock().getWords().stream().anyMatch(s -> word.toLowerCase(Locale.ENGLISH).equals(s))); + } /** * Checks whether this SemanticNode matches the provided regex pattern. diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/AtomicTextBlock.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/AtomicTextBlock.java index 49d707ed..e56c5f8a 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/AtomicTextBlock.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/AtomicTextBlock.java @@ -3,11 +3,14 @@ package com.iqser.red.service.redaction.v1.server.model.document.textblock; import static java.lang.String.format; import java.awt.geom.Rectangle2D; +import java.text.BreakIterator; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -40,6 +43,7 @@ public class AtomicTextBlock implements TextBlock { //string coordinates TextRange textRange; String searchText; + List words; List lineBreaks; //position coordinates @@ -114,6 +118,20 @@ public class AtomicTextBlock implements TextBlock { return new TextRange(lineBreaks.get(lineNumber - 1) + textRange.start(), lineBreaks.get(lineNumber) + textRange.start()); } + public List getWords() { + + if (words == null) { + words = new ArrayList<>(); + BreakIterator iterator = BreakIterator.getWordInstance(Locale.ENGLISH); + iterator.setText(searchText); + int start = iterator.first(); + for (int end = iterator.next(); end != BreakIterator.DONE; start = end, end = iterator.next()) { + words.add(searchText.substring(start, end)); + } + } + return words; + } + @Override public List getAtomicTextBlocks() { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConcatenatedTextBlock.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConcatenatedTextBlock.java index d180c5c9..57334d5f 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConcatenatedTextBlock.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConcatenatedTextBlock.java @@ -7,6 +7,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; +import java.util.Collection; import java.util.Map; import java.util.stream.Stream; @@ -86,6 +87,13 @@ public class ConcatenatedTextBlock implements TextBlock { } + @Override + public List getWords() { + + return atomicTextBlocks.stream().map(AtomicTextBlock::getWords).flatMap(Collection::stream).toList(); + } + + @Override public int numberOfLines() { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlock.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlock.java index 50e76203..57303ee1 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlock.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlock.java @@ -18,6 +18,7 @@ public interface TextBlock extends CharSequence { String getSearchText(); + List getWords(); List getAtomicTextBlocks(); 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 f35f4ba8..1fe278ec 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 @@ -58,6 +58,8 @@ public class EntityCreationService { public Stream betweenStrings(String start, String stop, String type, EntityType entityType, SemanticNode node) { + checkIfBothStartAndEndAreEmpty(start, stop); + List startTextRanges = RedactionSearchUtility.findTextRangesByString(start, node.getTextBlock()); List stopTextRanges = RedactionSearchUtility.findTextRangesByString(stop, node.getTextBlock()); @@ -67,6 +69,8 @@ public class EntityCreationService { public Stream betweenStringsIgnoreCase(String start, String stop, String type, EntityType entityType, SemanticNode node) { + checkIfBothStartAndEndAreEmpty(start, stop); + List startBoundaries = RedactionSearchUtility.findTextRangesByStringIgnoreCase(start, node.getTextBlock()); List stopBoundaries = RedactionSearchUtility.findTextRangesByStringIgnoreCase(stop, node.getTextBlock()); @@ -76,6 +80,8 @@ public class EntityCreationService { public Stream betweenStringsIncludeStart(String start, String stop, String type, EntityType entityType, SemanticNode node) { + checkIfBothStartAndEndAreEmpty(start, stop); + List startBoundaries = RedactionSearchUtility.findTextRangesByString(start, node.getTextBlock()); List stopBoundaries = RedactionSearchUtility.findTextRangesByString(stop, node.getTextBlock()); @@ -90,6 +96,8 @@ public class EntityCreationService { public Stream betweenStringsIncludeStartIgnoreCase(String start, String stop, String type, EntityType entityType, SemanticNode node) { + checkIfBothStartAndEndAreEmpty(start, stop); + List startBoundaries = RedactionSearchUtility.findTextRangesByStringIgnoreCase(start, node.getTextBlock()); List stopBoundaries = RedactionSearchUtility.findTextRangesByStringIgnoreCase(stop, node.getTextBlock()); @@ -104,6 +112,8 @@ public class EntityCreationService { public Stream betweenStringsIncludeEnd(String start, String stop, String type, EntityType entityType, SemanticNode node) { + checkIfBothStartAndEndAreEmpty(start, stop); + List startBoundaries = RedactionSearchUtility.findTextRangesByString(start, node.getTextBlock()); List stopBoundaries = RedactionSearchUtility.findTextRangesByString(stop, node.getTextBlock()); @@ -118,6 +128,8 @@ public class EntityCreationService { public Stream betweenStringsIncludeEndIgnoreCase(String start, String stop, String type, EntityType entityType, SemanticNode node) { + checkIfBothStartAndEndAreEmpty(start, stop); + List startBoundaries = RedactionSearchUtility.findTextRangesByStringIgnoreCase(start, node.getTextBlock()); List stopBoundaries = RedactionSearchUtility.findTextRangesByStringIgnoreCase(stop, node.getTextBlock()); @@ -132,6 +144,8 @@ public class EntityCreationService { public Stream betweenStringsIncludeStartAndEnd(String start, String stop, String type, EntityType entityType, SemanticNode node) { + checkIfBothStartAndEndAreEmpty(start, stop); + List startBoundaries = RedactionSearchUtility.findTextRangesByString(start, node.getTextBlock()); List stopBoundaries = RedactionSearchUtility.findTextRangesByString(stop, node.getTextBlock()); @@ -150,6 +164,8 @@ public class EntityCreationService { public Stream betweenStringsIncludeStartAndEndIgnoreCase(String start, String stop, String type, EntityType entityType, SemanticNode node) { + checkIfBothStartAndEndAreEmpty(start, stop); + List startBoundaries = RedactionSearchUtility.findTextRangesByStringIgnoreCase(start, node.getTextBlock()); List stopBoundaries = RedactionSearchUtility.findTextRangesByStringIgnoreCase(stop, node.getTextBlock()); @@ -168,6 +184,8 @@ public class EntityCreationService { public Stream shortestBetweenAnyString(List starts, List stops, String type, EntityType entityType, SemanticNode node) { + checkIfBothStartAndEndAreEmpty(starts, stops); + List startTextRanges = RedactionSearchUtility.findTextRangesByList(starts, node.getTextBlock()); List stopTextRanges = RedactionSearchUtility.findTextRangesByList(stops, node.getTextBlock()); @@ -177,6 +195,8 @@ public class EntityCreationService { public Stream shortestBetweenAnyStringIgnoreCase(List starts, List stops, String type, EntityType entityType, SemanticNode node) { + checkIfBothStartAndEndAreEmpty(starts, stops); + List startTextRanges = RedactionSearchUtility.findTextRangesByListIgnoreCase(starts, node.getTextBlock()); List stopTextRanges = RedactionSearchUtility.findTextRangesByListIgnoreCase(stops, node.getTextBlock()); @@ -185,6 +205,8 @@ public class EntityCreationService { public Stream shortestBetweenAnyStringIgnoreCase(List starts, List stops, String type, EntityType entityType, SemanticNode node, int limit) { + checkIfBothStartAndEndAreEmpty(starts, stops); + List startTextRanges = RedactionSearchUtility.findTextRangesByListIgnoreCase(starts, node.getTextBlock()); List stopTextRanges = RedactionSearchUtility.findTextRangesByListIgnoreCase(stops, node.getTextBlock()); @@ -194,6 +216,8 @@ public class EntityCreationService { public Stream betweenRegexes(String regexStart, String regexStop, String type, EntityType entityType, SemanticNode node) { + checkIfBothStartAndEndAreEmpty(regexStart, regexStop); + TextBlock textBlock = node.getTextBlock(); List startBoundaries = RedactionSearchUtility.findTextRangesByRegex(regexStart, textBlock); List stopBoundaries = RedactionSearchUtility.findTextRangesByRegex(regexStop, textBlock); @@ -204,6 +228,8 @@ public class EntityCreationService { public Stream betweenRegexesIgnoreCase(String regexStart, String regexStop, String type, EntityType entityType, SemanticNode node) { + checkIfBothStartAndEndAreEmpty(regexStart, regexStop); + TextBlock textBlock = node.getTextBlock(); List startBoundaries = RedactionSearchUtility.findTextRangesByRegexIgnoreCase(regexStart, 0, textBlock); List stopBoundaries = RedactionSearchUtility.findTextRangesByRegexIgnoreCase(regexStop, 0, textBlock); @@ -213,15 +239,16 @@ public class EntityCreationService { public Stream betweenTextRanges(List startBoundaries, List stopBoundaries, String type, EntityType entityType, SemanticNode node) { + checkIfBothStartAndEndAreEmpty(startBoundaries, stopBoundaries); + return betweenTextRanges(startBoundaries, stopBoundaries, type, entityType, node,0); } public Stream betweenTextRanges(List startBoundaries, List stopBoundaries, String type, EntityType entityType, SemanticNode node, int limit) { - if (startBoundaries.isEmpty() || stopBoundaries.isEmpty()) { - return Stream.empty(); - } + checkIfBothStartAndEndAreEmpty(startBoundaries, stopBoundaries); + List entityBoundaries = findNonOverlappingBoundariesBetweenBoundariesWithMinimalDistances(startBoundaries, stopBoundaries); return entityBoundaries.stream() .filter(range -> (limit == 0 || range.length() <= limit)) @@ -263,6 +290,18 @@ public class EntityCreationService { } + private void checkIfBothStartAndEndAreEmpty(String start, String end) { + checkIfBothStartAndEndAreEmpty(List.of(start), List.of(end)); + } + + + private void checkIfBothStartAndEndAreEmpty(List start, List end) { + if ((start == null || start.isEmpty()) && (end == null || end.isEmpty())) { + throw new IllegalArgumentException("Start and end values are empty!"); + } + } + + public Stream bySearchImplementation(SearchImplementation searchImplementation, String type, EntityType entityType, SemanticNode node) { return searchImplementation.getBoundaries(node.getTextBlock(), node.getTextRange()) diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AnalysisTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AnalysisTest.java new file mode 100644 index 00000000..9965d360 --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AnalysisTest.java @@ -0,0 +1,121 @@ +package com.iqser.red.service.redaction.v1.server; + +import static org.mockito.Mockito.when; + +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Primary; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeResult; +import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; +import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; +import com.iqser.red.service.redaction.v1.server.annotate.AnnotateRequest; +import com.iqser.red.service.redaction.v1.server.annotate.AnnotateResponse; +import com.iqser.red.service.redaction.v1.server.redaction.utils.OsUtils; +import com.iqser.red.storage.commons.StorageAutoConfiguration; +import com.iqser.red.storage.commons.service.StorageService; +import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType; +import com.knecon.fforesight.service.layoutparser.processor.LayoutParsingServiceProcessorConfiguration; +import com.knecon.fforesight.tenantcommons.TenantContext; + +@ExtendWith(SpringExtension.class) +@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = {"application.type=DocuMine"}) +@Import(AnalysisTest.RedactionIntegrationTestConfiguration.class) +public class AnalysisTest extends AbstractRedactionIntegrationTest { + + private static final String RULES = loadFromClassPath("drools/table_demo.drl"); + private static final String COMPONENT_RULES = loadFromClassPath("drools/table_demo_components.drl"); + + + @Test + public void analyzeTableDemoFile() { + + AnalyzeRequest request = uploadFileToStorage("files/TableDemo/Table_examples.pdf"); + + System.out.println("Start Full integration test"); + analyzeDocumentStructure(LayoutParsingType.DOCUMINE, request); + System.out.println("Finished structure analysis"); + AnalyzeResult result = analyzeService.analyze(request); + System.out.println("Finished analysis"); +// var redactionLog = redactionStorageService.getRedactionLog(TEST_DOSSIER_ID, TEST_FILE_ID); +// var componentLog = redactionStorageService.getComponentLog(TEST_DOSSIER_ID, TEST_FILE_ID); + AnnotateResponse annotateResponse = annotationService.annotate(AnnotateRequest.builder().dossierId(TEST_DOSSIER_ID).fileId(TEST_FILE_ID).build()); + + String outputFileName = OsUtils.getTemporaryDirectory() + "/Documine.pdf"; + + try (FileOutputStream fileOutputStream = new FileOutputStream(outputFileName)) { + fileOutputStream.write(annotateResponse.getDocument()); + } catch (IOException e) { + throw new RuntimeException(e); + } + + } + + + @Configuration + @EnableAutoConfiguration(exclude = {RabbitAutoConfiguration.class}) + @Import(LayoutParsingServiceProcessorConfiguration.class) + @ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = StorageAutoConfiguration.class)}) + static class RedactionIntegrationTestConfiguration { + + @Bean + @Primary + public StorageService inmemoryStorage() { + + return new FileSystemBackedStorageService(); + } + + } + + + @BeforeEach + public void stubClients() { + + TenantContext.setTenantId("documine"); + + when(rulesClient.getVersion(TEST_DOSSIER_TEMPLATE_ID, RuleFileType.ENTITY)).thenReturn(System.currentTimeMillis()); + when(rulesClient.getRules(TEST_DOSSIER_TEMPLATE_ID, RuleFileType.ENTITY)).thenReturn(JSONPrimitive.of(RULES)); + when(rulesClient.getVersion(TEST_DOSSIER_TEMPLATE_ID, RuleFileType.COMPONENT)).thenReturn(System.currentTimeMillis()); + when(rulesClient.getRules(TEST_DOSSIER_TEMPLATE_ID, RuleFileType.COMPONENT)).thenReturn(JSONPrimitive.of(COMPONENT_RULES)); + + loadDictionaryForTest(); + loadTypeForTest(); + loadNerForTest(); + when(dictionaryClient.getVersion(TEST_DOSSIER_TEMPLATE_ID)).thenReturn(0L); + when(dictionaryClient.getAllTypesForDossierTemplate(TEST_DOSSIER_TEMPLATE_ID, false)).thenReturn(getTypeResponse()); + + when(dictionaryClient.getVersion(TEST_DOSSIER_TEMPLATE_ID)).thenReturn(0L); + when(dictionaryClient.getAllTypesForDossier(TEST_DOSSIER_ID, false)).thenReturn(List.of(Type.builder() + .id(DOSSIER_REDACTIONS_INDICATOR + ":" + TEST_DOSSIER_TEMPLATE_ID) + .type(DOSSIER_REDACTIONS_INDICATOR) + .dossierTemplateId(TEST_DOSSIER_ID) + .hexColor("#ffe187") + .isHint(hintTypeMap.get(DOSSIER_REDACTIONS_INDICATOR)) + .isCaseInsensitive(caseInSensitiveMap.get(DOSSIER_REDACTIONS_INDICATOR)) + .isRecommendation(recommendationTypeMap.get(DOSSIER_REDACTIONS_INDICATOR)) + .rank(rankTypeMap.get(DOSSIER_REDACTIONS_INDICATOR)) + .build())); + + mockDictionaryCalls(null); + + when(dictionaryClient.getColors(TEST_DOSSIER_TEMPLATE_ID)).thenReturn(colors); + } + +} \ No newline at end of file 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 c65a8059..9fb37ab0 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 @@ -1099,7 +1099,7 @@ rule "ETC.2.1: Redact signatures (vertebrate study)" // Rule unit: ETC.3 -rule "ETC.3.0: Redact logos (vertebrate study)" +rule "ETC.3.0: Redact logos (non vertebrate study)" when not FileAttribute(label == "Vertebrate Study", value == "Yes") $logo: Image(imageType == ImageType.LOGO) @@ -1107,7 +1107,7 @@ rule "ETC.3.0: Redact logos (vertebrate study)" $logo.redact("ETC.3.0", "Logo Found", "Article 39(e)(3) of Regulation (EC) No 178/2002"); end -rule "ETC.3.1: Redact logos (non vertebrate study)" +rule "ETC.3.1: Redact logos (vertebrate study)" when FileAttribute(label == "Vertebrate Study", value == "Yes") $logo: Image(imageType == ImageType.LOGO) diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo.drl new file mode 100644 index 00000000..31657538 --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo.drl @@ -0,0 +1,450 @@ +package drools + +import static java.lang.String.format; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.anyMatch; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.exactMatch; + +import java.util.List; +import java.util.LinkedList; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.Collection; +import java.util.stream.Stream; +import java.util.Optional; + +import com.iqser.red.service.redaction.v1.server.model.document.*; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.entity.*; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule +import com.iqser.red.service.redaction.v1.server.model.document.nodes.*; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Section; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Table; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.TableCell; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Paragraph; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Headline; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIdentifier; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Footer; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Header; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.NodeType; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.*; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.ConcatenatedTextBlock; +import com.iqser.red.service.redaction.v1.server.model.NerEntities; +import com.iqser.red.service.redaction.v1.server.model.dictionary.Dictionary; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryModel; +import com.iqser.red.service.redaction.v1.server.service.document.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService; +import com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility; + +import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Engine; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualResizeRedaction; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.IdRemoval; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualForceRedaction; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRecategorization; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualLegalBasisChange; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus +import java.util.function.Function +import com.iqser.red.service.redaction.v1.server.model.dictionary.SearchImplementation; + +global Document document +global EntityCreationService entityCreationService +global ManualChangesApplicationService manualChangesApplicationService +global Dictionary dictionary + +//------------------------------------ queries ------------------------------------ + +query "getFileAttributes" + $fileAttribute: FileAttribute() + end +//--------------------------------------------------------------------------- + +rule "TAB.0.0: Study Type File Attribute" + when + not FileAttribute(label == "OECD Number", valueEqualsAnyOf("402","403","404","405","425","429","436","438","439","471","487")) + $section: Section(containsAnyString("DATA REQUIREMENT", "TEST GUIDELINE", "MÉTODO(S) DE REFERÊNCIA(S):") + && containsAnyString("OECD", "EPA", "OPPTS")) + then + RedactionSearchUtility.findTextRangesByRegexIgnoreCase("(?<=OECD)(?:[\\w\\s,\\[\\]\\(\\)\\.]{1,10}|(?:.{5,40}(?:Number |Procedure |Guideline )))(4[\\d]{2})", 1 ,$section.getTextBlock()).stream() + .map(boundary -> $section.getTextBlock().subSequence(boundary).toString()) + .map(value -> FileAttribute.builder().label("OECD Number").value(value).build()) + .forEach(fileAttribute -> insert(fileAttribute)); + RedactionSearchUtility.findTextRangesByRegexIgnoreCase("(?<=OECD).{5,40}Method (4[\\d]{2}).{1,65}(\\d{4})\\)", 1, $section.getTextBlock()).stream() + .map(boundary -> $section.getTextBlock().subSequence(boundary).toString()) + .map(value -> FileAttribute.builder().label("OECD Number").value(value).build()) + .forEach(fileAttribute -> insert(fileAttribute)); + end + +rule "TAB.0.1: Guidelines" + when + $section: Section(containsAnyString("DATA REQUIREMENT", "TEST GUIDELINE", "MÉTODO(S) DE REFERÊNCIA(S):") && containsAnyString("OECD", "EPA", "OPPTS")) + then + entityCreationService.byRegex("(?<=OECD)(?:[\\w\\s,\\[\\]\\(\\)\\.]{1,10}|.{5,40}(?:Number |Procedure |Guideline ))(4[\\d]{2})", "oecd_guideline_number", EntityType.ENTITY, 1, $section) + .forEach(guideline -> guideline.redact("TAB.0.1", "OECD Guideline no. found", "n-a")); + entityCreationService.byRegex("(?<=OECD)(?:[\\w\\s,\\[\\]\\(\\)\\.]{1,10}|.{5,40}(?:Number |Procedure |Guideline ))(4[\\d]{2}),?\\s\\(?(\\d{4})\\)?", "oecd_guideline_year", EntityType.ENTITY, 2, $section) + .forEach(guideline -> guideline.redact("TAB.0.1", "OECD Guideline year found", "n-a")); + entityCreationService.byRegex("(?<=OECD)[\\w\\s,\\[\\]]{1,10}\\((\\d{4})\\)\\s(4[\\d]{2})", "oecd_guideline_year", EntityType.ENTITY, 1, $section) + .forEach(guideline -> guideline.redact("TAB.0.1", "OECD Guideline year found", "n-a")); + entityCreationService.byRegex("(?<=OECD).{5,40}Method (4[\\d]{2}).{1,65}(\\d{4})\\)", "oecd_guideline_number", EntityType.ENTITY, 1, $section) + .forEach(guideline -> guideline.redact("TAB.0.1", "OECD Guideline number found", "n-a")); + entityCreationService.byRegex("(?<=OECD).{5,40}Method (4[\\d]{2}).{1,65}(\\d{4})\\)", "oecd_guideline_year", EntityType.ENTITY, 2, $section) + .forEach(guideline -> guideline.redact("TAB.0.1", "OECD Guideline year found", "n-a")); + end + +rule "TAB.1.0: Full Table extraction (Guideline Deviation)" + when + FileAttribute(label == "OECD Number", valueEqualsAnyOf("425")) + $section: Section(getHeadline().containsString("Full Table")) + $table: Table() from $section.getParent().streamAllSubNodesOfType(NodeType.TABLE).toList() + $tableCell: TableCell(!header) from $table.streamTableCells().toList() + then + entityCreationService.bySemanticNode($tableCell, "guideline_deviation", EntityType.ENTITY) + .ifPresent(entity -> entity.apply("TAB.1.0", "full table extracted")); + end + +rule "TAB.2.0: Individual row extraction (Clinical Signs)" + when + FileAttribute(label == "OECD Number", valueEqualsAnyOf("425")) + $section: Section(getHeadline().containsString("Individual Rows Extraction")) + $table: Table(hasHeader("Animal No."), (hasRowWithHeaderAndAnyValue("Animal No.", List.of("120-2", "120-5")))) from $section.streamChildren().toList() + TableCell($row: row, containsAnyString("120-2", "120-5")) from $table.streamTableCellsWithHeader("Animal No.").toList() + $tableCell: TableCell($row == row) from $table.streamTableCells().toList() + then + entityCreationService.bySemanticNode($tableCell, "clinical_signs", EntityType.ENTITY) + .ifPresent(entity -> entity.apply("TAB.2.0", "Individual row based on animal number")); + end + +rule "TAB.3.0: Individual column extraction (Strain)" + when + FileAttribute(label == "OECD Number", valueEqualsAnyOf("425")) + $section: Section(getHeadline().containsString("Individual Column")) + $table: Table(hasHeader("Sex")) from $section.streamChildren().toList() + then + $table.streamTableCellsWithHeader("Sex") + .map(tableCell -> entityCreationService.bySemanticNode(tableCell, "dosages", EntityType.ENTITY)) + .filter(Optional::isPresent) + .map(Optional::get) + .forEach(redactionEntity -> redactionEntity.redact("TAB.3.0", "Individual column based on column header", "n-a")); + end + +rule "TAB.4.0: Dose Mortality" + when + FileAttribute(label == "OECD Number", valueEqualsAnyOf("425")) + $section: Section(getHeadline().containsString("Combined Columns")) + $table: Table(hasHeader("Sex"), hasHeader("Dosage (mg/kg bw)")) from $section.getParent().streamAllSubNodesOfType(NodeType.TABLE).toList() + TableCell($row: row, containsAnyWordIgnoreCase("Male")) from $table.streamTableCellsWithHeader("Sex").toList() + $tableCell: TableCell($row == row, containsStringIgnoreCase("Dosage")) from $table.streamTableCells().toList() +// $male_dosage: TableCell($row == row) from $table.streamTableCellsWithHeader("Dosage").toList()) + then + System.out.println("BBBB: " + $tableCell); +// $table.streamTableCellsWithHeader("Mortality") +// .map(tableCell -> entityCreationService.bySemanticNode(tableCell, "dose_mortality", EntityType.ENTITY)) +// .filter(Optional::isPresent) +// .map(Optional::get) +// .forEach(redactionEntity -> redactionEntity.redact("TAB.0.5", "Dose Mortality found", "n-a")); +// $table.streamTableCellsWithHeader("Dosage (mg/kg bw)") +// .map(tableCell -> entityCreationService.bySemanticNode(tableCell, "dose_mortality_dose", EntityType.ENTITY)) +// .filter(Optional::isPresent) +// .map(Optional::get) +// .forEach(redactionEntity -> redactionEntity.redact("TAB.0.5", "Dose Mortality dose found", "n-a")); + end + +rule "TAB.4.1: sdsdf" + when + + then + + end + +rule "TAB.5.0: Targeted cell extraction" + when + FileAttribute(label == "OECD Number", valueEqualsAnyOf("425")) + $section: Section(getHeadline().containsString("Value Extraction")) + $table: Table(hasHeader("Mortality"), hasRowWithHeaderAndAnyValue("Sex", List.of("male", "Male")), hasRowWithHeaderAndValue("Mortality", "Survived")) from $section.streamChildren().toList() + TableCell(containsWordIgnoreCase("Male"), $row: row) from $table.streamTableCellsWithHeader("Sex").toList() + TableCell($row == row, containsStringIgnoreCase("Survived")) from $table.streamTableCellsWithHeader("Mortality").toList() + $dosageCell: TableCell($row == row) from $table.streamTableCellsWithHeader("Dosage").toList() + then + entityCreationService.bySemanticNode($dosageCell,"doses_mg_kg_bw", EntityType.ENTITY) + .ifPresent(entity -> entity.apply("TAB.5.0", "Dosage found in row with survived male")); + end + +rule "TAB.6.0: Targeted cell extraction (Experimental Stop date)" + when + $section: Section(getHeadline().containsString("Advanced Table Extraction"), containsAllStrings("female", "Female", "Survived", "Group 2")) + $table: Table(hasHeader("Group 2")) from $section.streamChildren().toList() + TableCell(containsWordIgnoreCase("Female"), $row: row) from $table.streamTableCellsWithHeader("Group 2").toList() + TableCell($row == row, containsStringIgnoreCase("Survived")) from $table.streamTableCellsWithHeader("Group 2").toList() + $femaleSurvived: TableCell($row == row) from $table.streamTableCellsWithHeader("Group 2").toList() + then + entityCreationService.bySemanticNode($femaleSurvived, "experiment_female_survived", EntityType.ENTITY).ifPresent(entity -> entity.redact("TAB.6.0", "Female in group to experimental start date", "n-a")); + end + +rule "TAB.7.0: Indicator (Species)" + when + FileAttribute(label == "OECD Number", valueEqualsAnyOf("425")) + $section: Section(getHeadline().containsString("Entity-Based")) + $table: Table() from $section.streamAllSubNodesOfType(NodeType.TABLE).toList() + TableCell(isHeader(), containsString("Title"), $col: col) from $table.streamTableCells().toList() + TableCell(hasEntitiesOfType("vertebrate"), $row: row) from $table.streamTableCells().toList() + $cell: TableCell($col == col, $row == row) from $table.streamTableCells().toList() + then + entityCreationService.bySemanticNode($cell, "study_design", EntityType.ENTITY) + .ifPresent(redactionEntity -> redactionEntity.redact("TAB.7.0", "Vertebrate study found", "n-a")); + end + +//------------------------------------ Manual redaction rules ------------------------------------ + +// Rule unit: MAN.0 +rule "MAN.0.0: Apply manual resize redaction" + salience 128 + when + $resizeRedaction: ManualResizeRedaction($id: annotationId, status == AnnotationStatus.APPROVED, $requestDate: requestDate) + not ManualResizeRedaction(annotationId == $id, requestDate.isBefore($requestDate)) + $entityToBeResized: TextEntity(matchesAnnotationId($id)) + then + manualChangesApplicationService.resizeEntityAndReinsert($entityToBeResized, $resizeRedaction); + retract($resizeRedaction); + update($entityToBeResized); + $entityToBeResized.getIntersectingNodes().forEach(node -> update(node)); + end + +rule "MAN.0.1: Apply manual resize redaction" + salience 128 + when + $resizeRedaction: ManualResizeRedaction($id: annotationId, status == AnnotationStatus.APPROVED, $requestDate: requestDate) + not ManualResizeRedaction(annotationId == $id, requestDate.isBefore($requestDate)) + $imageToBeResized: Image(id == $id) + then + manualChangesApplicationService.resizeImage($imageToBeResized, $resizeRedaction); + retract($resizeRedaction); + update($imageToBeResized); + update($imageToBeResized.getParent()); + end + + +// Rule unit: MAN.1 +rule "MAN.1.0: Apply id removals that are valid and not in forced redactions to Entity" + salience 128 + when + $idRemoval: IdRemoval($id: annotationId, status == AnnotationStatus.APPROVED) + $entityToBeRemoved: TextEntity(matchesAnnotationId($id)) + then + $entityToBeRemoved.getManualOverwrite().addChange($idRemoval); + update($entityToBeRemoved); + retract($idRemoval); + $entityToBeRemoved.getIntersectingNodes().forEach(node -> update(node)); + end + +rule "MAN.1.1: Apply id removals that are valid and not in forced redactions to Image" + salience 128 + when + $idRemoval: IdRemoval($id: annotationId, status == AnnotationStatus.APPROVED) + $imageEntityToBeRemoved: Image($id == id) + then + $imageEntityToBeRemoved.getManualOverwrite().addChange($idRemoval); + update($imageEntityToBeRemoved); + retract($idRemoval); + update($imageEntityToBeRemoved.getParent()); + end + + +// Rule unit: MAN.2 +rule "MAN.2.0: Apply force redaction" + salience 128 + when + $force: ManualForceRedaction($id: annotationId, status == AnnotationStatus.APPROVED) + $entityToForce: TextEntity(matchesAnnotationId($id)) + then + $entityToForce.getManualOverwrite().addChange($force); + update($entityToForce); + $entityToForce.getIntersectingNodes().forEach(node -> update(node)); + retract($force); + end + +rule "MAN.2.1: Apply force redaction to images" + salience 128 + when + $force: ManualForceRedaction($id: annotationId, status == AnnotationStatus.APPROVED) + $imageToForce: Image(id == $id) + then + $imageToForce.getManualOverwrite().addChange($force); + update($imageToForce); + update($imageToForce.getParent()); + retract($force); + end + + +// Rule unit: MAN.3 +rule "MAN.3.0: Apply entity recategorization" + salience 128 + when + $recategorization: ManualRecategorization($id: annotationId, $type: type, status == AnnotationStatus.APPROVED, $requestDate: requestDate) + not ManualRecategorization($id == annotationId, requestDate.isBefore($requestDate)) + $entityToBeRecategorized: TextEntity(matchesAnnotationId($id), type != $type) + then + $entityToBeRecategorized.getIntersectingNodes().forEach(node -> update(node)); + manualChangesApplicationService.recategorize($entityToBeRecategorized, $recategorization); + retract($recategorization); + // Entity is copied and inserted, so the old entity needs to be retracted to avoid duplication. + retract($entityToBeRecategorized); + end + +rule "MAN.3.1: Apply entity recategorization of same type" + salience 128 + when + $recategorization: ManualRecategorization($id: annotationId, $type: type, status == AnnotationStatus.APPROVED, $requestDate: requestDate) + not ManualRecategorization($id == annotationId, requestDate.isBefore($requestDate)) + $entityToBeRecategorized: TextEntity(matchesAnnotationId($id), type == $type) + then + $entityToBeRecategorized.getManualOverwrite().addChange($recategorization); + retract($recategorization); + end + +rule "MAN.3.2: Apply image recategorization" + salience 128 + when + $recategorization: ManualRecategorization($id: annotationId, status == AnnotationStatus.APPROVED, $requestDate: requestDate) + not ManualRecategorization($id == annotationId, requestDate.isBefore($requestDate)) + $imageToBeRecategorized: Image($id == id) + then + manualChangesApplicationService.recategorize($imageToBeRecategorized, $recategorization); + update($imageToBeRecategorized); + update($imageToBeRecategorized.getParent()); + retract($recategorization); + end + + +// Rule unit: MAN.4 +rule "MAN.4.0: Apply legal basis change" + salience 128 + when + $legalbasisChange: ManualLegalBasisChange($id: annotationId, status == AnnotationStatus.APPROVED) + $imageToBeRecategorized: Image($id == id) + then + $imageToBeRecategorized.getManualOverwrite().addChange($legalbasisChange); + end + +rule "MAN.4.1: Apply legal basis change" + salience 128 + when + $legalBasisChange: ManualLegalBasisChange($id: annotationId, status == AnnotationStatus.APPROVED) + $entityToBeChanged: TextEntity(matchesAnnotationId($id)) + then + $entityToBeChanged.getManualOverwrite().addChange($legalBasisChange); + end + + +//------------------------------------ Entity merging rules ------------------------------------ + +// Rule unit: X.0 +rule "X.0.0: Remove Entity contained by Entity of same type" + salience 65 + when + $larger: TextEntity($type: type, $entityType: entityType, active()) + $contained: TextEntity(containedBy($larger), type == $type, entityType == $entityType, this != $larger, !hasManualChanges(), active()) + then + $contained.remove("X.0.0", "remove Entity contained by Entity of same type"); + retract($contained); + end + + +// Rule unit: X.2 +rule "X.2.0: Remove Entity of type ENTITY when contained by FALSE_POSITIVE" + salience 64 + when + $falsePositive: TextEntity($type: type, entityType == EntityType.FALSE_POSITIVE, active()) + $entity: TextEntity(containedBy($falsePositive), type == $type, (entityType == EntityType.ENTITY || entityType == EntityType.HINT), !hasManualChanges(), active()) + then + $entity.getIntersectingNodes().forEach(node -> update(node)); + $entity.remove("X.2.0", "remove Entity of type ENTITY when contained by FALSE_POSITIVE"); + retract($entity) + end + + +// Rule unit: X.3 +rule "X.3.0: Remove Entity of type RECOMMENDATION when contained by FALSE_RECOMMENDATION" + salience 64 + when + $falseRecommendation: TextEntity($type: type, entityType == EntityType.FALSE_RECOMMENDATION, active()) + $recommendation: TextEntity(containedBy($falseRecommendation), type == $type, entityType == EntityType.RECOMMENDATION, !hasManualChanges(), active()) + then + $recommendation.remove("X.3.0", "remove Entity of type RECOMMENDATION when contained by FALSE_RECOMMENDATION"); + retract($recommendation); + end + + +// Rule unit: X.4 +rule "X.4.0: Remove Entity of type RECOMMENDATION when intersected by ENTITY with same type" + salience 256 + when + $entity: TextEntity($type: type, (entityType == EntityType.ENTITY || entityType == EntityType.HINT), active()) + $recommendation: TextEntity(intersects($entity), type == $type, entityType == EntityType.RECOMMENDATION, !hasManualChanges(), active()) + then + $entity.addEngines($recommendation.getEngines()); + $recommendation.remove("X.4.0", "remove Entity of type RECOMMENDATION when intersected by ENTITY with same type"); + retract($recommendation); + end + + +// Rule unit: X.5 +rule "X.5.0: Remove Entity of type RECOMMENDATION when contained by ENTITY" + salience 256 + when + $entity: TextEntity((entityType == EntityType.ENTITY || entityType == EntityType.HINT), active()) + $recommendation: TextEntity(containedBy($entity), entityType == EntityType.RECOMMENDATION, !hasManualChanges(), active()) + then + $recommendation.remove("X.5.0", "remove Entity of type RECOMMENDATION when contained by ENTITY"); + retract($recommendation); + end + + +// Rule unit: X.7 +rule "X.7.0: remove all images" + salience 512 + when + $image: Image(imageType != ImageType.OCR, !hasManualChanges()) + then + $image.remove("X.7.0", "remove all images"); + retract($image); + end + + +//------------------------------------ File attributes rules ------------------------------------ + +// Rule unit: FA.1 +rule "FA.1.0: Remove duplicate FileAttributes" + salience 64 + when + $fileAttribute: FileAttribute($label: label, $value: value) + $duplicate: FileAttribute(this != $fileAttribute, label == $label, value == $value) + then + retract($duplicate); + end + + +//------------------------------------ Local dictionary search rules ------------------------------------ + +// Rule unit: LDS.0 +rule "LDS.0.0: Run local dictionary search" + agenda-group "LOCAL_DICTIONARY_ADDS" + salience -999 + when + $dictionaryModel: DictionaryModel(!localEntriesWithMatchedRules.isEmpty()) from dictionary.getDictionaryModels() + then + entityCreationService.bySearchImplementation($dictionaryModel.getLocalSearch(), $dictionaryModel.getType(), EntityType.RECOMMENDATION, document) + .forEach(entity -> { + Collection matchedRules = $dictionaryModel.getLocalEntriesWithMatchedRules().get(entity.getValue()); + entity.addMatchedRules(matchedRules); + }); + end diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo_OLD.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo_OLD.drl new file mode 100644 index 00000000..02dd3b78 --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo_OLD.drl @@ -0,0 +1,134 @@ +package drools + +import com.iqser.red.service.redaction.v1.server.redaction.model.Section + +global Section section + + +// --------------------------------------- Your rules below this line-------------------------------------------------- + +rule "0a: Study Type File Attribute" + when + Section( + !fileAttributeContainsAnyOf("OECD Number","402","403","404","405","425","429","436","438","439","471","487") + && ( + text.contains("DATA REQUIREMENT") + || text.contains("TEST GUIDELINE") + || text.contains("MÉTODO(S) DE REFERÊNCIA(S):") + ) + && ( + text.contains("OECD") + || text.contains("EPA") + || text.contains("OPPTS") + ) + ) + then + section.addFileAttribute("OECD Number", "(?<=OECD)(?:[\\w\\s,\\[\\]\\(\\)\\.]{1,10}|(?:.{5,40}(?:Number |Procedure |Guideline )))(4[\\d]{2})", true, 1); + section.addFileAttribute("OECD Number", "(?<=OECD).{5,40}Method (4[\\d]{2}).{1,65}(\\d{4})\\)", true, 1); + end + + +rule "1: Guidelines" + when + Section( + ( + text.contains("DATA REQUIREMENT") + || text.contains("TEST GUIDELINE") + || text.contains("MÉTODO(S) DE REFERÊNCIA(S):") + ) + && ( + text.contains("OECD") + || text.contains("EPA") + || text.contains("OPPTS") + ) + ) + then + section.redactByRegEx("(?<=OECD)(?:[\\w\\s,\\[\\]\\(\\)\\.]{1,10}|.{5,40}(?:Number |Procedure |Guideline ))(4[\\d]{2})", true, 1, "oecd_guideline_number", 1, "OECD Guideline no. found", "n-a"); + section.redactByRegEx("(?<=OECD)(?:[\\w\\s,\\[\\]\\(\\)\\.]{1,10}|.{5,40}(?:Number |Procedure |Guideline ))(4[\\d]{2}),?\\s\\(?(\\d{4})\\)?", true, 2, "oecd_guideline_year", 1, "OECD Guideline year found", "n-a"); + section.redactByRegEx("(?<=OECD)[\\w\\s,\\[\\]]{1,10}\\((\\d{4})\\)\\s(4[\\d]{2})", true, 1, "oecd_guideline_year", 1, "OECD Guideline year found", "n-a"); + section.redactByRegEx("(?<=OECD).{5,40}Method (4[\\d]{2}).{1,65}(\\d{4})\\)", true, 1, "oecd_guideline_number", 1, "OECD Guideline number found", "n-a"); + section.redactByRegEx("(?<=OECD).{5,40}Method (4[\\d]{2}).{1,65}(\\d{4})\\)", true, 2, "oecd_guideline_year", 1, "OECD Guideline year found", "n-a"); + end + + +rule "2: Full Table extraction (Guideline Deviation)" + when + Section( + fileAttributeByLabelEqualsIgnoreCase("OECD Number","425") + && headlineContainsWord("Full Table") + && hasTableHeader("Sex") + ) + then + section.redactSectionTextWithoutHeadLine("guideline_deviation",2,"Full table extraction into guideline deviation","n-a"); + end + +rule "3: Individual row extraction (Clinical Signs)" + when + Section( + fileAttributeByLabelEqualsIgnoreCase("OECD Number","425") + && headlineContainsWord("Individual Rows") + && hasTableHeader("Animal No.") + && (rowEquals("Animal No.","120-2") || rowEquals("Animal No.","120-5")) + ) + then + section.redactSectionTextWithoutHeadLine("clinical_signs",3,"Individual row based on animal number","n-a"); + end + +rule "4: Individual column extraction (Strain)" + when + Section( + fileAttributeByLabelEqualsIgnoreCase("OECD Number","425") + && headlineContainsWord("Individual Column") + && hasTableHeader("Sex") + ) + then + section.redactCell("Sex",4,"dosages",false,"Individual column based on column header","n-a"); + end + +rule "5: Dose Mortality" + when + Section( + fileAttributeByLabelEqualsIgnoreCase("OECD Number","425") + && headlineContainsWord("Combined Columns") + && hasTableHeader("Mortality") + && hasTableHeader("Dosage (mg/kg bw)") + ) + then + section.redactCell("Mortality",5,"dose_mortality",false,"Dose Mortality found.","n-a"); + section.redactCell("Dosage (mg/kg bw)",5,"dose_mortality_dose",false,"Dose Mortality dose found.","n-a"); + end + +rule "6: targeted cell extraction (Experimental Start date)" + when + Section( + fileAttributeByLabelEqualsIgnoreCase("OECD Number","425") + && headlineContainsWord("Value Extraction") + && hasTableHeader("Mortality") + && (rowEquals("Sex","male") || rowEquals("Sex","Male")) + && rowEquals("Mortality","Survived") + ) + then + section.redactCell("Treatment start",6,"experimental_start_date",false,"Female deaths date to experimental start date","n-a"); + end + +rule "7: targeted cell extraction (Experimental Stop date)" + when + Section( + isInTable() + && (searchText.contains("female") || searchText.contains("Female")) + && searchText.contains("Survived") + ) + then + section.redactCellBelow(7,"experimental_end_date",true,false,"Female deaths date to experimental start date","n-a", "Sex", "Group 2"); + end + +rule "8: Indicator (Species)" + when + Section( + fileAttributeByLabelEqualsIgnoreCase("OECD Number","425") + && headlineContainsWord("Entity-Based") + && matchesType("vertebrates") + ) + then + section.redactCell("Title",8,"study_design",false,"Vertebrate study found","n-a"); + end \ No newline at end of file diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo_components.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo_components.drl new file mode 100644 index 00000000..f1d18f26 --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo_components.drl @@ -0,0 +1,520 @@ +package drools + +import static java.lang.String.format; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.anyMatch; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.exactMatch; + +import java.util.List; +import java.util.LinkedList; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.Collection; +import java.util.stream.Stream; +import java.util.Optional; + +import com.iqser.red.service.redaction.v1.server.model.component.Component; +import com.iqser.red.service.redaction.v1.server.model.component.Entity; +import com.iqser.red.service.redaction.v1.server.service.document.ComponentCreationService; + +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Change; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Engine; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryState; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryType; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.ManualChange; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Position; + +import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; + +global ComponentCreationService componentCreationService + +//------------------------------------ queries ------------------------------------ + +query "getFileAttributes" + $fileAttribute: FileAttribute() + end + +query "getComponents" + $component: Component() + end + +//------------------------------------ Guideline mapping object ------------------------------------ + +declare GuidelineMapping + number: String + year: String + guideline: String + end + +//------------------------------------ Default Components rules ------------------------------------ + +rule "StudyTitle.0.0: First Title found" + when + $titleCandidates: List() from collect (Entity(type == "title")) + then + componentCreationService.firstOrElse("StudyTitle.0.0", "Study_Title", $titleCandidates, ""); + end + + +rule "PerformingLaboratory.1.0: Performing Laboratory name and country found in same section" + when + $laboratoryName: Entity(type == "laboratory_name", $node: containingNode) + $laboratoryCountry: Entity(type == "laboratory_country", containingNode == $node) + not Entity(type == "laboratory_country", containingNode == $node, Math.abs($laboratoryName.startOffset - startOffset) < Math.abs($laboratoryName.startOffset - $laboratoryCountry.startOffset)) + then + componentCreationService.create("PerformingLaboratory.1.0", "Performing_Laboratory", $laboratoryName.getValue() + ", " + $laboratoryCountry.getValue(), "Laboratory name and country found!", List.of($laboratoryName, $laboratoryCountry)); + end + +rule "PerformingLaboratory.2.0: Performing Laboratory name but no country found in same section" + when + $laboratoryName: Entity(type == "laboratory_name", $node: containingNode) + not Entity(type == "laboratory_country", containingNode == $node) + then + componentCreationService.create("PerformingLaboratory.2.0", "Performing_Laboratory", $laboratoryName.getValue(), "Only laboratory name found!", List.of($laboratoryName)); + end + +rule "PerformingLaboratory.0.2: Performing Laboratory not found" + salience -1 + when + not Component(name == "Performing_Laboratory") + then + componentCreationService.create("PerformingLaboratory.0.2", "Performing_Laboratory", "", "fallback"); + end + + +rule "ReportNumber.0.0: First Report number found" + when + $reportNumberCandidates: List() from collect (Entity(type == "report_number")) + then + componentCreationService.firstOrElse("ReportNumber.0.0", "Report_Number", $reportNumberCandidates, ""); + end + + +rule "GLPStudy.0.0: GLP Study found" + when + $glpStudyList: List(!isEmpty) from collect(Entity(type == "glp_study")) + then + componentCreationService.create("GLPStudy.0.0", "GLP_Study", "Yes", "Yes if present, No if not", $glpStudyList); + end + +rule "GLPStudy.1.0: GLP Study not found" + when + not Entity(type == "glp_study") + then + componentCreationService.create("GLPStudy.1.0", "GLP_Study", "No", "Yes if present, No if not"); + end + + +rule "TestGuideline.0.0: create OECD number and year guideline mappings" + salience 2 + when + Entity(type == "oecd_guideline_number") + Entity(type == "oecd_guideline_year") + then + insert(new GuidelineMapping("425", "2008", "Nº 425: Acute oral Toxicity - Up-and-Down Procedure (03/10/2008)")); + insert(new GuidelineMapping("425", "2001", "Nº 425: Acute oral Toxicity - Up-and-Down Procedure (17/12/2001)")); + insert(new GuidelineMapping("402", "2017", "Nº 402: Acute Dermal Toxicity (09/10/2017)")); + insert(new GuidelineMapping("402", "1987", "Nº 402: Acute Dermal Toxicity (24/02/1987)")); + insert(new GuidelineMapping("403", "2009", "Nº 403: Acute Inhalation Toxicity (08/09/2009)")); + insert(new GuidelineMapping("403", "1981", "Nº 403: Acute Inhalation Toxicity (12/05/1981)")); + insert(new GuidelineMapping("433", "2018", "Nº 433: Acute Inhalation Toxicity: Fixed Concentration Procedure (27/06/2018)")); + insert(new GuidelineMapping("433", "2017", "Nº 433: Acute Inhalation Toxicity: Fixed Concentration Procedure (09/10/2017)")); + insert(new GuidelineMapping("436", "2009", "Nº 436: Acute Inhalation Toxicity – Acute Toxic Class Method (08/09/2009)")); + insert(new GuidelineMapping("404", "1981", "Nº 404: Acute Dermal Irritation/Corrosion (12/05/1981)")); + insert(new GuidelineMapping("404", "1992", "Nº 404: Acute Dermal Irritation/Corrosion (17/07/1992)")); + insert(new GuidelineMapping("404", "2002", "Nº 404: Acute Dermal Irritation/Corrosion (24/04/2002)")); + insert(new GuidelineMapping("404", "2015", "Nº 404: Acute Dermal Irritation/Corrosion (28/07/2015)")); + insert(new GuidelineMapping("405", "2017", "Nº 405: Acute Eye Irritation/Corrosion (09/10/2017)")); + insert(new GuidelineMapping("405", "2012", "Nº 405: Acute Eye Irritation/Corrosion (02/10/2012)")); + insert(new GuidelineMapping("405", "2002", "Nº 405: Acute Eye Irritation/Corrosion (24/04/2002)")); + insert(new GuidelineMapping("405", "1987", "Nº 405: Acute Eye Irritation/Corrosion (24/02/1987)")); + insert(new GuidelineMapping("429", "2002", "Nº 429: Skin Sensitisation: Local Lymph Node Assay (24/04/2002)")); + insert(new GuidelineMapping("429", "2010", "Nº 429: Skin Sensitisation (23/07/2010)")); + insert(new GuidelineMapping("442A", "2018", "Nº 442A: Skin Sensitization (23/07/2018)")); + insert(new GuidelineMapping("442B", "2018", "Nº 442B: Skin Sensitization (27/06/2018)")); + insert(new GuidelineMapping("471", "1997", "Nº 471: Bacterial Reverse Mutation Test (21/07/1997)")); + insert(new GuidelineMapping("471", "2020", "Nº 471: Bacterial Reverse Mutation Test (26/06/2020)")); + insert(new GuidelineMapping("406", "1992", "Nº 406: Skin Sensitisation (1992)")); + insert(new GuidelineMapping("428", "2004", "Nº 428: Split-Thickness Skin test (2004)")); + insert(new GuidelineMapping("438", "2018", "Nº 438: Eye Irritation (26/06/2018)")); + insert(new GuidelineMapping("439", "2019", "Nº 439: Skin Irritation (2019)")); + insert(new GuidelineMapping("474", "2016", "Nº 474: Micronucleus Bone Marrow Cells Rat (2016)")); + insert(new GuidelineMapping("487", "2016", "Nº 487: Micronucleus Human Lymphocytes (2016)")); + end + +rule "TestGuideline.0.1: match OECD number and year with guideline mappings" + salience 1 + when + not Component(name == "Test_Guidelines_1") + GuidelineMapping($year: year, $number: number, $guideline: guideline) + $guidelineNumber: Entity(type == "oecd_guideline_number", value == $number) + $guidelineYear: Entity(type == "oecd_guideline_year", value == $year) + then + componentCreationService.create( + "TestGuideline.0.0", + "Test_Guidelines_1", + $guideline, + "OECD Number and guideline year mapped!", + List.of($guidelineNumber, $guidelineYear) + ); + end + +rule "TestGuideline.1.0: no guideline mapping found" + when + not Component(name == "Test_Guidelines_1") + $guideLine: Entity(type == "oecd_guideline") + then + componentCreationService.create("TestGuideline.2.0", "Test_Guidelines_1", $guideLine.getValue(), "No Mapping for OECD number and year found, using fallback instead!", List.of($guideLine)); + end + +rule "TestGuideline.2.0: All values of EPA guideline and EC guidelines" + when + $guidelines: List() from collect (Entity(type == "epa_guideline" || type == "ec_guideline")) + then + componentCreationService.joining("TestGuideline.2.0", "Test_Guidelines_2", $guidelines); + end + + +rule "StartDate.0.0: All experimental start dates converted to dd/MM/yyyy" + when + $startDates: List() from collect (Entity(type == "experimental_start_date")) + then + componentCreationService.convertDates("StartDate.0.0", "Experimental_Starting_Date", $startDates); + end + + +rule "CompletionDate.0.0: All experimental end dates converted to dd/MM/yyyy" + when + $endDates: List() from collect (Entity(type == "experimental_end_date")) + then + componentCreationService.convertDates("CompletionDate.0.0", "Experimental_Completion_Date", $endDates); + end + + +rule "AnalysisCertificate.0.0: Unique values of certificate of analysis batch identification" + when + $batchNumbers: List() from collect (Entity(type == "batch_number")) + then + componentCreationService.joiningUnique("AnalysisCertificate.0.0", "Certificate_of_Analysis_Batch_Identification", $batchNumbers); + end + +rule "StudyConclusion.0.0: Study conclusion in first found section" + when + $oecdNumber: String() from List.of("402", "403", "404", "405", "425", "429", "436", "471") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $studyConclusions: List() from collect(Entity(type == "study_conclusion")) + then + componentCreationService.joiningFromFirstSectionOnly("StudyConclusion.0.0", "Study_Conclusion", $studyConclusions, " "); + end + +rule "GuidelineDeviation.0.0: Guideline deviation as sentences" + when + $oecdNumber: String() from List.of("402", "403", "404", "405", "425", "429", "436", "471") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $guidelineDeviations: List() from collect (Entity(type == "guideline_deviation")) + then + componentCreationService.joining("GuidelineDeviation.0.0", "Deviation_from_the_Guideline", $guidelineDeviations, "\n"); + end + +rule "Species.0.0: First found species" + when + $oecdNumber: String() from List.of("402", "403", "404", "405", "425", "429", "436", "471") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $species: List() from collect (Entity(type == "species")) + then + componentCreationService.firstOrElse("Species.0.0", "Species", $species, ""); + end + +rule "Strain.0.0: First found strain" + when + $oecdNumber: String() from List.of("402", "403", "404", "405", "425", "429", "436", "471") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $strain: List() from collect (Entity(type == "strain")) + then + componentCreationService.firstOrElse("Strain.0.0", "Strain", $strain, ""); + end + +rule "Conclusion.0.0: Unique values of Conclusion LD50" + when + $oecdNumber: String() from List.of("402", "403", "425", "436") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $conclusions: List() from collect (Entity(type == "ld50_value")) + then + componentCreationService.joiningUnique("Conclusion.0.0", "Conclusion_LD50_mg_per_kg", $conclusions); + end + +rule "Conclusion0.1.0: Greater than found" + when + $oecdNumber: String() from List.of("402", "403", "425", "436") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $conclusions: List(!isEmpty()) from collect (Entity(type == "ld50_greater")) + then + componentCreationService.create("Conclusion.1.0", "Conclusion_LD50_Greater_than", "Greater than", "Entity of type 'ld50_greater' found", $conclusions); + end + +rule "Conclusion.1.1: Greater than not found" + when + $oecdNumber: String() from List.of("402", "403", "425", "436") + FileAttribute(label == "OECD Number", value == $oecdNumber) + not Entity(type == "ld50_greater") + then + componentCreationService.create("Conclusion.1.1", "Conclusion_LD50_Greater_than", "", "No entity of type 'ld50_greater' found"); + end + +rule "Conclusion.2.0: Minimum confidence as unique values" + when + $oecdNumber: String() from List.of("402", "403", "425", "436") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $conclusions: List() from collect (Entity(type == "confidence_minimal")) + then + componentCreationService.joiningUnique("Conclusion.2.0", "Conclusion_Minimum_Confidence", $conclusions); + end + +rule "Conclusion.3.0: Maximum confidence as unique values" + when + $oecdNumber: String() from List.of("402", "403", "425", "436") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $conclusions: List() from collect (Entity(type == "confidence_maximal")) + then + componentCreationService.joiningUnique("Conclusion.3.0", "Conclusion_Maximum_Confidence", $conclusions); + end + +rule "Necropsy.0.0: Necropsy findings from longest section" + when + FileAttribute(label == "OECD Number", value == "402") + $necropsies: List() from collect (Entity(type == "necropsy_findings")) + then + componentCreationService.joiningFromLongestSectionOnly("Necropsy.0.0", "Necropsy_Findings", $necropsies, " "); + end + +rule "Necropsy.0.1: Necropsy findings joined with \n" + when + FileAttribute(label == "OECD Number", value == "403" || value == "436") + $necropsies: List() from collect (Entity(type == "necropsy_findings")) + then + componentCreationService.joining("Necropsy.0.0", "Necropsy_Findings", $necropsies, "\n"); + end + +rule "Necropsy.1.0: Doses mg per kg of Bodyweight as one block" + when + FileAttribute(label == "OECD Number", value == "402") + $dosages: List() from collect (Entity(type == "doses_(mg_kg_bw)")) + then + componentCreationService.joining("Necropsy.1.0", "Doses_mg_per_kg_bw", $dosages, " "); + end + +rule "Necropsy.2.0: Conducted with 4 hours of exposure as one block" + when + $oecdNumber: String() from List.of("403", "436") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $exposures: List() from collect (Entity(type == "4h_exposure")) + then + componentCreationService.joining("Necropsy.3.0", "Conducted_with_4_Hours_of_Exposure", $exposures, " "); + end + +rule "StudyDesign.0.0: Study design as one block" + when + $oecdNumber: String() from List.of("404", "405", "429", "406", "428", "438", "439", "474", "487") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $studyDesigns: List() from collect (Entity(type == "study_design")) + then + componentCreationService.joining("StudyDesign.0.0", "Study_Design", $studyDesigns, " "); + end + +rule "Results.0.0: Results and conclusions as joined values" + when + $oecdNumber: String() from List.of("406", "428", "438", "439", "474", "487") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $results: List() from collect (Entity(type == "results_and_conclusion")) + then + componentCreationService.joining("Results.0.0", "Results_and_Conclusions", $results, " "); + end + +rule "WeightBehavior.0.0: Weight change behavior as sentences" + when + FileAttribute(label == "OECD Number", value == "402") + $weightChanges: List() from collect (Entity(type == "weight_behavior_changes")) + then + componentCreationService.joining("WeightBehavior.0.0", "Weight_Behavior_Changes", $weightChanges, "\n"); + end + +rule "MortalityStatement.0.0: Mortality statements as one block" + when + FileAttribute(label == "OECD Number", value == "402") + $mortalityStatements: List() from collect (Entity(type == "mortality_statement")) + then + componentCreationService.joining("MortalityStatement.0.0", "Mortality_Statement", $mortalityStatements, " "); + end + +rule "ClinicalObservations.0.0: Clinical observations as sentences" + when + FileAttribute(label == "OECD Number", value == "403") + $observations: List() from collect (Entity(type == "clinical_observations")) + then + componentCreationService.joining("MortalityStatement.0.0", "Clinical_Observations", $observations, "\n"); + end + +rule "BodyWeight.0.0: Bodyweight changes as sentences" + when + FileAttribute(label == "OECD Number", value == "403") + $weightChanges: List() from collect (Entity(type == "bodyweight_changes")) + then + componentCreationService.joining("BodyWeight.0.0", "Body_Weight_Changes", $weightChanges, "\n"); + end + +rule "Detailing.0.0: Detailing of reported changes as one block" + when + $oecdNumber: String() from List.of("404", "405") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $detailings: List() from collect (Entity(type == "detailing")) + then + componentCreationService.joining("Detailing.0.0", "Detailing_of_Reported_Changes", $detailings, " "); + end + +rule "Sex.0.0: Male sex found" + when + $oecdNumber: String() from List.of("405", "429") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $males: List(!isEmpty) from collect (Entity(type == "sex", (value.toLowerCase() == "male" || value.toLowerCase() == "males"))) + then + componentCreationService.create("Sex.0.0", "Sex", "male", "male sex found", $males); + end + +rule "Sex.1.0: Female sex found" + when + $oecdNumber: String() from List.of("405", "429") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $females: List(!isEmpty) from collect (Entity(type == "sex", (value.toLowerCase() == "female" || value.toLowerCase() == "females"))) + then + componentCreationService.create("Sex.0.0", "Sex", "female", "female sex found", $females); + end + +rule "NumberOfAnimals.0.0: Number of animals found" + when + $oecdNumber: String() from List.of("405", "429") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $numberOfAnimals: Entity(type == "number_of_animals") + then + componentCreationService.create("NumberOfAnimals.0.0", "Number_of_Animals", $numberOfAnimals.getValue(), "Number of animals found directly", $numberOfAnimals); + end + +rule "NumberOfAnimals.1.0: Count unique occurences of animals" + when + $oecdNumber: String() from List.of("405", "429") + FileAttribute(label == "OECD Number", value == $oecdNumber) + not Entity(type == "number_of_animals") + $animals: List() from collect (Entity(type == "animal_number")) + then + componentCreationService.uniqueValueCount("NumberOfAnimals.1.0", "Number_of_Animals", $animals); + end + +rule "ClinicalSigns.0.0: Clinical signs as sentences" + when + $oecdNumber: String() from List.of("425") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $clinicalSigns: List() from collect (Entity(type == "clinical_signs")) + then + componentCreationService.joining("ClinicalSigns.0.0", "Clinical_Signs", $clinicalSigns, "\n"); + end + +rule "DoseMortality.0.0: Dose mortality joined with dose from same table row" + when + $oecdNumber: String() from List.of("425") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $doseMortalities: List() from collect (Entity(type == "dose_mortality" || type == "dose_mortality_dose")) + then + componentCreationService.joiningFromSameTableRow("DoseMortality.0.0", "Dose_Mortality", $doseMortalities); + end + +rule "Mortality.0.0: Mortality as one block" + when + $oecdNumber: String() from List.of("425") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $mortalities: List() from collect (Entity(type == "mortality")) + then + componentCreationService.joining("Mortality.0.0", "Mortality", $mortalities, " "); + end + +rule "Dosages.0.0: First found value of Dosages" + when + $oecdNumber: String() from List.of("425") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $mortalities: List() from collect (Entity(type == "dosages")) + then + componentCreationService.firstOrElse("Dosages.0.0", "Dosages", $mortalities, ""); + end + +rule "PrelimResults.0.0: Preliminary test results as sentences" + when + $oecdNumber: String() from List.of("429") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $results: List() from collect (Entity(type == "preliminary_test_results")) + then + componentCreationService.joining("PrelimResults.0.0", "Preliminary_Test_Results", $results, "\n"); + end + +rule "TestResults.0.0: Test results as one block" + when + $oecdNumber: String() from List.of("429") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $results: List() from collect (Entity(type == "test_results")) + then + componentCreationService.joining("TestResults.0.0", "Test_Results", $results, " "); + end + +rule "PositiveControl.0.0: Was the definitive study conducted with positive control" + when + $oecdNumber: String() from List.of("429") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $results: List() from collect (Entity(type == "positive_control")) + then + componentCreationService.joining("PositiveControl.0.0", "Was_the_definitive_study_conducted_with_positive_control", $results, " "); + end + +rule "MainResults.0.0: Results from main study as one block" + when + $oecdNumber: String() from List.of("429") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $results: List() from collect (Entity(type == "results_(main_study)")) + then + componentCreationService.joining("MainResults.0.0", "Results_Main_Study", $results, " "); + end + +rule "UsedApproach.0.0: Used approach found and mapped to 'Group'" + when + $oecdNumber: String() from List.of("429") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $results: List(!isEmpty()) from collect (Entity(type == "approach_used")) + then + componentCreationService.create("UsedApproach.0.0", "What_was_the_approach_used", "Group", "'Group' when approach used is present, else 'Individual'", $results); + end + +rule "UsedApproach.1.0: Used approach not found and thus 'Individual'" + when + $oecdNumber: String() from List.of("429") + FileAttribute(label == "OECD Number", value == $oecdNumber) + not Entity(type == "approach_used") + then + componentCreationService.create("UsedApproach.1.0", "What_was_the_approach_used", "Individual", "'Group' when approach used is present, else 'Individual'"); + end + +/* +rule "DefaultComponents.999.0: Create components for all unmapped entities." + salience -999 + when + $allEntities: List(!isEmpty()) from collect (Entity()) + then + componentCreationService.createComponentsForUnMappedEntities("DefaultComponents.999.0", $allEntities); + end +*/ + +//------------------------------------ Component merging rules ------------------------------------ +/* +rule "X.0.0: merge duplicate component references" + when + $first: Component() + $duplicate: Component(this != $first, name == $first.name, value == $first.value) + then + $first.getReferences().addAll($duplicate.getReferences()); + retract($duplicate); + end +*/ \ No newline at end of file diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/TableDemo/Table_examples.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/TableDemo/Table_examples.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e6dea477924ad02f96fecdd24fcf1cd25930a235 GIT binary patch literal 194794 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�|JJU>`!tL2%>APBSX@R=nwcHeRr>oCpT#*=rC* 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 z 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 z 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�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%0AVz%|1!fhvFt#_=BrT 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 mKOY61O;(cP|MM^Z+izv+>h9%gX@$ Date: Wed, 25 Oct 2023 09:12:10 +0200 Subject: [PATCH 2/3] RED-7679: WIP: Added Table Demo rules according to given examples in pdf --- .../model/document/nodes/SemanticNode.java | 36 +++++++++++++ .../redaction/v1/server/AnalysisTest.java | 4 +- .../src/test/resources/drools/table_demo.drl | 54 +++++++++---------- 3 files changed, 65 insertions(+), 29 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java index 0b065ecf..ce93415f 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java @@ -424,31 +424,67 @@ public interface SemanticNode { return Arrays.stream(strings).allMatch(this::containsStringIgnoreCase); } + + /** + * Checks whether this SemanticNode contains exactly the provided String as a word. + * @param word - String which the TextBlock might contain + * @return true, if this node's TextBlock contains string + */ default boolean containsWord(String word) { return getTextBlock().getWords().stream().anyMatch(s -> s.equals(word)); } + + /** + * Checks whether this SemanticNode contains exactly the provided String as a word ignoring case. + * @param word - String which the TextBlock might contain + * @return true, if this node's TextBlock contains string + */ default boolean containsWordIgnoreCase(String word) { return getTextBlock().getWords().stream().map(String::toLowerCase).anyMatch(s -> s.equals(word.toLowerCase(Locale.ENGLISH))); } + + /** + * Checks whether this SemanticNode contains any of the provided Strings as a word. + * @param words - A List of Strings which the TextBlock might contain + * @return true, if this node's TextBlock contains any of the provided strings + */ default boolean containsAnyWord(String... words) { return Arrays.stream(words).anyMatch(word -> getTextBlock().getWords().stream().anyMatch(word::equals)); } + + /** + * Checks whether this SemanticNode contains any of the provided Strings as a word ignoring case. + * @param words - A List of Strings which the TextBlock might contain + * @return true, if this node's TextBlock contains any of the provided strings + */ default boolean containsAnyWordIgnoreCase(String... words) { return Arrays.stream(words).map(String::toLowerCase).anyMatch(word -> getTextBlock().getWords().stream().map(String::toLowerCase).anyMatch(word::equals)); } + + /** + * Checks whether this SemanticNode contains all the provided Strings as word. + * @param words - A List of Strings which the TextBlock might contain + * @return true, if this node's TextBlock contains all the provided strings + */ default boolean containsAllWords(String... words) { return Arrays.stream(words).allMatch(word -> getTextBlock().getWords().stream().anyMatch(word::equals)); } + + /** + * Checks whether this SemanticNode contains all the provided Strings as word ignoring case. + * @param words - A List of Strings which the TextBlock might contain + * @return true, if this node's TextBlock contains all the provided strings + */ default boolean containsAllWordsIgnoreCase(String... words) { return getTextBlock().getWords().stream().map(String::toLowerCase).allMatch(word -> getTextBlock().getWords().stream().anyMatch(s -> word.toLowerCase(Locale.ENGLISH).equals(s))); diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AnalysisTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AnalysisTest.java index 9965d360..24d0a52b 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AnalysisTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AnalysisTest.java @@ -21,6 +21,7 @@ import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Primary; import org.springframework.test.context.junit.jupiter.SpringExtension; +import com.iqser.red.commons.jackson.ObjectMapperFactory; import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeResult; import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; @@ -31,6 +32,7 @@ import com.iqser.red.service.redaction.v1.server.annotate.AnnotateResponse; import com.iqser.red.service.redaction.v1.server.redaction.utils.OsUtils; import com.iqser.red.storage.commons.StorageAutoConfiguration; import com.iqser.red.storage.commons.service.StorageService; +import com.iqser.red.storage.commons.utils.FileSystemBackedStorageService; import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType; import com.knecon.fforesight.service.layoutparser.processor.LayoutParsingServiceProcessorConfiguration; import com.knecon.fforesight.tenantcommons.TenantContext; @@ -79,7 +81,7 @@ public class AnalysisTest extends AbstractRedactionIntegrationTest { @Primary public StorageService inmemoryStorage() { - return new FileSystemBackedStorageService(); + return new FileSystemBackedStorageService(ObjectMapperFactory.create()); } } diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo.drl index 31657538..69015695 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo.drl @@ -54,8 +54,6 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRecategorization; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualLegalBasisChange; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus -import java.util.function.Function -import com.iqser.red.service.redaction.v1.server.model.dictionary.SearchImplementation; global Document document global EntityCreationService entityCreationService @@ -90,15 +88,15 @@ rule "TAB.0.1: Guidelines" $section: Section(containsAnyString("DATA REQUIREMENT", "TEST GUIDELINE", "MÉTODO(S) DE REFERÊNCIA(S):") && containsAnyString("OECD", "EPA", "OPPTS")) then entityCreationService.byRegex("(?<=OECD)(?:[\\w\\s,\\[\\]\\(\\)\\.]{1,10}|.{5,40}(?:Number |Procedure |Guideline ))(4[\\d]{2})", "oecd_guideline_number", EntityType.ENTITY, 1, $section) - .forEach(guideline -> guideline.redact("TAB.0.1", "OECD Guideline no. found", "n-a")); + .forEach(guideline -> guideline.apply("TAB.0.1", "OECD Guideline no. found")); entityCreationService.byRegex("(?<=OECD)(?:[\\w\\s,\\[\\]\\(\\)\\.]{1,10}|.{5,40}(?:Number |Procedure |Guideline ))(4[\\d]{2}),?\\s\\(?(\\d{4})\\)?", "oecd_guideline_year", EntityType.ENTITY, 2, $section) - .forEach(guideline -> guideline.redact("TAB.0.1", "OECD Guideline year found", "n-a")); + .forEach(guideline -> guideline.apply("TAB.0.1", "OECD Guideline year found")); entityCreationService.byRegex("(?<=OECD)[\\w\\s,\\[\\]]{1,10}\\((\\d{4})\\)\\s(4[\\d]{2})", "oecd_guideline_year", EntityType.ENTITY, 1, $section) - .forEach(guideline -> guideline.redact("TAB.0.1", "OECD Guideline year found", "n-a")); + .forEach(guideline -> guideline.apply("TAB.0.1", "OECD Guideline year found")); entityCreationService.byRegex("(?<=OECD).{5,40}Method (4[\\d]{2}).{1,65}(\\d{4})\\)", "oecd_guideline_number", EntityType.ENTITY, 1, $section) - .forEach(guideline -> guideline.redact("TAB.0.1", "OECD Guideline number found", "n-a")); + .forEach(guideline -> guideline.apply("TAB.0.1", "OECD Guideline number found")); entityCreationService.byRegex("(?<=OECD).{5,40}Method (4[\\d]{2}).{1,65}(\\d{4})\\)", "oecd_guideline_year", EntityType.ENTITY, 2, $section) - .forEach(guideline -> guideline.redact("TAB.0.1", "OECD Guideline year found", "n-a")); + .forEach(guideline -> guideline.apply("TAB.0.1", "OECD Guideline year found")); end rule "TAB.1.0: Full Table extraction (Guideline Deviation)" @@ -134,36 +132,35 @@ rule "TAB.3.0: Individual column extraction (Strain)" .map(tableCell -> entityCreationService.bySemanticNode(tableCell, "dosages", EntityType.ENTITY)) .filter(Optional::isPresent) .map(Optional::get) - .forEach(redactionEntity -> redactionEntity.redact("TAB.3.0", "Individual column based on column header", "n-a")); + .forEach(redactionEntity -> redactionEntity.apply("TAB.3.0", "Individual column based on column header")); end -rule "TAB.4.0: Dose Mortality" +rule "TAB.4.0: Combined Columns Extraction - Sex and Dosage" when FileAttribute(label == "OECD Number", valueEqualsAnyOf("425")) $section: Section(getHeadline().containsString("Combined Columns")) $table: Table(hasHeader("Sex"), hasHeader("Dosage (mg/kg bw)")) from $section.getParent().streamAllSubNodesOfType(NodeType.TABLE).toList() - TableCell($row: row, containsAnyWordIgnoreCase("Male")) from $table.streamTableCellsWithHeader("Sex").toList() - $tableCell: TableCell($row == row, containsStringIgnoreCase("Dosage")) from $table.streamTableCells().toList() -// $male_dosage: TableCell($row == row) from $table.streamTableCellsWithHeader("Dosage").toList()) + $maleCells: TableCell($row: row, containsAnyWordIgnoreCase("Male")) from $table.streamTableCellsWithHeader("Sex").toList() + $dosageCells: TableCell($row == row) from $table.streamTableCellsWithHeader("Dosage").toList() then - System.out.println("BBBB: " + $tableCell); -// $table.streamTableCellsWithHeader("Mortality") -// .map(tableCell -> entityCreationService.bySemanticNode(tableCell, "dose_mortality", EntityType.ENTITY)) -// .filter(Optional::isPresent) -// .map(Optional::get) -// .forEach(redactionEntity -> redactionEntity.redact("TAB.0.5", "Dose Mortality found", "n-a")); -// $table.streamTableCellsWithHeader("Dosage (mg/kg bw)") -// .map(tableCell -> entityCreationService.bySemanticNode(tableCell, "dose_mortality_dose", EntityType.ENTITY)) -// .filter(Optional::isPresent) -// .map(Optional::get) -// .forEach(redactionEntity -> redactionEntity.redact("TAB.0.5", "Dose Mortality dose found", "n-a")); + entityCreationService.bySemanticNode($maleCells, "combined_male_dosage", EntityType.ENTITY) + .ifPresent(entity -> entity.apply("TAB.4.0", "Dosage combined in row with male")); + entityCreationService.bySemanticNode($dosageCells, "combined_male_dosage", EntityType.ENTITY) + .ifPresent(entity -> entity.apply("TAB.4.0", "Dosage combined in row with male")); end -rule "TAB.4.1: sdsdf" +rule "TAB.4.1: Combined Columns Extraction - Sex and Mortality" when - + FileAttribute(label == "OECD Number", valueEqualsAnyOf("425")) + $section: Section(getHeadline().containsString("Combined Columns")) + $table: Table(hasHeader("Sex"), hasHeader("Mortality")) from $section.getParent().streamAllSubNodesOfType(NodeType.TABLE).toList() + $femaleCells: TableCell($row: row, containsAnyWordIgnoreCase("Female")) from $table.streamTableCellsWithHeader("Sex").toList() + $mortalityCells: TableCell($row == row) from $table.streamTableCellsWithHeader("Mortality").toList() then - + entityCreationService.bySemanticNode($femaleCells, "combined_female_mortality", EntityType.ENTITY) + .ifPresent(entity -> entity.apply("TAB.4.1", "Mortality combined in row with female")); + entityCreationService.bySemanticNode($mortalityCells, "combined_female_mortality", EntityType.ENTITY) + .ifPresent(entity -> entity.apply("TAB.4.1", "Mortality combined in row with female")); end rule "TAB.5.0: Targeted cell extraction" @@ -187,7 +184,8 @@ rule "TAB.6.0: Targeted cell extraction (Experimental Stop date)" TableCell($row == row, containsStringIgnoreCase("Survived")) from $table.streamTableCellsWithHeader("Group 2").toList() $femaleSurvived: TableCell($row == row) from $table.streamTableCellsWithHeader("Group 2").toList() then - entityCreationService.bySemanticNode($femaleSurvived, "experiment_female_survived", EntityType.ENTITY).ifPresent(entity -> entity.redact("TAB.6.0", "Female in group to experimental start date", "n-a")); + entityCreationService.bySemanticNode($femaleSurvived, "experiment_female_survived", EntityType.ENTITY) + .ifPresent(entity -> entity.apply("TAB.6.0", "Female in group to experimental start date")); end rule "TAB.7.0: Indicator (Species)" @@ -200,7 +198,7 @@ rule "TAB.7.0: Indicator (Species)" $cell: TableCell($col == col, $row == row) from $table.streamTableCells().toList() then entityCreationService.bySemanticNode($cell, "study_design", EntityType.ENTITY) - .ifPresent(redactionEntity -> redactionEntity.redact("TAB.7.0", "Vertebrate study found", "n-a")); + .ifPresent(redactionEntity -> redactionEntity.apply("TAB.7.0", "Vertebrate study found")); end //------------------------------------ Manual redaction rules ------------------------------------ -- 2.47.2 From 59c6ca3b5d2a5e1dba7eb0814cbbd70f30537ab1 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Wed, 25 Oct 2023 12:49:22 +0200 Subject: [PATCH 3/3] RED-7679: WIP: Added Table Demo rules according to given examples in pdf --- .../v1/server/service/document/EntityCreationService.java | 8 -------- .../red/service/redaction/v1/server/AnalysisTest.java | 2 ++ 2 files changed, 2 insertions(+), 8 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 1fe278ec..bdfa11d5 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 @@ -216,8 +216,6 @@ public class EntityCreationService { public Stream betweenRegexes(String regexStart, String regexStop, String type, EntityType entityType, SemanticNode node) { - checkIfBothStartAndEndAreEmpty(regexStart, regexStop); - TextBlock textBlock = node.getTextBlock(); List startBoundaries = RedactionSearchUtility.findTextRangesByRegex(regexStart, textBlock); List stopBoundaries = RedactionSearchUtility.findTextRangesByRegex(regexStop, textBlock); @@ -228,8 +226,6 @@ public class EntityCreationService { public Stream betweenRegexesIgnoreCase(String regexStart, String regexStop, String type, EntityType entityType, SemanticNode node) { - checkIfBothStartAndEndAreEmpty(regexStart, regexStop); - TextBlock textBlock = node.getTextBlock(); List startBoundaries = RedactionSearchUtility.findTextRangesByRegexIgnoreCase(regexStart, 0, textBlock); List stopBoundaries = RedactionSearchUtility.findTextRangesByRegexIgnoreCase(regexStop, 0, textBlock); @@ -239,16 +235,12 @@ public class EntityCreationService { public Stream betweenTextRanges(List startBoundaries, List stopBoundaries, String type, EntityType entityType, SemanticNode node) { - checkIfBothStartAndEndAreEmpty(startBoundaries, stopBoundaries); - return betweenTextRanges(startBoundaries, stopBoundaries, type, entityType, node,0); } public Stream betweenTextRanges(List startBoundaries, List stopBoundaries, String type, EntityType entityType, SemanticNode node, int limit) { - checkIfBothStartAndEndAreEmpty(startBoundaries, stopBoundaries); - List entityBoundaries = findNonOverlappingBoundariesBetweenBoundariesWithMinimalDistances(startBoundaries, stopBoundaries); return entityBoundaries.stream() .filter(range -> (limit == 0 || range.length() <= limit)) diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AnalysisTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AnalysisTest.java index 24d0a52b..87c73e96 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AnalysisTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AnalysisTest.java @@ -8,6 +8,7 @@ import java.io.IOException; import java.util.List; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -47,6 +48,7 @@ public class AnalysisTest extends AbstractRedactionIntegrationTest { @Test + @Disabled public void analyzeTableDemoFile() { AnalyzeRequest request = uploadFileToStorage("files/TableDemo/Table_examples.pdf"); -- 2.47.2