From 848c506c3fd68a52684734933a8a5ef8b2c69d2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thierry=20G=C3=B6ckel?= Date: Tue, 25 Aug 2020 13:50:34 +0200 Subject: [PATCH 1/4] Fix entity span in table rows and detection of headers in rotated tables --- .../v1/server/redaction/model/CellValue.java | 16 ++ .../v1/server/redaction/model/Section.java | 14 +- .../service/EntityRedactionService.java | 12 +- .../segmentation/SectionsBuilderService.java | 5 +- .../server/tableextraction/model/Table.java | 167 ++++++++---------- .../PdfSegmentationServiceTest.java | 40 +++++ .../Minimal Examples/Empty Tabular Data.pdf | Bin 0 -> 81619 bytes .../Rotated Table Headers.pdf | Bin 0 -> 6222 bytes 8 files changed, 143 insertions(+), 111 deletions(-) create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/CellValue.java create mode 100644 redaction-service-v1/redaction-service-server-v1/src/test/resources/files/Minimal Examples/Empty Tabular Data.pdf create mode 100644 redaction-service-v1/redaction-service-server-v1/src/test/resources/files/Minimal Examples/Rotated Table Headers.pdf diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/CellValue.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/CellValue.java new file mode 100644 index 00000000..e646cbef --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/CellValue.java @@ -0,0 +1,16 @@ +package com.iqser.red.service.redaction.v1.server.redaction.model; + +import com.iqser.red.service.redaction.v1.server.classification.model.TextBlock; + +import lombok.RequiredArgsConstructor; +import lombok.Value; + +@Value +@RequiredArgsConstructor +public class CellValue { + + TextBlock textBlock; + + int rowSpanStart; + +} \ No newline at end of file diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java index 3a517ef2..808eb797 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java @@ -32,7 +32,7 @@ public class Section { private int sectionNumber; - private Map tabularData; + private Map tabularData; public boolean rowEquals(String headerName, String value){ @@ -40,7 +40,8 @@ public class Section { .replaceAll(" ", "") .replaceAll("-", ""); - return tabularData != null && tabularData.containsKey(cleanHeaderName) && tabularData.get(cleanHeaderName).getText().equals(value); + return tabularData != null && tabularData.containsKey(cleanHeaderName) + && tabularData.get(cleanHeaderName).getTextBlock().getText().equals(value); } @@ -177,15 +178,18 @@ public class Section { .replaceAll(" ", "") .replaceAll("-", ""); - TextBlock value = tabularData.get(cleanHeaderName); + CellValue value = tabularData.get(cleanHeaderName); if (value == null) { log.warn("Could not find any data for {}.", cellHeader); } else { - Entity entity = new Entity(value.getText(), type, 0, value.getText().length(), headline, sectionNumber); + Entity entity = new Entity(value.getTextBlock() + .getText(), type, value.getRowSpanStart(), value.getRowSpanStart() + value.getTextBlock() + .getText() + .length(), headline, sectionNumber); entity.setRedaction(false); entity.setMatchedRule(ruleNumber); entity.setRedactionReason(cellHeader); - entity.setTargetSequences(value.getSequences()); // Make sure no other cells with same content are highlighted + entity.setTargetSequences(value.getTextBlock().getSequences()); // Make sure no other cells with same content are highlighted entities.add(entity); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java index b00a59b8..a5e7e0f4 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java @@ -18,6 +18,7 @@ import com.iqser.red.service.redaction.v1.model.Rectangle; import com.iqser.red.service.redaction.v1.server.classification.model.Document; import com.iqser.red.service.redaction.v1.server.classification.model.Paragraph; import com.iqser.red.service.redaction.v1.server.classification.model.TextBlock; +import com.iqser.red.service.redaction.v1.server.redaction.model.CellValue; import com.iqser.red.service.redaction.v1.server.redaction.model.Entity; import com.iqser.red.service.redaction.v1.server.redaction.model.EntityPositionSequence; import com.iqser.red.service.redaction.v1.server.redaction.model.SearchableText; @@ -53,26 +54,27 @@ public class EntityRedactionService { for (Table table : tables) { for (List row : table.getRows()) { SearchableText searchableRow = new SearchableText(); - Map tabularData = new HashMap<>(); + Map tabularData = new HashMap<>(); + int start = 0; for (Cell cell : row) { if (cell.isHeaderCell() || CollectionUtils.isEmpty(cell.getTextBlocks())) { continue; } addSectionToManualRedactions(cell.getTextBlocks(), manualRedactions, table.getHeadline(), sectionNumber); + int cellStart = start; cell.getHeaderCells().forEach(headerCell -> { - StringBuilder headerBuilder = new StringBuilder(); headerCell.getTextBlocks().forEach(textBlock -> headerBuilder.append(textBlock.getText())); String headerName = headerBuilder.toString() .replaceAll("\n", "") .replaceAll(" ", "") .replaceAll("-", ""); - tabularData.put(headerName, cell.getTextBlocks().get(0)); + tabularData.put(headerName, new CellValue(cell.getTextBlocks().get(0), cellStart)); }); + start = start + cell.getTextBlocks().get(0).toString().length(); for (TextBlock textBlock : cell.getTextBlocks()) { searchableRow.addAll(textBlock.getSequences()); } - } Set rowEntities = findEntities(searchableRow, table.getHeadline(), sectionNumber); @@ -142,7 +144,7 @@ public class EntityRedactionService { private Set findEntities(SearchableText searchableText, String headline, int sectionNumber) { Set found = new HashSet<>(); - if (StringUtils.isEmpty(searchableText.toString()) && StringUtils.isEmpty(headline)) { + if (StringUtils.isEmpty(searchableText.toString())) { return found; } 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 11d5d5d4..4862ac0d 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 @@ -85,8 +85,7 @@ public class SectionsBuilderService { }).collect(Collectors.toList()); } if (previousTableNonHeaderRow.size() == tableNonHeaderRow.size()) { - for (int i = currentTable.getRows() - .size() - 1; i >= 0; i--) { // Non header rows are most likely at bottom of table + for (int i = currentTable.getRowCount() - 1; i >= 0; i--) { // Non header rows are most likely at bottom of table List row = currentTable.getRows().get(i); if (row.size() == tableNonHeaderRow.size() && row.stream() .allMatch(cell -> cell.getHeaderCells().isEmpty())) { @@ -185,7 +184,7 @@ public class SectionsBuilderService { private List getRowWithNonHeaderCells(Table table) { - for (int i = table.getRows().size() - 1; i >= 0; i--) { // Non header rows are most likely at bottom of table + for (int i = table.getRowCount() - 1; i >= 0; i--) { // Non header rows are most likely at bottom of table List row = table.getRows().get(i); boolean allNonHeader = true; for (Cell cell : row) { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/tableextraction/model/Table.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/tableextraction/model/Table.java index c118d0e0..1a278855 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/tableextraction/model/Table.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/tableextraction/model/Table.java @@ -29,11 +29,13 @@ public class Table extends AbstractTextContainer { @Setter private String headline; - @Getter - private int rowCount; + private int unrotatedRowCount; - @Getter - private int colCount; + private int unrotatedColCount; + + private int rowCount = -1; + + private int colCount = -1; private final int rotation; @@ -65,6 +67,25 @@ public class Table extends AbstractTextContainer { } + public int getRowCount() { + + if (rowCount == -1) { + rowCount = getRows().size(); + } + return rowCount; + } + + + public int getColCount() { + + if (colCount == -1) { + colCount = getRows().stream().mapToInt(List::size).max().orElse(0); + } + return colCount; + + } + + /** * Detect header cells (either first row or first column): * Column is marked as header if cell text is bold and row cell text is not bold. @@ -72,100 +93,50 @@ public class Table extends AbstractTextContainer { */ private void computeHeaders() { + if (rows == null) { + rows = computeRows(); + } // A bold cell is a header cell as long as every cell to the left/top is bold, too - cells.forEach((position, cell) -> { - List cellsToTheLeft = getCellsToTheLeft(position); - Cell lastHeaderCell = null; - for (Cell leftCell : cellsToTheLeft) { - if (CollectionUtils.isNotEmpty(leftCell.getTextBlocks()) && leftCell.getTextBlocks() + // we move from left to right and top to bottom + for (int rowIndex = 0; rowIndex < rows.size(); rowIndex++) { + List rowCells = rows.get(rowIndex); + for (int colIndex = 0; colIndex < rowCells.size(); colIndex++) { + Cell cell = rowCells.get(colIndex); + List cellsToTheLeft = rowCells.subList(0, colIndex); + Cell lastHeaderCell = null; + for (Cell leftCell : cellsToTheLeft) { + if (leftCell.isHeaderCell()) { + lastHeaderCell = leftCell; + } else { + break; + } + } + if (lastHeaderCell != null) { + cell.getHeaderCells().add(lastHeaderCell); + } + List cellsToTheTop = new ArrayList<>(); + for (int i = rowIndex - 1; i >= 0; i--) { + cellsToTheTop.add(rows.get(i).get(colIndex)); + } + for (Cell topCell : cellsToTheTop) { + if (topCell.isHeaderCell()) { + lastHeaderCell = topCell; + } else { + break; + } + } + if (lastHeaderCell != null) { + cell.getHeaderCells().add(lastHeaderCell); + } + if (CollectionUtils.isNotEmpty(cell.getTextBlocks()) && cell.getTextBlocks() .get(0) .getMostPopularWordStyle() .equals("bold")) { - lastHeaderCell = leftCell; - } else { - break; + cell.setHeaderCell(true); } } - if (lastHeaderCell != null) { - cell.getHeaderCells().add(lastHeaderCell); - } - lastHeaderCell = null; - List cellsToTheTop = getCellToTheTop(position); - for (Cell topCell : cellsToTheTop) { - if (CollectionUtils.isNotEmpty(topCell.getTextBlocks()) && topCell.getTextBlocks() - .get(0) - .getMostPopularWordStyle() - .equals("bold")) { - lastHeaderCell = topCell; - } else { - break; - } - } - if (lastHeaderCell != null) { - cell.getHeaderCells().add(lastHeaderCell); - } - if (CollectionUtils.isNotEmpty(cell.getTextBlocks()) && cell.getTextBlocks() - .get(0) - .getMostPopularWordStyle() - .equals("bold")) { - cell.setHeaderCell(true); - } - }); - - } - - - private List getCellsToTheLeft(CellPosition cellPosition) { - - List result = new ArrayList<>(); - if (cellPosition.getCol() == 0) { - return result; - } - int row = cellPosition.getRow(); - for (int i = cellPosition.getCol() - 1; i >= 0; i--) { - if (cells.get(new CellPosition(row, i)) != null) { - result.add(cells.get(new CellPosition(row, i))); - } else { - Cell spanningCell = null; - while (spanningCell == null && row >= 0) { - row--; - spanningCell = cells.get(new CellPosition(row, i)); - } - if (spanningCell != null) { - result.add(spanningCell); - } - row = cellPosition.getRow(); - } } - Collections.reverse(result); - return result; - } - - private List getCellToTheTop(CellPosition cellPosition) { - - List result = new ArrayList<>(); - if (cellPosition.getRow() == 0) { - return result; - } - int col = cellPosition.getCol(); - for (int i = cellPosition.getRow() - 1; i >= 0; i--) { - if (cells.get(new CellPosition(i, col)) != null) { - result.add(cells.get(new CellPosition(i, col))); - } else { - Cell spanningCell = null; - while (spanningCell == null && col >= 0) { - col--; - spanningCell = cells.get(new CellPosition(i, col)); - } - if (spanningCell != null) { - result.add(spanningCell); - } - col = cellPosition.getCol(); - } - } - Collections.reverse(result); - return result; } @@ -173,9 +144,9 @@ public class Table extends AbstractTextContainer { List> rows = new ArrayList<>(); if (rotation == 90) { - for (int i = 0; i < colCount; i++) { // rows + for (int i = 0; i < unrotatedColCount; i++) { // rows List lastRow = new ArrayList<>(); - for (int j = rowCount - 1; j >= 0; j--) { // cols + for (int j = unrotatedRowCount - 1; j >= 0; j--) { // cols Cell cell = cells.get(new CellPosition(j, i)); if (cell != null) { lastRow.add(cell); @@ -184,9 +155,9 @@ public class Table extends AbstractTextContainer { rows.add(lastRow); } } else if (rotation == 270) { - for (int i = colCount - 1; i >= 0; i--) { // rows + for (int i = unrotatedColCount - 1; i >= 0; i--) { // rows List lastRow = new ArrayList<>(); - for (int j = 0; j < rowCount; j++) { // cols + for (int j = 0; j < unrotatedRowCount; j++) { // cols Cell cell = cells.get(new CellPosition(i, j)); if (cell != null) { lastRow.add(cell); @@ -195,9 +166,9 @@ public class Table extends AbstractTextContainer { rows.add(lastRow); } } else { - for (int i = 0; i < rowCount; i++) { + for (int i = 0; i < unrotatedRowCount; i++) { List lastRow = new ArrayList<>(); - for (int j = 0; j < colCount; j++) { + for (int j = 0; j < unrotatedColCount; j++) { Cell cell = cells.get(new CellPosition(i, j)); // JAVA_8 use getOrDefault() if (cell != null) { lastRow.add(cell); @@ -214,8 +185,8 @@ public class Table extends AbstractTextContainer { private void add(Cell chunk, int row, int col) { - rowCount = Math.max(rowCount, row + 1); - colCount = Math.max(colCount, col + 1); + unrotatedRowCount = Math.max(unrotatedRowCount, row + 1); + unrotatedColCount = Math.max(unrotatedColCount, col + 1); CellPosition cp = new CellPosition(row, col); cells.put(cp, chunk); diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/segmentation/PdfSegmentationServiceTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/segmentation/PdfSegmentationServiceTest.java index 852dc91b..bee1719a 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/segmentation/PdfSegmentationServiceTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/segmentation/PdfSegmentationServiceTest.java @@ -146,4 +146,44 @@ public class PdfSegmentationServiceTest { } } + + @Test + public void testHeaderCellsForRotatedTable() throws IOException { + + ClassPathResource pdfFileResource = new ClassPathResource("files/Minimal Examples/Rotated Table Headers.pdf"); + + try (PDDocument pdDocument = PDDocument.load(pdfFileResource.getInputStream())) { + Document document = pdfSegmentationService.parseDocument(pdDocument); + assertThat(document.getParagraphs() + .stream() + .flatMap(paragraph -> paragraph.getTables().stream()) + .collect(Collectors.toList())).isNotEmpty(); + Table firstTable = document.getParagraphs() + .stream() + .flatMap(paragraph -> paragraph.getTables().stream()) + .collect(Collectors.toList()) + .get(0); + assertThat(firstTable.getColCount()).isEqualTo(8); + assertThat(firstTable.getRowCount()).isEqualTo(1); + Table secondTable = document.getParagraphs() + .stream() + .flatMap(paragraph -> paragraph.getTables().stream()) + .collect(Collectors.toList()) + .get(1); + assertThat(secondTable.getColCount()).isEqualTo(8); + assertThat(secondTable.getRowCount()).isEqualTo(6); + List> firstTableHeaderCells = firstTable.getRows() + .get(0) + .stream() + .map(Collections::singletonList) + .collect(Collectors.toList()); + assertThat(secondTable.getRows().stream() + .allMatch(row -> row.stream() + .map(Cell::getHeaderCells) + .collect(Collectors.toList()) + .equals(firstTableHeaderCells))) + .isTrue(); + } + } + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/Minimal Examples/Empty Tabular Data.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/Minimal Examples/Empty Tabular Data.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e8b494c8e05f9abc2c05ed639b03e73e741bcb29 GIT binary patch literal 81619 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 Vhc~-OI06w3{&}EoZfhY4`!DaQ_09kQ literal 0 HcmV?d00001 From 3c590dcf1df137ec212e7cba37c7472a14d9d945 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thierry=20G=C3=B6ckel?= Date: Tue, 25 Aug 2020 15:41:44 +0200 Subject: [PATCH 2/4] Adjust test to added rule and fix vertical header propagation for row > 2 --- .../server/tableextraction/model/Table.java | 8 +++- .../service/EntityRedactionServiceTest.java | 38 ++++++++++++++++++- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/tableextraction/model/Table.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/tableextraction/model/Table.java index 1a278855..73418718 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/tableextraction/model/Table.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/tableextraction/model/Table.java @@ -115,8 +115,12 @@ public class Table extends AbstractTextContainer { cell.getHeaderCells().add(lastHeaderCell); } List cellsToTheTop = new ArrayList<>(); - for (int i = rowIndex - 1; i >= 0; i--) { - cellsToTheTop.add(rows.get(i).get(colIndex)); + for (int i = 0; i < rowIndex; i++) { + try { + cellsToTheTop.add(rows.get(i).get(colIndex)); + } catch (IndexOutOfBoundsException e) { + log.warn("No cell {} in row {}, ignoring.", colIndex, rowIndex); + } } for (Cell topCell : cellsToTheTop) { if (topCell.isHeaderCell()) { diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionServiceTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionServiceTest.java index da4ed03b..f29e83d3 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionServiceTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionServiceTest.java @@ -130,7 +130,7 @@ public class EntityRedactionServiceTest { Document classifiedDoc = pdfSegmentationService.parseDocument(pdDocument); entityRedactionService.processDocument(classifiedDoc, null); assertThat(classifiedDoc.getEntities()).hasSize(1); // one page - assertThat(classifiedDoc.getEntities().get(1)).hasSize(5); // 4 out of 5 entities recognized on page 1 + assertThat(classifiedDoc.getEntities().get(1)).hasSize(7);// 3 names, 1 address, 1 Y and 2 N entities } } @@ -193,6 +193,7 @@ public class EntityRedactionServiceTest { } + @Test public void headerPropagation() throws IOException { @@ -219,6 +220,31 @@ public class EntityRedactionServiceTest { } + @Test + public void testNGuideline() throws IOException { + + ClassPathResource pdfFileResource = new ClassPathResource("files/Minimal Examples/Empty Tabular Data.pdf"); + + DictionaryResponse dictionaryResponse = DictionaryResponse.builder() + .entries(Collections.singletonList("Aldershof S.")) + .build(); + + when(dictionaryClient.getVersion()).thenReturn(DICTIONARY_VERSION.incrementAndGet()); + when(dictionaryClient.getDictionaryForType(NAME_CODE)).thenReturn(dictionaryResponse); + DictionaryResponse addressResponse = DictionaryResponse.builder() + .entries(Collections.singletonList("Novartis Crop Protection AG, Basel, Switzerland")) + .build(); + when(dictionaryClient.getDictionaryForType(ADDRESS_CODE)).thenReturn(addressResponse); + + try (PDDocument pdDocument = PDDocument.load(pdfFileResource.getInputStream())) { + Document classifiedDoc = pdfSegmentationService.parseDocument(pdDocument); + entityRedactionService.processDocument(classifiedDoc, null); + assertThat(classifiedDoc.getEntities()).hasSize(1); // one page + assertThat(classifiedDoc.getEntities().get(1).stream().filter(entity -> entity.getMatchedRule() == 8).count()).isEqualTo(6); + } + } + + @Before public void stubRedaction() { String tableRules = "package drools\n" + @@ -226,12 +252,20 @@ public class EntityRedactionServiceTest { "import com.iqser.red.service.redaction.v1.server.redaction.model.Section\n" + "\n" + "global Section section\n" + + "rule \"8: Not redacted because Vertebrate Study = N\"\n" + + " when\n" + + " Section(rowEquals(\"Vertebrate study Y/N\", \"N\"))\n" + + " then\n" + + " section.redactNot(\"name\", 8, \"Not redacted because row is not a vertebrate study\");\n" + + " section.redactNot(\"address\", 8, \"Not redacted because row is not a vertebrate study\");\n" + + " section.highlightCell(\"Vertebrate study Y/N\", 8, \"hint_only\");\n" + + " end\n" + "rule \"9: Redact Authors and Addresses in Reference Table, if it is a Vertebrate study\"\n" + " when\n" + " Section(rowEquals(\"Vertebrate study Y/N\", \"Y\"))\n" + " then\n" + " section.redact(\"name\", 9, \"Redacted because row is a vertebrate study\");\n" + - " section.redact(\"address\", 9, \"Redacted because rows is a vertebrate study\");\n" + + " section.redact(\"address\", 9, \"Redacted because row is a vertebrate study\");\n" + " section.highlightCell(\"Vertebrate study Y/N\", 9, \"must_redact\");\n" + " end"; when(rulesClient.getVersion()).thenReturn(1L); From 0baf48698d6ea22c20886091b0dc89c0eee483a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thierry=20G=C3=B6ckel?= Date: Tue, 25 Aug 2020 15:45:24 +0200 Subject: [PATCH 3/4] Remove unused import --- .../service/redaction/v1/server/redaction/model/Section.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java index 808eb797..feee9f99 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java @@ -9,8 +9,6 @@ import java.util.regex.Pattern; import org.apache.commons.lang3.StringUtils; -import com.iqser.red.service.redaction.v1.server.classification.model.TextBlock; - import lombok.Builder; import lombok.Data; import lombok.extern.slf4j.Slf4j; From 4954aafed78e06484531d6264bdf215176ee0ef2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thierry=20G=C3=B6ckel?= Date: Tue, 25 Aug 2020 17:21:56 +0200 Subject: [PATCH 4/4] Reduce log level. --- .../redaction/v1/server/tableextraction/model/Table.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/tableextraction/model/Table.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/tableextraction/model/Table.java index 73418718..36f46b39 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/tableextraction/model/Table.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/tableextraction/model/Table.java @@ -119,7 +119,7 @@ public class Table extends AbstractTextContainer { try { cellsToTheTop.add(rows.get(i).get(colIndex)); } catch (IndexOutOfBoundsException e) { - log.warn("No cell {} in row {}, ignoring.", colIndex, rowIndex); + log.debug("No cell {} in row {}, ignoring.", colIndex, rowIndex); } } for (Cell topCell : cellsToTheTop) {