Как включить TesseractOCRParser с помощью TikaConfig и утилиты командной строки Tika?
Я установил apache Tika 1.8, и он работает отлично, за исключением того, что часть OCR не работает. У меня установлен Tesseract, и он также работает правильно. Когда я пытаюсь отправить PDF с изображением, я получаю следующее.
ВНИМАНИЕ: Tesseract OCR установлен и будет автоматически применяться к файлам изображений, если вы не исключили TesseractOCRParser из анализатора по умолчанию. Тессеракт может значительно замедлить извлечение контента (TIKA-2359). Начиная с версии Tika 1.15 (и предыдущих версий), Tesseract вызывается автоматически. В будущих версиях Tika пользователям может понадобиться включить TesseractOCRParser через TikaConfig.
Могу ли я настроить TikaConfig с помощью утилиты командной строки? Или я должен клонировать проект и обновить poms и перестроить. Я действительно не хочу этого делать.
Здесь есть некоторая информация о том, как использовать утилиту командной строки и TikaConfig, но я не могу понять, как включить с ней TesseractOCRParser.
Любая помощь, высоко ценится.
1 ответ
Итак, с помощью этого поста на форуме Apache Tika Спасибо, ребята.
Мне удалось заставить его работать. Это взломать, но это работает. Я извлек файл Jar-файла Tika-app. Затем найдите файл PDFParser.properties и измените следующие свойства следующим образом.
extractInlineImages true
extractUniqueInlineImagesOnly false
ocrStrategy ocr_and_text_extraction
Затем найдите TesseractOCRConfig.properties. И измените это свойство на 1..
enableImageProcessing=1
Сохраните вышеуказанные файлы свойств. Застегни все это снова. И используйте новый zar-файл в архиве, и теперь он будет извлекать текст и текст из изображений из PDF-файла.
Я попробовал подход user3250052, но мне не удалось повторно сжать файл jar так, чтобы он был исполняемым. Это из-за моей собственной неопытности с Java, но, тем не менее, менее хакерский способ - вызвать настраиваемый файл конфигурации tika при вызове tika:
java -jar tika-app.jar --config=tika-config.xml image.pdf
Вот как выглядит мой файл tika-config.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<properties>
<!--for example: <mimeTypeRepository resource="/org/apache/tika/mime/tika-mimetypes.xml"/>-->
<service-loader dynamic="true" loadErrorHandler="IGNORE"/>
<encodingDetectors>
<encodingDetector class="org.apache.tika.detect.DefaultEncodingDetector"/>
</encodingDetectors>
<translator class="org.apache.tika.language.translate.DefaultTranslator"/>
<detectors>
<detector class="org.apache.tika.detect.DefaultDetector"/>
</detectors>
<parsers>
<parser class="org.apache.tika.parser.DefaultParser"/>
<parser class="org.apache.tika.parser.pdf.PDFParser">
<params>
<param name="extractInlineImages" type="bool">true</param>
</params>
</parser>
</parsers>
</properties>
Чтобы создать этот файл конфигурации, сначала я запустил:
java -jar tika-app.jar --dump-current-config
Это сбросит для вас конфигурацию по умолчанию. Я взял это и поместил в tika-config.xml и добавил:
<parser class="org.apache.tika.parser.pdf.PDFParser">
<params>
<param name="extractInlineImages" type="bool">true</param>
</params>
</parser>
который я почерпнул из https://cwiki.apache.org/confluence/display/tika/PDFParser%20(Apache%20PDFBox) (вариант 1).
Несмотря на то, что tesseract включен по умолчанию (поэтому OCR будет работать с файлами изображений из коробки), PDF-файлы не распознаются без установки этого параметра, потому что, как указано в приведенной выше ссылке, "по умолчанию извлечение встроенных изображений отключено, потому что некоторые редкие PDF-файлы содержат тысячи встроенных изображений на страницу, и это сильно сказывается на производительности, как использовании памяти, так и времени ".
Теперь все (OCR для файлов изображений, OCR изображений в PDF-файлах или PDF-файлах на основе изображений, а также, естественно, извлечение текста из текстовых PDF-файлов) работает с java-приложением tika. Я нашел много документации о том, как заставить это работать на java server tika, но очень мало на java app tika, поэтому я надеюсь, что это сэкономит кому-то несколько часов, которые потребовались мне, чтобы понять это (дайте мне знать).
Я бы рекомендовал использовать ocrStrategy auto
Это пытается извлечь, а затем возвращается к OCR