From 6230f42fcf1bfe25d4742670653aa8fe8a27b744 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Thu, 25 Nov 2021 16:40:26 +0100 Subject: [PATCH 1/2] RED-2756 Bugfix for 'Redaction is not continuous', compare line height and y position instead of rounding y values --- .../service/RedactionLogCreatorService.java | 46 ++++++++++++++----- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java index 7754cf8b..3f0d9580 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java @@ -1,5 +1,15 @@ package com.iqser.red.service.redaction.v1.server.redaction.service; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + import com.iqser.red.service.redaction.v1.model.Point; import com.iqser.red.service.redaction.v1.model.Rectangle; import com.iqser.red.service.redaction.v1.model.RedactionLogEntry; @@ -10,12 +20,8 @@ import com.iqser.red.service.redaction.v1.server.redaction.model.EntityPositionS import com.iqser.red.service.redaction.v1.server.redaction.model.Image; import com.iqser.red.service.redaction.v1.server.redaction.model.PageEntities; import com.iqser.red.service.redaction.v1.server.redaction.utils.IdBuilder; -import lombok.RequiredArgsConstructor; -import org.apache.commons.collections4.CollectionUtils; -import org.springframework.stereotype.Service; -import java.util.*; -import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor @@ -24,7 +30,8 @@ public class RedactionLogCreatorService { private final DictionaryService dictionaryService; - public List createRedactionLog(PageEntities pageEntities, int numberOfPages, String dossierTemplateId) { + public List createRedactionLog(PageEntities pageEntities, int numberOfPages, + String dossierTemplateId) { List entries = new ArrayList<>(); @@ -130,13 +137,19 @@ public class RedactionLogCreatorService { rectangles.add(TextPositionSequence.fromData(textPositions, page).getRectangle()); } else { float y = textPositions.get(0).getYDirAdj(); + float height = textPositions.get(0).getHeightDir(); int startIndex = 0; + for (int i = 1; i < textPositions.size(); i++) { float yDirAdj = textPositions.get(i).getYDirAdj(); - if (round(yDirAdj,3) != round(y, 3)) { + float heightDir = textPositions.get(i).getHeightDir(); + + if (!isCharInSameLine(y, yDirAdj, height, heightDir)) { + rectangles.add(TextPositionSequence.fromData(textPositions.subList(startIndex, i), page) .getRectangle()); y = yDirAdj; + height = heightDir; startIndex = i; } } @@ -149,9 +162,21 @@ public class RedactionLogCreatorService { return rectangles; } - private double round(float value, int decimalPoints) { - var d = Math.pow(10, decimalPoints); - return Math.round(value * d) / d; + + private boolean isCharInSameLine(float y, float yCompare, float height, float heightCompare) { + + float offsetHeight = heightCompare / 5; + float minHeight = heightCompare - offsetHeight; + float maxHeight = heightCompare + offsetHeight; + + float offsetY = heightCompare / 22; + float minY = y - offsetY; + float maxY = y + offsetY; + + if (yCompare > minY && yCompare < maxY && height > minHeight && height < maxHeight) { + return true; + } + return false; } @@ -204,5 +229,4 @@ public class RedactionLogCreatorService { return dictionaryService.isRecommendation(type, dossierTemplateId); } - } From 9d0fafd63ddb23fd8ee2f154e02df88687e08f96 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Mon, 29 Nov 2021 10:31:32 +0100 Subject: [PATCH 2/2] RED-2756 Bugfix with redactions are not continuous --- .../v1/server/RedactionIntegrationTest.java | 255 ++++++++++++++---- .../resources/dictionaries/CBI_author.txt | 25 ++ .../resources/scanned/VV-380943_page38.pdf | Bin 0 -> 38011 bytes 3 files changed, 227 insertions(+), 53 deletions(-) create mode 100644 redaction-service-v1/redaction-service-server-v1/src/test/resources/scanned/VV-380943_page38.pdf 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 50333224..6ab19860 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 @@ -1,30 +1,27 @@ package com.iqser.red.service.redaction.v1.server; -import com.amazonaws.services.s3.AmazonS3; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.Rectangle; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.*; -import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Colors; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntry; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type; -import com.iqser.red.service.redaction.v1.model.*; -import com.iqser.red.service.redaction.v1.server.classification.model.SectionText; -import com.iqser.red.service.redaction.v1.server.client.DictionaryClient; -import com.iqser.red.service.redaction.v1.server.client.ImageClassificationClient; -import com.iqser.red.service.redaction.v1.server.client.LegalBasisClient; -import com.iqser.red.service.redaction.v1.server.client.RulesClient; -import com.iqser.red.service.redaction.v1.server.controller.RedactionController; -import com.iqser.red.service.redaction.v1.server.memory.MemoryStats; -import com.iqser.red.service.redaction.v1.server.redaction.service.AnalyzeService; -import com.iqser.red.service.redaction.v1.server.redaction.utils.ResourceLoader; -import com.iqser.red.service.redaction.v1.server.redaction.utils.TextNormalizationUtilities; -import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; -import com.iqser.red.storage.commons.StorageAutoConfiguration; -import com.iqser.red.storage.commons.service.StorageService; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; -import lombok.SneakyThrows; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -51,15 +48,47 @@ import org.springframework.context.annotation.Primary; import org.springframework.core.io.ClassPathResource; import org.springframework.test.context.junit4.SpringRunner; -import java.io.*; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.time.OffsetDateTime; -import java.util.*; -import java.util.stream.Collectors; +import com.amazonaws.services.s3.AmazonS3; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.Comment; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.IdRemoval; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualForceRedaction; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualImageRecategorization; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualLegalBasisChange; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactionEntry; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactions; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualResizeRedaction; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.Rectangle; +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Colors; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntry; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type; +import com.iqser.red.service.redaction.v1.model.AnalyzeRequest; +import com.iqser.red.service.redaction.v1.model.AnalyzeResult; +import com.iqser.red.service.redaction.v1.model.AnnotateRequest; +import com.iqser.red.service.redaction.v1.model.AnnotateResponse; +import com.iqser.red.service.redaction.v1.model.FileAttribute; +import com.iqser.red.service.redaction.v1.model.RedactionLogEntry; +import com.iqser.red.service.redaction.v1.model.RedactionRequest; +import com.iqser.red.service.redaction.v1.model.RedactionResult; +import com.iqser.red.service.redaction.v1.model.StructureAnalyzeRequest; +import com.iqser.red.service.redaction.v1.server.classification.model.SectionText; +import com.iqser.red.service.redaction.v1.server.client.DictionaryClient; +import com.iqser.red.service.redaction.v1.server.client.ImageClassificationClient; +import com.iqser.red.service.redaction.v1.server.client.LegalBasisClient; +import com.iqser.red.service.redaction.v1.server.client.RulesClient; +import com.iqser.red.service.redaction.v1.server.controller.RedactionController; +import com.iqser.red.service.redaction.v1.server.memory.MemoryStats; +import com.iqser.red.service.redaction.v1.server.redaction.service.AnalyzeService; +import com.iqser.red.service.redaction.v1.server.redaction.utils.ResourceLoader; +import com.iqser.red.service.redaction.v1.server.redaction.utils.TextNormalizationUtilities; +import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; +import com.iqser.red.storage.commons.StorageAutoConfiguration; +import com.iqser.red.storage.commons.service.StorageService; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.when; +import lombok.SneakyThrows; @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @@ -631,29 +660,14 @@ public class RedactionIntegrationTest { } - private List getPathsRecursively(File path) { - - List result = new ArrayList<>(); - if (path == null || path.listFiles() == null) { - return result; - } - for (File f : path.listFiles()) { - if (f.isFile()) { - result.add(f); - } else { - result.addAll(getPathsRecursively(f)); - } - } - return result; - - } - - @Test - public void redactionTest() throws IOException { + public void redactionTestSeparatedRedaction() throws IOException { + + String fileName = "scanned/VV-380943_page38.pdf"; + String outputFileName = getTemporaryDirectory() + "/AnnotatedRedactionTestSeparatedRedaction.pdf"; long start = System.currentTimeMillis(); - ClassPathResource pdfFileResource = new ClassPathResource("files/new/VV-919901.pdf"); + ClassPathResource pdfFileResource = new ClassPathResource(fileName); AnalyzeRequest request = prepareStorage(pdfFileResource.getInputStream()); request.setExcludedPages(Set.of(1)); @@ -744,7 +758,124 @@ public class RedactionIntegrationTest { .fileId(TEST_FILE_ID) .build()); - try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/Annotated.pdf")) { + try (FileOutputStream fileOutputStream = new FileOutputStream(outputFileName)) { + fileOutputStream.write(annotateResponse.getDocument()); + } + + deleted.remove("mouse"); + reanlysisVersions.put("mouse", 4L); + + when(dictionaryClient.getVersion(TEST_DOSSIER_TEMPLATE_ID)).thenReturn(4L); + + when(dictionaryClient.getDictionaryForType(VERTEBRATE)).thenReturn(getDictionaryResponse(VERTEBRATE, false)); + + analyzeService.reanalyze(request); + + redactionLog = redactionStorageService.getRedactionLog(TEST_DOSSIER_ID, TEST_FILE_ID); + + System.out.println("hi"); + } + + + @Test + public void redactionTest() throws IOException { + + String fileName = "files/new/VV-919901.pdf"; + String outputFileName = getTemporaryDirectory() + "/Annotated.pdf"; + + long start = System.currentTimeMillis(); + ClassPathResource pdfFileResource = new ClassPathResource(fileName); + AnalyzeRequest request = prepareStorage(pdfFileResource.getInputStream()); + request.setExcludedPages(Set.of(1)); + + request.setFileAttributes(List.of(FileAttribute.builder() + .id("fileAttributeId") + .label("Vertebrate Study") + .placeholder("{fileattributes.vertebrateStudy}") + .value("true") + .build())); + + analyzeService.analyzeDocumentStructure(new StructureAnalyzeRequest(request.getDossierId(), request.getFileId())); + AnalyzeResult result = analyzeService.analyze(request); + + var redactionLog = redactionStorageService.getRedactionLog(TEST_DOSSIER_ID, TEST_FILE_ID); + var text = redactionStorageService.getText(TEST_DOSSIER_ID, TEST_FILE_ID); + + long end = System.currentTimeMillis(); + + System.out.println("first analysis duration: " + (end - start)); + + try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/Test.json")) { + fileOutputStream.write(objectMapper.writeValueAsBytes(redactionStorageService.getText(TEST_DOSSIER_ID, TEST_FILE_ID))); + } + + int correctFound = 0; + loop: + for (RedactionLogEntry redactionLogEntry : redactionLog.getRedactionLogEntry()) { + for (SectionText sectionText : text.getSectionTexts()) { + if (redactionLogEntry.isImage()) { + correctFound++; + continue loop; + } + if (redactionLogEntry.getSectionNumber() == sectionText.getSectionNumber()) { + String value = sectionText.getText() + .substring(redactionLogEntry.getStartOffset(), redactionLogEntry.getEndOffset()); + if (redactionLogEntry.getValue().equalsIgnoreCase(value)) { + correctFound++; + } else { + throw new RuntimeException("WTF"); + } + } + } + } + assertThat(correctFound).isEqualTo(redactionLog.getRedactionLogEntry().size()); + + dictionary.get(AUTHOR).add("properties"); + reanlysisVersions.put("properties", 1L); + + dictionary.get(AUTHOR).add("physical"); + reanlysisVersions.put("physical", 2L); + + deleted.add("David Chubb"); + deleted.add("mouse"); + + dictionary.get(FALSE_POSITIVE).add("David Chubb"); + reanlysisVersions.put("David Chubb", 3L); + + reanlysisVersions.put("mouse", 3L); + + when(dictionaryClient.getVersion(TEST_DOSSIER_TEMPLATE_ID)).thenReturn(3L); + + when(dictionaryClient.getDictionaryForType(VERTEBRATE)).thenReturn(getDictionaryResponse(VERTEBRATE, false)); + + when(dictionaryClient.getDictionaryForType(FALSE_POSITIVE)).thenReturn(getDictionaryResponse(FALSE_POSITIVE, false)); + + start = System.currentTimeMillis(); + + ManualRedactions manualRedactions = new ManualRedactions(); + + manualRedactions.setImageRecategorization(Set.of(ManualImageRecategorization.builder() + .annotationId("37eee3e9d589a5cc529bfec38c3ba479") + .fileId("fileId") + .status(AnnotationStatus.APPROVED) + .type("signature") + .build())); + + request.setManualRedactions(manualRedactions); + + AnalyzeResult reanalyzeResult = analyzeService.reanalyze(request); + + redactionLog = redactionStorageService.getRedactionLog(TEST_DOSSIER_ID, TEST_FILE_ID); + + end = System.currentTimeMillis(); + System.out.println("reanalysis analysis duration: " + (end - start)); + + AnnotateResponse annotateResponse = redactionController.annotate(AnnotateRequest.builder() + .dossierId(TEST_DOSSIER_ID) + .fileId(TEST_FILE_ID) + .build()); + + try (FileOutputStream fileOutputStream = new FileOutputStream(outputFileName)) { fileOutputStream.write(annotateResponse.getDocument()); } @@ -1193,6 +1324,24 @@ public class RedactionIntegrationTest { } + private List getPathsRecursively(File path) { + + List result = new ArrayList<>(); + if (path == null || path.listFiles() == null) { + return result; + } + for (File f : path.listFiles()) { + if (f.isFile()) { + result.add(f); + } else { + result.addAll(getPathsRecursively(f)); + } + } + return result; + + } + + private static String getTemporaryDirectory() { String tmpdir = System.getProperty("java.io.tmpdir"); diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/dictionaries/CBI_author.txt b/redaction-service-v1/redaction-service-server-v1/src/test/resources/dictionaries/CBI_author.txt index 3d53e6d2..05f5dc2c 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/dictionaries/CBI_author.txt +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/dictionaries/CBI_author.txt @@ -1,3 +1,28 @@ +AD Hurt +N Pengelly +HA J Napper +E M Roper +Earl M +Weissler M S +Warrinton J S +Kuet SF +Hadeld ST +Butters C A +Hurt AD +Campbell AJ +Runnalls JK +Tummon O J +Chapman PF +Snell RJ +MclIndoe EC +Johnson R I +Richard Andrews +James Paul +Walter Richard Andrews +Wilbur H. Palmer +Jeff Mueller +James McDonelI +Jeffrey S. Heither 1 Braid S.and Tsui G 1 Schwader A.L. 2 Lee MR diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/scanned/VV-380943_page38.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/scanned/VV-380943_page38.pdf new file mode 100644 index 0000000000000000000000000000000000000000..98e2f6ae5b65cdf86756e75f82c7d60bdb31985e GIT binary patch literal 38011 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