diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/BlockificationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/BlockificationService.java index 3a089db4..0ba9049a 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/BlockificationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/BlockificationService.java @@ -45,6 +45,7 @@ public class BlockificationService { for (TextPositionSequence word : textPositions) { boolean lineSeparation = minY - word.getY2() > word.getHeight() * 1.25; + boolean lineSeparation2 = prev != null && minY - word.getY2() > word.getHeight() * 0.75 && word.getFontSize() != prev.getFontSize(); boolean startFromTop = word.getY1() > maxY + word.getHeight(); boolean splitByX = prev != null && maxX + 50 < word.getX1() && prev.getY1() == word.getY1(); boolean newLineAfterSplit = prev != null && word.getY1() != prev.getY1() && wasSplitted && splitX1 != word.getX1(); @@ -53,7 +54,9 @@ public class BlockificationService { .getRotation() == 90 && isSplittedByRuling(maxX, minY, word.getX1(), word.getY1(), horizontalRulingLines) || word .getRotation() == 90 && isSplittedByRuling(minX, minY, word.getX1(), word.getY2(), verticalRulingLines); - if (prev != null && (lineSeparation || startFromTop || splitByX || newLineAfterSplit || splittedByRuling)) { + boolean isOtherFont = prev != null && word.getFontStyle() != prev.getFontStyle(); + + if (prev != null && (lineSeparation || startFromTop || splitByX || newLineAfterSplit || splittedByRuling || lineSeparation2 || isOtherFont)) { Orientation prevOrientation = null; if (!chunkBlockList1.isEmpty()) { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/ClassificationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/ClassificationService.java index f785620f..63a24e77 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/ClassificationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/ClassificationService.java @@ -1,9 +1,11 @@ package com.iqser.red.service.redaction.v1.server.classification.service; import com.iqser.red.service.redaction.v1.server.classification.model.Document; +import com.iqser.red.service.redaction.v1.server.classification.model.Orientation; import com.iqser.red.service.redaction.v1.server.classification.model.Page; import com.iqser.red.service.redaction.v1.server.classification.model.TextBlock; import com.iqser.red.service.redaction.v1.server.classification.utils.PositionUtils; +import com.iqser.red.service.redaction.v1.server.redaction.utils.Patterns; import com.iqser.red.service.redaction.v1.server.tableextraction.model.AbstractTextContainer; import com.iqser.red.service.redaction.v1.server.tableextraction.model.Rectangle; import lombok.RequiredArgsConstructor; @@ -11,6 +13,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Locale; +import java.util.regex.Matcher; import java.util.regex.Pattern; @Slf4j @@ -51,10 +55,18 @@ public class ClassificationService { public void classifyBlock(TextBlock textBlock, Rectangle bodyTextFrame, Page page, Document document, List headlineFontSizes) { - if (document.getFontSizeCounter().getMostPopular() == null) { - textBlock.setClassification("Other"); - return; - } + var pattern = Patterns.getCompiledPattern("^(\\d{1,2}\\.){1,3}\\d{0,2}\\s[A-Za-z]{3,50}", true); + var pattern2 = Patterns.getCompiledPattern(".*\\d$", true); + + Matcher matcher = pattern.matcher(textBlock.toString()); + Matcher matcher2 = pattern2.matcher(textBlock.toString()); + + + +// if (document.getFontSizeCounter().getMostPopular() == null) { +// textBlock.setClassification("Other"); +// return; +// } if (PositionUtils.isOverBodyTextFrame(bodyTextFrame, textBlock, page.isRotated()) && (document.getFontSizeCounter() .getMostPopular() == null || textBlock.getHighestFontSize() <= document.getFontSizeCounter() .getMostPopular())) { @@ -64,55 +76,54 @@ public class ClassificationService { .getMostPopular() == null || textBlock.getHighestFontSize() <= document.getFontSizeCounter() .getMostPopular())) { textBlock.setClassification("Footer"); - } else if (page.getPageNumber() == 1 && (!PositionUtils.isTouchingUnderBodyTextFrame(bodyTextFrame, textBlock) && PositionUtils - .getHeightDifferenceBetweenChunkWordAndDocumentWord(textBlock, document.getTextHeightCounter() - .getMostPopular()) > 2.5 && textBlock.getHighestFontSize() > document.getFontSizeCounter() - .getMostPopular() || page.getTextBlocks().size() == 1)) { - if (!Pattern.matches("[0-9]+", textBlock.toString())) { - textBlock.setClassification("Title"); - } - } else if (PositionUtils.isWithinBodyTextFrame(bodyTextFrame, textBlock) && textBlock.getMostPopularWordFontSize() > document - .getFontSizeCounter() - .getMostPopular() && PositionUtils.getApproxLineCount(textBlock) < 4.9 && (textBlock.getMostPopularWordStyle() - .equals("bold") || !document.getFontStyleCounter().getCountPerValue().containsKey("bold") && textBlock.getMostPopularWordFontSize() > document - .getFontSizeCounter() - .getMostPopular() + 1) && textBlock.getSequences().get(0).getTextPositions().get(0).getFontSizeInPt() >= textBlock.getMostPopularWordFontSize()) { +// } else if (page.getPageNumber() == 1 && (!PositionUtils.isTouchingUnderBodyTextFrame(bodyTextFrame, textBlock) && PositionUtils +// .getHeightDifferenceBetweenChunkWordAndDocumentWord(textBlock, document.getTextHeightCounter() +// .getMostPopular()) > 2.5 && textBlock.getHighestFontSize() > document.getFontSizeCounter() +// .getMostPopular() || page.getTextBlocks().size() == 1)) { +// if (!Pattern.matches("[0-9]+", textBlock.toString())) { +// textBlock.setClassification("Title"); +// } + } else + if (textBlock.getText().length() > 5 && textBlock.getMostPopularWordHeight() > document.getTextHeightCounter().getMostPopular() && PositionUtils.getApproxLineCount(textBlock) < 2.9 + && !textBlock.getOrientation().equals(Orientation.RIGHT) - for (int i = 1; i <= headlineFontSizes.size(); i++) { - if (textBlock.getMostPopularWordFontSize() == headlineFontSizes.get(i - 1)) { - textBlock.setClassification("H " + i); + && (textBlock.getMostPopularWordStyle().contains("bold") || textBlock.toString().equals(textBlock.toString().toUpperCase(Locale.ROOT)))) { + textBlock.setClassification("H 1"); document.setHeadlines(true); - } - } - } else if (!textBlock.getText().startsWith("Table ") && !textBlock.getText() - .startsWith("Figure ") && PositionUtils.isWithinBodyTextFrame(bodyTextFrame, textBlock) && textBlock.getMostPopularWordStyle() - .equals("bold") && !document.getFontStyleCounter() - .getMostPopular() - .equals("bold") && PositionUtils.getApproxLineCount(textBlock) < 2.9 && textBlock.getSequences().get(0).getTextPositions().get(0).getFontSizeInPt() >= textBlock.getMostPopularWordFontSize()) { - textBlock.setClassification("H " + (headlineFontSizes.size() + 1)); - document.setHeadlines(true); - } else if (PositionUtils.isWithinBodyTextFrame(bodyTextFrame, textBlock) && textBlock.getMostPopularWordFontSize() == document - .getFontSizeCounter() - .getMostPopular() && textBlock.getMostPopularWordStyle() - .equals("bold") && !document.getFontStyleCounter().getMostPopular().equals("bold")) { - textBlock.setClassification("TextBlock Bold"); - } else if (PositionUtils.isWithinBodyTextFrame(bodyTextFrame, textBlock) && textBlock.getMostPopularWordFont() - .equals(document.getFontCounter().getMostPopular()) && textBlock.getMostPopularWordStyle() - .equals(document.getFontStyleCounter() - .getMostPopular()) && textBlock.getMostPopularWordFontSize() == document.getFontSizeCounter() - .getMostPopular()) { + + } else + if(matcher.find() && PositionUtils.getApproxLineCount(textBlock) < 2.9 && !matcher2.find()) { + textBlock.setClassification("H 2"); + document.setHeadlines(true); + } +// else if (textBlock.getMostPopularWordStyle().equals("bold") && !document.getFontStyleCounter() +// .getMostPopular() +// .equals("bold") && PositionUtils.getApproxLineCount(textBlock) < 2.9 && textBlock.getSequences().get(0).getTextPositions().get(0).getFontSizeInPt() >= textBlock.getMostPopularWordFontSize()) { +// textBlock.setClassification("H " + (headlineFontSizes.size() + 1)); +// document.setHeadlines(true); +// } +// else if (PositionUtils.isWithinBodyTextFrame(bodyTextFrame, textBlock) && textBlock.getMostPopularWordFontSize() == document +// .getFontSizeCounter() +// .getMostPopular() && textBlock.getMostPopularWordStyle() +// .equals("bold") && !document.getFontStyleCounter().getMostPopular().equals("bold")) { +// textBlock.setClassification("TextBlock Bold"); +// } else if (PositionUtils.isWithinBodyTextFrame(bodyTextFrame, textBlock) && textBlock.getMostPopularWordFont() +// .equals(document.getFontCounter().getMostPopular()) && textBlock.getMostPopularWordStyle() +// .equals(document.getFontStyleCounter() +// .getMostPopular()) && textBlock.getMostPopularWordFontSize() == document.getFontSizeCounter() +// .getMostPopular()) { +// textBlock.setClassification("TextBlock"); +// } else if (PositionUtils.isWithinBodyTextFrame(bodyTextFrame, textBlock) && textBlock.getMostPopularWordFontSize() == document +// .getFontSizeCounter() +// .getMostPopular() && textBlock.getMostPopularWordStyle() +// .equals("italic") && !document.getFontStyleCounter() +// .getMostPopular() +// .equals("italic") && PositionUtils.getApproxLineCount(textBlock) < 2.9) { +// textBlock.setClassification("TextBlock Italic"); +// } else if (PositionUtils.isWithinBodyTextFrame(bodyTextFrame, textBlock)) { +// textBlock.setClassification("TextBlock Unknown"); + else { textBlock.setClassification("TextBlock"); - } else if (PositionUtils.isWithinBodyTextFrame(bodyTextFrame, textBlock) && textBlock.getMostPopularWordFontSize() == document - .getFontSizeCounter() - .getMostPopular() && textBlock.getMostPopularWordStyle() - .equals("italic") && !document.getFontStyleCounter() - .getMostPopular() - .equals("italic") && PositionUtils.getApproxLineCount(textBlock) < 2.9) { - textBlock.setClassification("TextBlock Italic"); - } else if (PositionUtils.isWithinBodyTextFrame(bodyTextFrame, textBlock)) { - textBlock.setClassification("TextBlock Unknown"); - } else { - textBlock.setClassification("Other"); } } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/segmentation/SectionsBuilderService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/segmentation/SectionsBuilderService.java index f3401ec4..acb7a242 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/segmentation/SectionsBuilderService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/segmentation/SectionsBuilderService.java @@ -68,7 +68,7 @@ public class SectionsBuilderService { continue; } - if (prev != null && current.getClassification().startsWith("H ") && !prev.getClassification().startsWith("H ") || !document.isHeadlines()) { + if (prev != null && current.getClassification().startsWith("H ") || !document.isHeadlines()) { Paragraph chunkBlock = buildTextBlock(chunkWords, lastHeadline); chunkBlock.setHeadline(lastHeadline); if (document.isHeadlines()) { diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java index fe31be8b..a4c20fe3 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java @@ -334,7 +334,9 @@ public class RedactionIntegrationTest { @Test public void titleExtraction() throws IOException { - ClassPathResource pdfFileResource = new ClassPathResource("files/RSS/32 - Emamectin Benzoate Technical - Acute Oral Toxicity - Mouse.pdf"); + System.out.println("Detailed quantitative and qualitative information on the composition of the plant ".length()); + + ClassPathResource pdfFileResource = new ClassPathResource("files/Trinexapac/91 Trinexapac-ethyl_RAR_01_Volume_1_2018-02-23.pdf"); AnalyzeRequest request = prepareStorage(pdfFileResource.getInputStream()); analyzeService.analyzeDocumentStructure(new StructureAnalyzeRequest(request.getDossierId(), request.getFileId())); @@ -1094,7 +1096,7 @@ public class RedactionIntegrationTest { public void classificationTest() throws IOException { System.out.println("classificationTest"); - ClassPathResource pdfFileResource = new ClassPathResource("files/RSS/01 - CGA100251 - Acute Oral Toxicity (Up and Down Procedure) - Rat (1).pdf"); + ClassPathResource pdfFileResource = new ClassPathResource("files/Trinexapac/91 Trinexapac-ethyl_RAR_01_Volume_1_2018-02-23.pdf"); AnalyzeRequest request = prepareStorage(pdfFileResource.getInputStream()); diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl index d9d1622d..913e731b 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl @@ -15,379 +15,9 @@ global Section section // end -rule "0: Add CBI_author from ai" - when - Section(aiMatchesType("CBI_author")) - then - section.addAiEntities("CBI_author", "CBI_author"); - end - -rule "0: Combine ai types CBI_author from ai" - when - Section(aiMatchesType("ORG")) - then - section.combineAiTypes("ORG", "STREET,POSTAL,COUNTRY,CARDINAL,CITY,STATE", 20, "CBI_address", 3, false); - end - -rule "0: Expand CBI Authors with firstname initials" - when - Section(matchesType("CBI_author")) - then - section.expandByRegEx("CBI_author", "(,? [A-Z]\\.?( ?[A-Z]\\.?)?( ?[A-Z]\\.?)?\\b\\.?)", false, 1, "[^\\s]+"); - end - -rule "0: Expand CBI_author and PII matches with salutation prefix" - when - Section((matchesType("CBI_author") || matchesType("PII")) && ( - searchText.contains("Mr") - || searchText.contains("Mrs") - || searchText.contains("Ms") - || searchText.contains("Miss") - || searchText.contains("Sir") - || searchText.contains("Madam") - || searchText.contains("Madame") - || searchText.contains("Mme") - )) - then - section.expandByPrefixRegEx("CBI_author", "\\b(Mrs?|Ms|Miss|Sir|Madame?|Mme)\\s?\\.?\\s*", false, 0); - section.expandByPrefixRegEx("PII", "\\b(Mrs?|Ms|Miss|Sir|Madame?|Mme)\\s?\\.?\\s*", false, 0); - end - - -rule "1: Redacted because Section contains Vertebrate" - when - Section(matchesType("vertebrate")) - then - section.redact("CBI_author", 1, "Vertebrate found", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - section.redact("CBI_address", 1, "Vertebrate found", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - end - - -rule "2: Not Redacted because Section contains no Vertebrate" - when - Section(!matchesType("vertebrate")) - then - section.redactNot("CBI_author", 2, "No Vertebrate found"); - section.redactNot("CBI_address", 2, "No Vertebrate found"); - end - - -rule "3: Do not redact Names and Addresses if no redaction Indicator is contained" - when - Section(matchesType("vertebrate"), matchesType("no_redaction_indicator")) - then - section.redactNot("CBI_author", 3, "Vertebrate and No Redaction Indicator found"); - section.redactNot("CBI_address", 3, "Vertebrate and No Redaction Indicator found"); - end - - -rule "4: Redact Names and Addresses if no_redaction_indicator and redaction_indicator is contained" - when - Section(matchesType("vertebrate"), matchesType("no_redaction_indicator"), matchesType("redaction_indicator")) - then - section.redact("CBI_author", 4, "Vertebrate and Redaction Indicator found", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - section.redact("CBI_address", 4, "Vertebrate and Redaction Indicator found", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - end - - -rule "5: Do not redact Names and Addresses if no redaction Indicator is contained" - when - Section(matchesType("vertebrate"), matchesType("published_information")) - then - section.redactNotAndReference("CBI_author","published_information", 5, "Vertebrate and Published Information found"); - section.redactNotAndReference("CBI_address","published_information", 5, "Vertebrate and Published Information found"); - end - - -rule "6: Not redacted because Vertebrate Study = N" - when - Section(rowEquals("Vertebrate study Y/N", "N") || rowEquals("Vertebrate study Y/N", "No")) - then - section.redactNotCell("Author(s)", 6, "CBI_author", true, "Not redacted because row is not a vertebrate study"); - section.redactNot("CBI_author", 6, "Not redacted because row is not a vertebrate study"); - section.redactNot("CBI_address", 6, "Not redacted because row is not a vertebrate study"); - section.highlightCell("Vertebrate study Y/N", 6, "hint_only"); - end - - -rule "7: Redact if must redact entry is found" - when - Section(matchesType("must_redact")) - then - section.redact("CBI_author", 7, "must_redact entry was found.", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - section.redact("CBI_address", 7, "must_redact entry was found.", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - end - - -rule "8: Redact Authors and Addresses in Reference Table if it is a Vertebrate study" - when - Section(rowEquals("Vertebrate study Y/N", "Y") || rowEquals("Vertebrate study Y/N", "Yes")) - then - section.redactCell("Author(s)", 8, "CBI_author", true, "Redacted because row is a vertebrate study", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - section.redact("CBI_address", 8, "Redacted because row is a vertebrate study", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - section.highlightCell("Vertebrate study Y/N", 8, "must_redact"); - end - - -rule "9: Redact sponsor company" - when - Section(searchText.toLowerCase().contains("batches produced at")) - then - section.redactIfPrecededBy("batches produced at", "CBI_sponsor", 9, "Redacted because it represents a sponsor company", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - section.addHintAnnotation("batches produced at", "must_redact"); - end - - -rule "10: Redact determination of residues" - when - Section(( - searchText.toLowerCase.contains("determination of residues") || - searchText.toLowerCase.contains("determination of total residues") - ) && ( - searchText.toLowerCase.contains("livestock") || - searchText.toLowerCase.contains("live stock") || - searchText.toLowerCase.contains("tissue") || - searchText.toLowerCase.contains("tissues") || - searchText.toLowerCase.contains("liver") || - searchText.toLowerCase.contains("muscle") || - searchText.toLowerCase.contains("bovine") || - searchText.toLowerCase.contains("ruminant") || - searchText.toLowerCase.contains("ruminants") - )) - then - section.redact("CBI_author", 10, "Determination of residues was found.", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - section.redact("CBI_address", 10, "Determination of residues was found.", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - section.addHintAnnotation("determination of residues", "must_redact"); - section.addHintAnnotation("livestock", "must_redact"); - section.addHintAnnotation("live stock", "must_redact"); - section.addHintAnnotation("tissue", "must_redact"); - section.addHintAnnotation("tissues", "must_redact"); - section.addHintAnnotation("liver", "must_redact"); - section.addHintAnnotation("muscle", "must_redact"); - section.addHintAnnotation("bovine", "must_redact"); - section.addHintAnnotation("ruminant", "must_redact"); - section.addHintAnnotation("ruminants", "must_redact"); - end - - -rule "11: Redact if CTL/* or BL/* was found" - when - Section(searchText.contains("CTL/") || searchText.contains("BL/")) - then - section.redact("CBI_author", 11, "Laboraty for vertebrate studies found", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - section.redact("CBI_address", 11, "Laboraty for vertebrate studies found", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - section.addHintAnnotation("CTL", "must_redact"); - section.addHintAnnotation("BL", "must_redact"); - end - - -rule "12: Redact and add recommendation for et al. author" - when - Section(searchText.contains("et al")) - then - section.redactAndRecommendByRegEx("\\b([A-ZÄÖÜ][^\\s\\.,]+( [A-ZÄÖÜ]{1,2}\\.?)?( ?[A-ZÄÖÜ]\\.?)?) et al\\.?", false, 1, "CBI_author", 12, "Author found", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - end - - -rule "13: Add recommendation for Addresses in Test Organism sections" - when - Section(searchText.contains("Species:") && searchText.contains("Source:")) - then - section.recommendLineAfter("Source:", "CBI_address"); - end - - -rule "14: Add recommendation for Addresses in Test Animals sections" - when - Section(searchText.contains("Species") && searchText.contains("Source")) - then - section.recommendLineAfter("Source", "CBI_address"); - end - -// --------------------------------------- PII rules ------------------------------------------------------------------- - - -rule "14: Redacted PII Personal Identification Information" - when - Section(matchesType("PII")) - then - section.redact("PII", 14, "PII (Personal Identification Information) found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - end - - -rule "15: Redact Emails by RegEx" - when - Section(searchText.contains("@")) - then - section.redactByRegEx("\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b", true, 0, "PII", 15, "PII (Personal Identification Information) found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - end - - -rule "16: Redact contact information" - when - Section(text.contains("Contact point:") - || text.contains("Phone:") - || text.contains("Fax:") - || text.contains("Tel.:") - || text.contains("Tel:") - || text.contains("E-mail:") - || text.contains("Email:") - || text.contains("e-mail:") - || text.contains("E-mail address:") - || text.contains("Alternative contact:") - || text.contains("Telephone number:") - || text.contains("Telephone No:") - || text.contains("Fax number:") - || text.contains("Telephone:") - || text.contains("European contact:")) - then - section.redactLineAfter("Contact point:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Phone:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Fax:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Tel.:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Tel:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("E-mail:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Email:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("e-mail:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("E-mail address:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Contact:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Alternative contact:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Telephone number:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Telephone No:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Fax number:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Telephone:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactBetween("No:", "Fax", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactBetween("Contact:", "Tel.:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("European contact:", "PII", 16, true, "Contact information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - end - - -rule "17: Redact contact information if applicant is found" - when - Section(headlineContainsWord("applicant") || text.contains("Applicant") || headlineContainsWord("Primary contact") || headlineContainsWord("Alternative contact") || text.contains("Telephone number:")) - then - section.redactLineAfter("Contact point:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Phone:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Fax:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Tel.:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Tel:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("E-mail:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Email:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("e-mail:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("E-mail address:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Contact:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Alternative contact:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Telephone number:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Telephone No:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Fax number:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Telephone:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactBetween("No:", "Fax", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactBetween("Contact:", "Tel.:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("European contact:", "PII", 17, true, "Applicant information was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - end - - -rule "18: Redact contact information if Producer is found" - when - Section(text.toLowerCase().contains("producer of the plant protection") || text.toLowerCase().contains("producer of the active substance") || text.contains("Manufacturer of the active substance") || text.contains("Manufacturer:") || text.contains("Producer or producers of the active substance")) - then - section.redactLineAfter("Contact:", "PII", 18, true, "Producer was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Telephone:", "PII", 18, true, "Producer was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Phone:", "PII", 18, true, "Producer was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Fax:", "PII", 18, true, "Producer was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("E-mail:", "PII", 18, true, "Producer was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Contact:", "PII", 18, true, "Producer was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Fax number:", "PII", 18, true, "Producer was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Telephone number:", "PII", 18, true, "Producer was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactLineAfter("Tel:", "PII", 18, true, "Producer was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - section.redactBetween("No:", "Fax", "PII", 18, true, "Producer was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - end - - -rule "19: Redact AUTHOR(S)" - when - Section(searchText.contains("AUTHOR(S):") && fileAttributeByPlaceholderEquals("{fileattributes.vertebrateStudy}", "true")) - then - section.redactLinesBetween("AUTHOR(S):", "COMPLETION DATE:", "PII", 19, true, "AUTHOR(S) was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - end - - -rule "20: Redact PERFORMING LABORATORY" - when - Section(searchText.contains("PERFORMING LABORATORY:")) - then - section.redactBetween("PERFORMING LABORATORY:", "LABORATORY PROJECT ID:", "PII", 20, true, "PERFORMING LABORATORY was found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - end - - -rule "21: Redact On behalf of Sequani Ltd.:" - when - Section(searchText.contains("On behalf of Sequani Ltd.: Name Title")) - then - section.redactBetween("On behalf of Sequani Ltd.: Name Title", "On behalf of", "PII", 21, false , "PII (Personal Identification Information) found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - end - - -rule "22: Redact On behalf of Syngenta Ltd.:" - when - Section(searchText.contains("On behalf of Syngenta Ltd.: Name Title")) - then - section.redactBetween("On behalf of Syngenta Ltd.: Name Title", "Study dates", "PII", 22, false , "PII (Personal Identification Information) found", "Reg (EC) No 1107/2009 Art. 63 (2e)"); - end - -// --------------------------------------- other rules ------------------------------------------------------------------- - -rule "25: Redact Purity" - when - Section(searchText.contains("purity")) - then - section.redactByRegEx("purity ?:? (([\\d\\.]+)( .{0,4}\\.)? ?%)", true, 1, "purity", 17, "Purity found", "Reg (EC) No 1107/2009 Art. 63 (2a)"); - end - - -rule "26: Redact signatures" - when - Section(matchesImageType("signature")) - then - section.redactImage("signature", 26, "Signature found", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - end - - -rule "27: Redact formula" - when - Section(matchesImageType("formula")) - then - section.redactImage("formula", 27, "Formula found", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - end - - -rule "28: Redact Logos" - when - Section(matchesImageType("logo")) - then - section.redactImage("logo", 28, "Logo found", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - end - - -rule "29: Redact Dossier Redactions" + rule "1: Find headlines " when - Section(matchesType("dossier_redactions")) + Section(text.length() > 1) then - section.redact("dossier_redactions", 29, "Dossier Redaction found", "Article 39(1)(2) of Regulation (EC) No 178/2002"); - end - -rule "30: Ignore dossier_redactions if confidential" - when - Section(!fileAttributeByLabelEqualsIgnoreCase("Confidentiality","confidential") && matchesType("dossier_redactions")); - then - section.ignore("dossier_redactions"); - end - -// ex. "New Rules for PAD" - "Annex A" - page 21, page 35 (table without header), page 38 (in-text) -// https://www.regexplanet.com/share/index.html?share=yyyypb71xkr -rule "101: Redact CAS numbers" - when - Section(hasTableHeader("Sample #")) - then - section.redactCell("Sample #", 8, "PII", true, "Redacted because row is a vertebrate study", "Reg (EC) No 1107/2009 Art. 63 (2g)"); - end \ No newline at end of file + section.redactHeadline("PII", 1, "Headline found", "n-a."); + end \ No newline at end of file diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/01 - CGA100251 - Acute Oral Toxicity (Up and Down Procedure) - Rat (1).pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/01 - CGA100251 - Acute Oral Toxicity (Up and Down Procedure) - Rat (1).pdf index 243b10c8..16b2652f 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/01 - CGA100251 - Acute Oral Toxicity (Up and Down Procedure) - Rat (1).pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/01 - CGA100251 - Acute Oral Toxicity (Up and Down Procedure) - Rat (1).pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/02 - A22833B - Acute Oral (Up and Down) - Final Report.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/02 - A22833B - Acute Oral (Up and Down) - Final Report.pdf index 707a7d43..fc9a3581 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/02 - A22833B - Acute Oral (Up and Down) - Final Report.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/02 - A22833B - Acute Oral (Up and Down) - Final Report.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/03 - Acute Oral Toxicity Up and Down Procedur.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/03 - Acute Oral Toxicity Up and Down Procedur.pdf index c379a2c2..ec5b453c 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/03 - Acute Oral Toxicity Up and Down Procedur.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/03 - Acute Oral Toxicity Up and Down Procedur.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/04 - CGA80154 - Acute Oral Toxicity (Up and Down Procedure) - Rat (1).pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/04 - CGA80154 - Acute Oral Toxicity (Up and Down Procedure) - Rat (1).pdf index 84fb9dd6..f1d5a801 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/04 - CGA80154 - Acute Oral Toxicity (Up and Down Procedure) - Rat (1).pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/04 - CGA80154 - Acute Oral Toxicity (Up and Down Procedure) - Rat (1).pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/05 - CGA80154 Acute Oral Toxicity (Up and Down Procedure) - Rat (2).pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/05 - CGA80154 Acute Oral Toxicity (Up and Down Procedure) - Rat (2).pdf index 84fb9dd6..f1d5a801 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/05 - CGA80154 Acute Oral Toxicity (Up and Down Procedure) - Rat (2).pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/05 - CGA80154 Acute Oral Toxicity (Up and Down Procedure) - Rat (2).pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/06 - Isopyrazam - Acute Oral Toxicity Rat.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/06 - Isopyrazam - Acute Oral Toxicity Rat.pdf index 1426f5d3..3e890cb1 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/06 - Isopyrazam - Acute Oral Toxicity Rat.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/06 - Isopyrazam - Acute Oral Toxicity Rat.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/07 - Acute Oral Toxicity in the Rat- Up and D.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/07 - Acute Oral Toxicity in the Rat- Up and D.pdf index 08304c5e..2caf5318 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/07 - Acute Oral Toxicity in the Rat- Up and D.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/07 - Acute Oral Toxicity in the Rat- Up and D.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/08 - Acute Oral Toxicity Up and Down Procedur.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/08 - Acute Oral Toxicity Up and Down Procedur.pdf index c286235b..5108c818 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/08 - Acute Oral Toxicity Up and Down Procedur.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/08 - Acute Oral Toxicity Up and Down Procedur.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/09 - CGA100251 - Acute Oral Toxicity (Up and Down Procedure) - Rat.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/09 - CGA100251 - Acute Oral Toxicity (Up and Down Procedure) - Rat.pdf index 243b10c8..16b2652f 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/09 - CGA100251 - Acute Oral Toxicity (Up and Down Procedure) - Rat.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/09 - CGA100251 - Acute Oral Toxicity (Up and Down Procedure) - Rat.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/10 - Cyper TC - Acute Oral Toxicity Up and Do.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/10 - Cyper TC - Acute Oral Toxicity Up and Do.pdf index a722f310..7df5423f 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/10 - Cyper TC - Acute Oral Toxicity Up and Do.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/10 - Cyper TC - Acute Oral Toxicity Up and Do.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/11 - Glyphosate Technical - Acute Oral Toxicity Study in the Rat (Up and Down Procedure) (1).pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/11 - Glyphosate Technical - Acute Oral Toxicity Study in the Rat (Up and Down Procedure) (1).pdf index c5317f9e..79830e42 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/11 - Glyphosate Technical - Acute Oral Toxicity Study in the Rat (Up and Down Procedure) (1).pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/11 - Glyphosate Technical - Acute Oral Toxicity Study in the Rat (Up and Down Procedure) (1).pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/12 - Glyphosate Technical - Acute Oral Toxicity Study in the Rat (Up and Down Procedure) (2).pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/12 - Glyphosate Technical - Acute Oral Toxicity Study in the Rat (Up and Down Procedure) (2).pdf index c5317f9e..79830e42 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/12 - Glyphosate Technical - Acute Oral Toxicity Study in the Rat (Up and Down Procedure) (2).pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/12 - Glyphosate Technical - Acute Oral Toxicity Study in the Rat (Up and Down Procedure) (2).pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/13 - Glyphosate Technical - Acute Oral Toxicity Study in the Rat (Up and Down Procedure).pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/13 - Glyphosate Technical - Acute Oral Toxicity Study in the Rat (Up and Down Procedure).pdf index c5317f9e..79830e42 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/13 - Glyphosate Technical - Acute Oral Toxicity Study in the Rat (Up and Down Procedure).pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/13 - Glyphosate Technical - Acute Oral Toxicity Study in the Rat (Up and Down Procedure).pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/14 - Paclobutrazol - Acute Oral Up-and-Down Procedure Rats.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/14 - Paclobutrazol - Acute Oral Up-and-Down Procedure Rats.pdf index 9453789d..b38f3f93 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/14 - Paclobutrazol - Acute Oral Up-and-Down Procedure Rats.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/14 - Paclobutrazol - Acute Oral Up-and-Down Procedure Rats.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/15 - Pretilachlor - Acute Oral Toxicity (Up and Down Procedure) - Rat.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/15 - Pretilachlor - Acute Oral Toxicity (Up and Down Procedure) - Rat.pdf index 6eba225e..2abbb072 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/15 - Pretilachlor - Acute Oral Toxicity (Up and Down Procedure) - Rat.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/15 - Pretilachlor - Acute Oral Toxicity (Up and Down Procedure) - Rat.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/16 - Prevail FT - Acute Oral Toxicity Up and.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/16 - Prevail FT - Acute Oral Toxicity Up and.pdf index 87d8cec7..90c98f64 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/16 - Prevail FT - Acute Oral Toxicity Up and.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/16 - Prevail FT - Acute Oral Toxicity Up and.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/17 - R61837 - OECD summary - Acute oral toxicity study in the rat (up and down procedure) (1).pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/17 - R61837 - OECD summary - Acute oral toxicity study in the rat (up and down procedure) (1).pdf index 8f1c2d68..66000b56 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/17 - R61837 - OECD summary - Acute oral toxicity study in the rat (up and down procedure) (1).pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/17 - R61837 - OECD summary - Acute oral toxicity study in the rat (up and down procedure) (1).pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/18 - SYN520453 - OECD summary - Acute Oral Toxicity Study in Rats - Up-and-Down-Procedure.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/18 - SYN520453 - OECD summary - Acute Oral Toxicity Study in Rats - Up-and-Down-Procedure.pdf index 6f40acf0..15f9548f 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/18 - SYN520453 - OECD summary - Acute Oral Toxicity Study in Rats - Up-and-Down-Procedure.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/18 - SYN520453 - OECD summary - Acute Oral Toxicity Study in Rats - Up-and-Down-Procedure.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/19 - SYN545192 - Acute Oral Toxicity Study in the Rat (Up and Down Procedure).pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/19 - SYN545192 - Acute Oral Toxicity Study in the Rat (Up and Down Procedure).pdf index 7dc98d53..d1f983c2 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/19 - SYN545192 - Acute Oral Toxicity Study in the Rat (Up and Down Procedure).pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/19 - SYN545192 - Acute Oral Toxicity Study in the Rat (Up and Down Procedure).pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/20 - SYN550004 - Acute Oral Toxicity (Up & Down Procedure) - Rats.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/20 - SYN550004 - Acute Oral Toxicity (Up & Down Procedure) - Rats.pdf index 919d4966..1512bbbd 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/20 - SYN550004 - Acute Oral Toxicity (Up & Down Procedure) - Rats.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/20 - SYN550004 - Acute Oral Toxicity (Up & Down Procedure) - Rats.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/21 - CA6572 - Acute Oral Toxicity - Rats.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/21 - CA6572 - Acute Oral Toxicity - Rats.pdf index 86317ea9..84051f3f 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/21 - CA6572 - Acute Oral Toxicity - Rats.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/21 - CA6572 - Acute Oral Toxicity - Rats.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/22 - SYN550023 - Acute Oral - Rat.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/22 - SYN550023 - Acute Oral - Rat.pdf index 7826b7ca..1957fd98 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/22 - SYN550023 - Acute Oral - Rat.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/22 - SYN550023 - Acute Oral - Rat.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/23 - SYN549888 - Acute Oral Toxicity - Rats.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/23 - SYN549888 - Acute Oral Toxicity - Rats.pdf index d696e4b3..be0e9e36 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/23 - SYN549888 - Acute Oral Toxicity - Rats.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/23 - SYN549888 - Acute Oral Toxicity - Rats.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/24 - SYN549522 - Acute Oral Toxicity - Rats.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/24 - SYN549522 - Acute Oral Toxicity - Rats.pdf index e0567199..de55e7fb 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/24 - SYN549522 - Acute Oral Toxicity - Rats.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/24 - SYN549522 - Acute Oral Toxicity - Rats.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/25 - SYN546412 - Acute Oral Toxicity - Rats.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/25 - SYN546412 - Acute Oral Toxicity - Rats.pdf index 8ed5237c..62ae9d78 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/25 - SYN546412 - Acute Oral Toxicity - Rats.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/25 - SYN546412 - Acute Oral Toxicity - Rats.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/26 - Sedaxane - Acute Oral Toxicity - Rat.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/26 - Sedaxane - Acute Oral Toxicity - Rat.pdf index f3c89232..257b61a5 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/26 - Sedaxane - Acute Oral Toxicity - Rat.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/26 - Sedaxane - Acute Oral Toxicity - Rat.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/27 - Profenofos Technical - Acute Oral Toxici.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/27 - Profenofos Technical - Acute Oral Toxici.pdf index 7d580f1c..cc7cc2a4 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/27 - Profenofos Technical - Acute Oral Toxici.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/27 - Profenofos Technical - Acute Oral Toxici.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/28 - Emamectin Technical - Acute Oral Toxicity - Rats.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/28 - Emamectin Technical - Acute Oral Toxicity - Rats.pdf index ee1dba97..f16f7f8c 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/28 - Emamectin Technical - Acute Oral Toxicity - Rats.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/28 - Emamectin Technical - Acute Oral Toxicity - Rats.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/29 - Abamectin Technical (MK936C) - Acute Ora.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/29 - Abamectin Technical (MK936C) - Acute Ora.pdf index 3810f5ba..60929fbe 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/29 - Abamectin Technical (MK936C) - Acute Ora.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/29 - Abamectin Technical (MK936C) - Acute Ora.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/30 - Dicamba - Acute Oral Toxicity - Rats.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/30 - Dicamba - Acute Oral Toxicity - Rats.pdf index 9f674b35..b93112f3 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/30 - Dicamba - Acute Oral Toxicity - Rats.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/30 - Dicamba - Acute Oral Toxicity - Rats.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/31 - CA6375 - Acute Oral Toxicity - Rats.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/31 - CA6375 - Acute Oral Toxicity - Rats.pdf index 4e578a11..f47d97d9 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/31 - CA6375 - Acute Oral Toxicity - Rats.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/31 - CA6375 - Acute Oral Toxicity - Rats.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/32 - Emamectin Benzoate Technical - Acute Oral Toxicity - Mouse.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/32 - Emamectin Benzoate Technical - Acute Oral Toxicity - Mouse.pdf index 29ee151e..886c8a7a 100644 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/32 - Emamectin Benzoate Technical - Acute Oral Toxicity - Mouse.pdf and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/RSS/32 - Emamectin Benzoate Technical - Acute Oral Toxicity - Mouse.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/S61.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/S61.pdf new file mode 100644 index 00000000..73f18e1e Binary files /dev/null and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/S61.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/Trinexapac/S1831.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/Trinexapac/S1831.pdf new file mode 100644 index 00000000..d251c7eb Binary files /dev/null and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/Trinexapac/S1831.pdf differ