From 1098784e2d9d54492fe696e02158af7e0f34c1a8 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Thu, 26 Oct 2023 16:13:57 +0200 Subject: [PATCH 1/4] RED-7679: Changed joining from same table row --- .../v1/server/service/document/ComponentCreationService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java index 98d1194e..36c3df69 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java @@ -429,7 +429,8 @@ public class ComponentCreationService { .sorted(Comparator.comparingInt(Map.Entry::getKey)) .map(Map.Entry::getValue) .forEach(entitiesInSameRow -> create(ruleIdentifier, - name, entitiesInSameRow.stream().sorted(EntityComparators.first()).map(Entity::getValue).collect(Collectors.joining(", ")), + name, + entitiesInSameRow.stream().sorted(EntityComparators.first()).map(Entity::getValue).collect(Collectors.joining(", ")), valueDescription, entitiesInSameRow)); }); -- 2.47.2 From db89e95105469dddbd83392937487ac023d301bc Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Fri, 27 Oct 2023 13:10:41 +0200 Subject: [PATCH 2/4] RED-7679: logs for debugging --- .../v1/server/service/document/ComponentCreationService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java index 36c3df69..c40ccd3f 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java @@ -100,6 +100,8 @@ public class ComponentCreationService { */ public void create(String ruleIdentifier, String name, String value, String valueDescription, Collection references) { + System.out.println("AAAA: " + ruleIdentifier + " ; " + name + " ; " + value + " ; " + valueDescription + " ; " + references); + referencedEntities.addAll(references); kieSession.insert(Component.builder().matchedRule(RuleIdentifier.fromString(ruleIdentifier)).name(name).value(value).valueDescription(valueDescription) -- 2.47.2 From 0ba9c90f92b5c82c5364dbaabf441e2787a63b56 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Fri, 27 Oct 2023 17:08:16 +0200 Subject: [PATCH 3/4] RED-7679: changed stream to get row number to differ between same named components --- .../document/ComponentCreationService.java | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java index c40ccd3f..7be7d1d3 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java @@ -104,7 +104,11 @@ public class ComponentCreationService { referencedEntities.addAll(references); - kieSession.insert(Component.builder().matchedRule(RuleIdentifier.fromString(ruleIdentifier)).name(name).value(value).valueDescription(valueDescription) + kieSession.insert(Component.builder() + .matchedRule(RuleIdentifier.fromString(ruleIdentifier)) + .name(name) + .value(value) + .valueDescription(valueDescription) .references(new LinkedList<>(references)) .build()); } @@ -356,7 +360,9 @@ public class ComponentCreationService { */ public void createComponentsForUnMappedEntities(String ruleIdentifier, Collection entities) { - entities.stream().filter(entity -> !referencedEntities.contains(entity)).sorted(EntityComparators.first()) + entities.stream() + .filter(entity -> !referencedEntities.contains(entity)) + .sorted(EntityComparators.first()) .forEach(entity -> create(ruleIdentifier, entity.getType(), entity.getValue(), "Unmapped Entity", List.of(entity))); } @@ -429,12 +435,16 @@ public class ComponentCreationService { .entrySet() .stream() .sorted(Comparator.comparingInt(Map.Entry::getKey)) - .map(Map.Entry::getValue) - .forEach(entitiesInSameRow -> create(ruleIdentifier, - name, - entitiesInSameRow.stream().sorted(EntityComparators.first()).map(Entity::getValue).collect(Collectors.joining(", ")), - valueDescription, - entitiesInSameRow)); +// .map(Map.Entry::getValue) + .forEach(integerListEntry -> { + var rowNumber = integerListEntry.getKey(); + var entitiesInSameRow = integerListEntry.getValue(); + create(ruleIdentifier, + name + rowNumber, + entitiesInSameRow.stream().sorted(EntityComparators.first()).map(Entity::getValue).collect(Collectors.joining(", ")), + valueDescription, + entitiesInSameRow); + }); }); } @@ -477,7 +487,9 @@ public class ComponentCreationService { */ public void create(String ruleIdentifier, String name, String value) { - kieSession.insert(Component.builder().matchedRule(RuleIdentifier.fromString(ruleIdentifier)).name(name) + kieSession.insert(Component.builder() + .matchedRule(RuleIdentifier.fromString(ruleIdentifier)) + .name(name) .value(value) .valueDescription("") .references(Collections.emptyList()) -- 2.47.2 From 856ae9e739cff779e0f2edaea7329d61a8c08ba8 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Tue, 31 Oct 2023 08:37:06 +0100 Subject: [PATCH 4/4] RED-7679: Updated table demo rules for entities and components --- .../document/ComponentCreationService.java | 3 +- .../src/test/resources/drools/table_demo.drl | 26 ++++---- .../drools/table_demo_components.drl | 64 +++++++++++++++++++ 3 files changed, 77 insertions(+), 16 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java index 7be7d1d3..3b9a783d 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java @@ -435,12 +435,11 @@ public class ComponentCreationService { .entrySet() .stream() .sorted(Comparator.comparingInt(Map.Entry::getKey)) -// .map(Map.Entry::getValue) .forEach(integerListEntry -> { var rowNumber = integerListEntry.getKey(); var entitiesInSameRow = integerListEntry.getValue(); create(ruleIdentifier, - name + rowNumber, + name + " " + rowNumber, entitiesInSameRow.stream().sorted(EntityComparators.first()).map(Entity::getValue).collect(Collectors.joining(", ")), valueDescription, entitiesInSameRow); 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 69015695..bdd92ef9 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 @@ -139,28 +139,26 @@ 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() - $maleCells: TableCell($row: row, containsAnyWordIgnoreCase("Male")) from $table.streamTableCellsWithHeader("Sex").toList() - $dosageCells: TableCell($row == row) from $table.streamTableCellsWithHeader("Dosage").toList() + $table: Table(hasHeader("Dosage (mg/kg bw)")) from $section.getParent().streamAllSubNodesOfType(NodeType.TABLE).toList() then - 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")); + $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.apply("TAB.4.0", "Dose Mortality dose found.")); end 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() + $table: Table(hasHeader("Mortality")) from $section.getParent().streamAllSubNodesOfType(NodeType.TABLE).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")); + $table.streamTableCellsWithHeader("Mortality") + .map(tableCell -> entityCreationService.bySemanticNode(tableCell, "dose_mortality", EntityType.ENTITY)) + .filter(Optional::isPresent) + .map(Optional::get) + .forEach(redactionEntity -> redactionEntity.apply("TAB.4.1", "Dose Mortality found.")); end rule "TAB.5.0: Targeted cell extraction" 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 index f1d18f26..61d07425 100644 --- 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 @@ -45,6 +45,70 @@ declare GuidelineMapping guideline: String end +//------------------------------------ Demo Components rules ------------------------------------ + +rule "FullTable.1.1: All rows of matching table" + when + $tableRowValues: List() from collect (Entity(type == "full_table_row")) + then + componentCreationService.joiningFromSameTableRow("FullTable.1.1", "Full Table", $tableRowValues); + end + + +rule "IndivRowExtr.1.2: Individual rows of table" + when + $oecdNumber: String() from List.of("425") + FileAttribute(label == "OECD Number", value == $oecdNumber) + $clinicalSigns: List() from collect (Entity(type == "clinical_signs")) + then + componentCreationService.joining("IndivRowExtr.1.2", "Extracted experiment", $clinicalSigns, "\n"); + end + + +rule "IndivColExtr.1.3: Individual column of table" + when + $tableColValues: List() from collect (Entity(type == "dosages")) + then + componentCreationService.joining("IndivColExtr.1.3", "Dosages", $tableColValues); + end + + +/* +rule "CombColExtr.2.1: Combined Columns Extraction" + 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 "ValueExtrRef.2.2: Cells containing dose for survived males" + when + $tableValues: List() from collect (Entity(type == "doses_mg_kg_bw")) + then + componentCreationService.joining("ValueExtrRef.2.2", "Doses", $tableValues); + end + + +rule "AdvTableExtr.2.3: Cells containing dose for survived males" + when + $tableValues: List() from collect (Entity(type == "experiment_female_survived")) + then + componentCreationService.joining("AdvTableExtr.2.3", "Experiment Female Survived", $tableValues); + end + + +rule "EntityBasedExtr.2.4: Cells containing dose for survived males" + when + $tableValues: List() from collect (Entity(type == "study_design")) + then + componentCreationService.joiningFromSameTableRow("EntityBasedExtr.2.4", "Vertebrate in row", $tableValues); + end + + //------------------------------------ Default Components rules ------------------------------------ rule "StudyTitle.0.0: First Title found" -- 2.47.2