Пакетное OCRing PDF-файлов, которые еще не были OCR'd - PullRequest
2 голосов
/ 13 октября 2009

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

Ответы [ 4 ]

1 голос
/ 08 мая 2019

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

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

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

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

UNTIL! 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, а если нет, для распознавания 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 и сколько из них еще не распознано.

Вот 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 для распознавания текста. Я обнаружил, что качество распознавания текста ocrmypdf ОЧЕНЬ хорошее, даже лучше, чем у Acrobat. Вы можете, конечно, настроить параметры. Например, я могу представить, что вы можете использовать другие языки для распознавания текста, кроме eng+deu+nld. Вы можете посмотреть все варианты здесь: https://ocrmypdf.readthedocs.io/en/latest/

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

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

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

Спасибо.

Йос Джонкерен

0 голосов
/ 13 октября 2009

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

0 голосов
/ 27 августа 2015

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

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

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

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

0 голосов
/ 13 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...