Пакетное распознавание PDF-файлов, которые еще не были OCR'd

Если у меня есть 10000 PDF-файлов, некоторые из которых были OCR, некоторые из которых имеют 1 страницу, которая была OCR, но остальные страницы нет, как я могу просмотреть все PDF-файлы и только OCR страницы, которые еще не были сделано?

3 ответа

Это именно то, что я искал, у меня есть тысячи отсканированных PDF-файлов, некоторые из которых уже были распознаны, а некоторые нет.

Итак, я объединил информацию, которую нашел на форумах и stackru, и создал свое собственное решение, которое делает ТОЧНО то, что я обобщил для вас здесь:

  • рекурсивно сканировать все подкаталоги для файлов PDF;
  • проверьте, был ли PDF-файл уже OCR'ed, и если нет, обработайте PDF с OCR с высоким качеством, на языке (ах), который вы можете указать;
  • сохранить PDF - файл с оптическим распознаванием текста как PDF / A и перезаписать старый (без оптического распознавания текста).

Я использую Windows 10 и не могу найти однозначного ответа. Я пробовал сделать это с помощью Acrobat Pro, но это дало мне много ошибок, и пакетная обработка Acrobat останавливается при каждой ошибке или защищенном паролем файле. Я также пробовал много других инструментов пакетного распознавания текста в Windows, но ни один из них не помог. Я провел бесчисленное количество часов вручную, проверяя, какие файлы уже имеют текстовый слой "под" изображением.

ДО! Microsoft объявила, что теперь очень легко запускать Linux под Windows, на той же машине, в той же файловой системе. В Linux гораздо больше инструментов и утилит, чем в Windows, поэтому я подумал, что попробую.

Итак, шаг за шагом:

  1. Включите подсистему Windows для Linux в Панели управления Windows; есть много гидов. Поищи в Гугле. Пару минут.
  2. Установите Linux из Магазина Windows. Откройте Магазин Windows, найдите Ubuntu и установите. Занимает около 5 минут.
  3. Теперь у вас есть "приложение Ubuntu". Запустить его. Он показывает вам linux bash и с файловым доступом к вашим файлам Windows через / mnt / c. Это магия!
  4. Вам понадобятся некоторые "приложения" Linux, а именно pdffonts и ocrmypdf; который можно установить с помощью команд sudo apt install pdffonts и sudo apt install ocrmypdf. Мы будем использовать эти приложения, чтобы проверить, есть ли встроенный шрифт в PDF, а если нет, OCR PDF. (см. примечание ниже).
  5. Установите очень маленький сценарий bash (ниже) в свой домашний каталог ~.
  6. Перейдите (cd) в каталог, в котором сохранены все ваши PDF-файлы. Например:/mnt/c/Users/name/OneDrive/Documents.
  7. Выполните команду: find . -type f -name "*.pdf" -exec /your/homedir/pdf-ocr.sh '{}' \;

Готово!

Выполнение этого, конечно, может занять много времени, в зависимости от того, сколько у вас PDF-файлов и сколько из них еще не OCR.

Вот sh-скрипт. Вы должны сохранить его где-нибудь в домашней папке, чтобы можно было звонить откуда угодно. Вот так:

  1. тип cd ~. Это перенесет вас в вашу домашнюю папку.
  2. тип pico pdf-ocr.sh. Появится редактор. Вставьте приведенный ниже код сценария. Затем нажмите Ctrl + X, а затем Y. Теперь ваш файл сохранен.
  3. тип sudo chmod +x pdf-ocr.sh. Это даст скрипту разрешение на запуск.
MYFONTS=$(pdffonts -l 5 "$1" | tail -n +3 | cut -d' ' -f1 | sort | uniq)
if [ "$MYFONTS" = '' ] || [ "$MYFONTS" = '[none]' ]; then
    echo "Not yet OCR'ed: $1 -------- Processing...."
        echo " "
        ocrmypdf -l eng+deu+nld -s "$1" "$1"
        echo " "
else
    echo "Already OCR'ed: $1"
echo " "
fi

Что это значит?

Ну а findКоманда ищет все файлы PDF в текущем каталоге, включая подкаталоги. Затем он "отправляет" эти файлы в сценарий, в которомpdffontsпроверяет, есть ли встроенные шрифты. Если да, пропустите файл и попробуйте следующий. Если встроенных шрифтов не найдено, используйтеocrmypdfсделать OCR-ing. Я нашел качество OCR в ocrmypdf ОЧЕНЬ хорошим, даже лучше, чем у Acrobat. Вы, конечно, можете изменить настройки. Я могу представить, например, что вы можете использовать другие языки для OCR, чемeng+deu+nld. Вы можете просмотреть все варианты здесь: https://ocrmypdf.readthedocs.io/en/latest/

Примечание: здесь я предполагаю, что если PDF-файл не имеет встроенных шрифтов (так что это в основном изображение (сканирование) в PDF-файле), то он не имеет оптического распознавания текста. Я знаю, что это не всегда может быть точным и / или правдивым, но для меня этого достаточно, чтобы определить, какие файлы нужно передать через OCR. Так что нет необходимости переделывать сотни или тысячи файлов PDF....

Я знаю, что установить Linux под Windows немного сложнее, но это очень легко сделать, если у вас есть базовые навыки работы с Linux. Для меня это стоило усилий, потому что теперь я сделал пакетный процессор "в один клик", который работает. Я не мог найти решения для этого с помощью Windows-инструментов.

Я надеюсь, что кто-то найдет это и сочтет это полезным. Если у кого-то есть улучшения, опубликуйте их здесь.

Спасибо.

Йос Йонкерен

Почему бы вам не все заново OCR? Количество времени, которое вы тратите на мучительную работу, вероятно, превышает время, затрачиваемое на саму работу.

Развернуть эту тему.

Вы можете узнать, какие файлы PDF уже были распознаны, протестировав их с помощью pdffonts. Если есть встроенные шрифты, очень вероятно, что PDF уже OCRed.

Что касается пакетной обработки, я написал небольшой скрипт, который может выполнять пакетное распознавание текста в выходной формат pdf/word/excel/csv.

Вы можете найти его по адресу https://github.com/deajan/pmOCR pmOCR (OCR для бедных - это оболочка для Abbyy OCR CLI для Linux или решения с открытым исходным кодом Tesseract 3).

Если под OCRed вы подразумеваете, что они содержат текст в машиночитаемой форме, вы можете использовать библиотеку, такую ​​как Apache PDFBox, чтобы попытаться извлечь текст со второй страницы документа. Если он выдает ошибку или возвращает мусор, он, скорее всего, не OCRed.

Другие вопросы по тегам