From 5304c631ec23e96bdcdc586ebbff2afb80a6b46b Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Sat, 27 Jul 2019 02:14:59 -0700 Subject: [PATCH] Don't warn about --user-words in Tesseract 4.1 or later --- src/ocrmypdf/_validation.py | 7 +++++-- src/ocrmypdf/exec/tesseract.py | 9 +++++++++ tests/test_validation.py | 9 +++++++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/ocrmypdf/_validation.py b/src/ocrmypdf/_validation.py index 4163a58d..02bf043b 100644 --- a/src/ocrmypdf/_validation.py +++ b/src/ocrmypdf/_validation.py @@ -253,10 +253,13 @@ def check_options_advanced(options): "--pdfa-image-compression argument has no effect when " "--output-type is not 'pdfa', 'pdfa-1', or 'pdfa-2'" ) - if tesseract.v4(options.tesseract_env) and ( + if not tesseract.has_user_words(options.tesseract_env) and ( options.user_words or options.user_patterns ): - log.warning('Tesseract 4.x ignores --user-words, so this has no effect') + log.warning( + "Tesseract 4.0 ignores --user-words and --user-patterns, so these " + "arguments have no effect." + ) def check_options_metadata(options): diff --git a/src/ocrmypdf/exec/tesseract.py b/src/ocrmypdf/exec/tesseract.py index c16a9202..863047a1 100644 --- a/src/ocrmypdf/exec/tesseract.py +++ b/src/ocrmypdf/exec/tesseract.py @@ -88,6 +88,15 @@ def has_textonly_pdf(tesseract_env=None): return False +def has_user_words(tesseract_env=None): + """Does Tesseract have --user-words capability? + + Not available in 4.0, but available in 4.1. Also available in 3.x, but + we no longer support 3.x. + """ + return version(tesseract_env) >= '4.1' + + def languages(tesseract_env=None): def lang_error(output): msg = ( diff --git a/tests/test_validation.py b/tests/test_validation.py index c151ec16..138c8820 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -81,8 +81,13 @@ def test_optimizing(caplog): def test_user_words(caplog): - vd.check_options_advanced(make_opts(user_words='foo')) - assert 'ignores --user-words' in caplog.text + with patch('ocrmypdf.exec.tesseract.version', return_value='4.0.0'): + vd.check_options_advanced(make_opts(user_words='foo')) + assert '4.0 ignores --user-words' in caplog.text + caplog.clear() + with patch('ocrmypdf.exec.tesseract.version', return_value='4.1.0'): + vd.check_options_advanced(make_opts(user_patterns='foo')) + assert '4.0 ignores --user-words' not in caplog.text def test_pillow_options():