From 7ba9ae22feebf83982f05343ed20e1f297d383b4 Mon Sep 17 00:00:00 2001 From: deiflaender Date: Thu, 3 Nov 2022 15:50:20 +0100 Subject: [PATCH] RSS-181: Use pdfbox quicksort for sorting in rules --- .../classification/service/ClassificationService.java | 4 ++-- .../v1/server/redaction/model/SearchableText.java | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) 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 e18705f4..a418ece2 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 @@ -70,9 +70,9 @@ public class ClassificationService { } if (textBlock.getText().length() > 5 && (textBlock.getMostPopularWordHeight() > document.getTextHeightCounter().getMostPopular() || textBlock.getMostPopularWordFontSize() > document.getFontSizeCounter().getMostPopular()) && PositionUtils.getApproxLineCount(textBlock) < 5.9 - && ((textBlock.getMostPopularWordStyle().contains("bold") && Character.isDigit(textBlock.toString().charAt(0)) && !matcher2.matches() && !textBlock.toString().contains(":") + && (textBlock.getMostPopularWordStyle().contains("bold") && Character.isDigit(textBlock.toString().charAt(0)) && !matcher2.matches() && !textBlock.toString().contains(":") || textBlock.toString().equals(textBlock.toString().toUpperCase(Locale.ROOT)) && !matcher2.matches() && !textBlock.toString().contains(":") - || textBlock.toString().startsWith("APPENDIX") || textBlock.toString().startsWith("TABLE")) && !textBlock.toString().endsWith(":"))) { + || textBlock.toString().startsWith("APPENDIX") || textBlock.toString().startsWith("TABLE")) && !textBlock.toString().endsWith(":")) { textBlock.setClassification("H 1"); document.setHeadlines(true); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/SearchableText.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/SearchableText.java index ee3d80a1..09aa1c30 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/SearchableText.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/SearchableText.java @@ -14,6 +14,8 @@ import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; +import org.apache.pdfbox.util.QuickSort; + import lombok.Getter; public class SearchableText { @@ -217,8 +219,10 @@ public class SearchableText { public String getAsStringWithLinebreaksSorted(List sequences) { - var sorted = sequences.stream() - .sorted(new TextPositionSequenceComparator()) + var quickSorted = new ArrayList<>(sequences); + QuickSort.sort(quickSorted, new TextPositionSequenceComparator()); + + var sorted = quickSorted.stream() .sorted(Comparator.comparing(a -> a.getPage())) .collect(Collectors.toList());