You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2019/05/03 16:14:01 UTC

[tika] branch master updated: TIKA-2749 -- add initial, optional "AUTO" mode for OCR'ing of PDF pages

This is an automated email from the ASF dual-hosted git repository.

tallison pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tika.git


The following commit(s) were added to refs/heads/master by this push:
     new f728413  TIKA-2749 -- add initial, optional "AUTO" mode for OCR'ing of PDF pages
f728413 is described below

commit f72841353c30ba0ece3bdd40570ccdb03c3f8994
Author: TALLISON <ta...@apache.org>
AuthorDate: Fri May 3 12:13:49 2019 -0400

    TIKA-2749 -- add initial, optional "AUTO" mode for OCR'ing of PDF pages
---
 CHANGES.txt                                                        | 5 +++++
 .../main/java/org/apache/tika/parser/pdf/AbstractPDF2XHTML.java    | 5 +++++
 .../src/main/java/org/apache/tika/parser/pdf/PDFParserConfig.java  | 7 +++++--
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index e56a0ad..04794bb 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -8,6 +8,11 @@ Release 2.0.0 - ???
 
 Release 1.21 - ????
 
+   * Add optional AUTO mode to OCR'ing of PDFs.  If tesseract is installed
+     and on the path, and this option is selected programmatically
+     or via TikaConfig(), the PDFParser will use heuristics to decide
+     whether or not to run OCR per page on PDFs. (TIKA-2749)
+
    * The ZipContainerDetector's default behavior was changed to run
      streaming detection up to its markLimit.  Users can get the
      legacy behavior (spool-to-file/rely-on-underlying-file-in-TikaInputStream)
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/pdf/AbstractPDF2XHTML.java b/tika-parsers/src/main/java/org/apache/tika/parser/pdf/AbstractPDF2XHTML.java
index c0ccc28..8116593 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/pdf/AbstractPDF2XHTML.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/pdf/AbstractPDF2XHTML.java
@@ -429,6 +429,11 @@ class AbstractPDF2XHTML extends PDFTextStripper {
             }
             if (config.getOcrStrategy().equals(PDFParserConfig.OCR_STRATEGY.OCR_AND_TEXT_EXTRACTION)) {
                 doOCROnCurrentPage();
+            } else if (config.getOcrStrategy().equals(PDFParserConfig.OCR_STRATEGY.AUTO)) {
+                //TODO add more sophistication
+                if (totalCharsPerPage < 10 || unmappedUnicodeCharsPerPage > 10) {
+                    doOCROnCurrentPage();
+                }
             }
 
             PDPageAdditionalActions pageActions = page.getActions();
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParserConfig.java b/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParserConfig.java
index 4cdf51f..b48acb8 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParserConfig.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParserConfig.java
@@ -48,6 +48,7 @@ public class PDFParserConfig implements Serializable {
 
 
     public enum OCR_STRATEGY {
+        AUTO,
         NO_OCR,
         OCR_ONLY,
         OCR_AND_TEXT_EXTRACTION;
@@ -61,6 +62,8 @@ public class PDFParserConfig implements Serializable {
                 return OCR_ONLY;
             } else if (s.toLowerCase(Locale.ROOT).contains("ocr_and_text")) {
                 return OCR_AND_TEXT_EXTRACTION;
+            } else if ("auto".equals(s.toLowerCase(Locale.ROOT))) {
+                return AUTO;
             }
             StringBuilder sb = new StringBuilder();
             sb.append("I regret that I don't recognize '").append(s);
@@ -763,7 +766,7 @@ public class PDFParserConfig implements Serializable {
         if (getExtractUniqueInlineImagesOnly() != config.getExtractUniqueInlineImagesOnly()) return false;
         if (getIfXFAExtractOnlyXFA() != config.getIfXFAExtractOnlyXFA()) return false;
         if (getOcrDPI() != config.getOcrDPI()) return false;
-        if (isCatchIntermediateIOExceptions() != config.isCatchIntermediateIOExceptions()) return false;
+        if (getCatchIntermediateIOExceptions() != config.getCatchIntermediateIOExceptions()) return false;
         if (!getAverageCharTolerance().equals(config.getAverageCharTolerance())) return false;
         if (!getSpacingTolerance().equals(config.getSpacingTolerance())) return false;
         if (!getOcrStrategy().equals(config.getOcrStrategy())) return false;
@@ -792,7 +795,7 @@ public class PDFParserConfig implements Serializable {
         result = 31 * result + getOcrImageType().hashCode();
         result = 31 * result + getOcrImageFormatName().hashCode();
         result = 31 * result + getAccessChecker().hashCode();
-        result = 31 * result + (isCatchIntermediateIOExceptions() ? 1 : 0);
+        result = 31 * result + (getCatchIntermediateIOExceptions() ? 1 : 0);
         result = 31 * result + (getExtractActions() ? 1 : 0);
         result = 31 * result + Long.valueOf(getMaxMainMemoryBytes()).hashCode();
         return result;