Як перетворити PDF в текст, у якому можна шукати текст?


20

У мене є кількість відсканованих документів у форматі pdf, і я хочу мати можливість їх пошуку. Як я можу це зробити?

По суті, я повинен OCR pdf, а потім змішати витягнутий текст назад у новий pdf. Я безуспішно спробував декілька різних рішень (включаючи ті, що знайдені в Доданні інформації про OCR до PDF ).

  1. pdfocr (що дає мені це питання: https://github.com/gkovacs/pdfocr/isissue/7 )
  2. pdfsandwich (про який у центрі програмного забезпечення йдеться про поганий пакет, і я не повинен його встановлювати)
  3. OCRfeeder (в центрі програмного забезпечення) добре експортує у odt, але не реагує при експорті в pdf.
  4. Gscan2pdf експортує все чорне (але доступне для пошуку) зображення, як повідомлялося в цій дискусії .
  5. Я не думаю, що переглядач Pdfxchange може впоратися з тим, що виконуватиме ocr на льоту на файлах понад 500 сторінок.

Чи є програмний пакет, про який я не знаю? Або сценарій, який робить це?


3
Я ще цього не пробував, але в минулому я бачив, як цей проект був рекомендований.
Glutanimate

Я щойно писав pdf2searchablepdf. Це спирається на tesseract. Це добре працює. Супер простий у використанні. Дивіться тут. askubuntu.com/a/1187881/327339
Габріель

Відповіді:


12

Ubuntu <16.04

Після коментаря Glutanimate я знайшов робоче рішення. Це сценарій OCRmyPDF .

git clone https://github.com/jbarlow83/OCRmyPDF
cd OCRmyPDF
sh ./OCRmyPDF.sh -h  # to see the usage

Якщо ви отримаєте повідомлення про те, що ви повинні встановити GNU паралельно. Це можна зробити (дотримуючись /ubuntu//a/298598/115155 ) за допомогою (другий рядок необов’язковий і залежить від вашого смаку та версії):

sudo apt-get install parallel
sudo rm /etc/parallel/config

Нарешті, ви можете OCR ваш pdf за допомогою команди:

sh ./OCRmyPDF.sh input.pdf output.pdf  # change input and output to the files you want

Якщо здається, що команда не відповідає, ви можете збільшити багатослівність, використовуючи -vпрапор (який можна використовувати поступово як -vvабо -vvv). Можливо, найкраще перевірити результати спочатку на коротшому PDF-файлі. Ви можете скоротити pdf так:

pdftk A=input.pdf cat A1-5 output output.pdf

Ubuntu> = 16.04

Станом на Ubuntu 16.04 OCRmyPDF став доступний через apt. Просто біжи

sudo apt install ocrmypdf
ocrmypdf -h   # to see the usage

Нарешті, ви можете OCR ваш pdf за допомогою команди:

ocrmypdf input.pdf output.pdf  # change input and output to the files you want

Якщо здається, що команда не відповідає, ви можете збільшити багатослівність, використовуючи -vпрапор (який можна використовувати поступово як -vvабо -vvv). Можливо, найкраще перевірити результати спочатку на коротшому PDF-файлі. Ви можете скоротити pdf так:

pdftk A=input.pdf cat A1-5 output output.pdf

Якщо у вас виникли запитання, подивіться у новій Github Repo .


Чи приймете ви свою відповідь, щоб її вирішити? (Щоб вона не потрапила до списку без відповіді)
Зареєстрований користувач

Просто sudo -H pip install git+https://github.com/jbarlow83/OCRmyPDFдля Ubuntu 16.04
Мартін Тома

1
Для Ubuntu 16.10 та новіших версій ви можете просто зробити sudo apt install ocrmypdf.
ендоліт

6

@ don.joey відповів сценарієм ocrmypdf . Однак його можна встановити прямо зараз (з 16.10 і далі).

sudo apt install ocrmypdf

Тоді вам доведеться встановити потрібні вам мови tesseract .

Щоб перелічити, які мови вже є у вашій системі, введіть:

tesseract --list-langs

Якщо ви пропустите його, встановіть його. Наприклад,

sudo apt install tesseract-ocr-spa

Тепер ви можете створити PDF, який можна шукати (якість якого буде змінюватися, залежно від відсканованого документа) за допомогою наступної команди

ocrmypdf -l 'spa' old.pdf new.pdf

Звичайно, ви можете перевірити його довідкову сторінку на наявність додаткових варіантів.


Попросіть мого сервера!
don.joey

4

pdfsandwichвиконує саме цю роботу. Мені не було відомо, що в центрі програмного забезпечення є пакет, але я надаю йому пакунки Ubuntu на веб-сайті проекту (детальніше див. Http://www.tobias-elze.de/pdfsandwich/ ) включно з останньою версією (0.1.2), яка навряд чи є ще в жодному програмному центрі.

Якщо у вас відсканований файл scanned_file.pdf, просто зателефонуйте

pdfsandwich scanned_file.pdf

який генерує файл scanned_file_ocr.pdfіз розпізнаним текстом, доданим до відсканованих сторінок.

Порівняно з більшістю існуючих рішень, він автоматично виявляє встановлену версію tesseract і відповідно адаптує свою поведінку. Крім того, він виконує попередню обробку відсканованих зображень до процесу OCR, наприклад, скасування або видалення темних країв тощо, що може значно покращити оптичне розпізнавання символів.

ВІДМОВА: Я розробник pdfsandwichі тому сильно упереджений.


Це звучить чудово, але чому встановлена ​​версія pdfsandwich версії 0.1.4 за допомогою apt-get перетворює кожен символ у чорний прямокутник для мене на Ubuntu 16.04?
Валентас

1
На це важко відповісти без додаткових подробиць. Перш за все, рекомендую використовувати більш нову версію інструменту. Поточна версія - 0,1.6. Ви можете знайти деб-пакети для Ubuntu на веб-сайті. По-друге, якщо це не допомагає, ви можете скористатися опцією -verbose, щоб отримати детальнішу інформацію та використовувати ці дані для подання звіту про помилку.
Тобіас Елзе

пара питань для мене. конвертувати: спроба виконати операцію, не дозволену політикою безпеки `PDF '@ error / constitute.c / IsCoderAuthorized / 408. тому мені довелося встановити imagemagick з джерела, завантаженого з imagemagick.org/script/install-source.php, тоді я отримав помилку під час завантаження спільних бібліотек: libMagickCore-7.Q16HDRI.so.6: не вдається відкрити спільний файл об'єкта: "Немає такого файл або каталог "", і це рішення працювало за допомогою запуску версії imagemagick "sudo ldconfig / usr / local / lib" 7.0.8-56, отриманої методом "ідентифікувати -версія".
пронизливо

можливо, варто додати ці утиліти, якщо ви плануєте маніпулювати або обрізати файли pdfs. 1. pdfshuffler для розділення лівої та правої сторінок (з двосторонніми оригіналами) 2. pdftk pdf ланцюжок Використовуйте pdftk (як файл jar), щоб розділити файл на парні та непарні сторінки окремо: 4 для обрізки сторінок pdfquench - мені також знадобився gir1. 2-goocanvas-2.0 gir1.2-poppler-0.18 python-pygoocanvas python-poppler python-pypdf2. pdfsandwich працював у пригоді, також зменшив розмір файлу на 10 разів. Спасибі. Ubuntu 19.04 також pdfsam, щоб розділити та об'єднати, запустити як завантажувальний файл Java після завантаження
pierrely

0

У OCRfeeder є помилка

/usr/lib/python2.7/dist-packages/reportlab/pdfgen/textobject.py

рядок 436 повинен читати:

            lines = asUnicode(stuff).strip().split('\n')
# bug here, was:
#            lines = '\n'.split(asUnicode(stuff).strip())

змінив це, і це працювало на мене


0

ОС: Ubuntu 18.04

Спочатку встановіть за tesseract-ocrдопомогою:

apt-cache show tesseract-ocr
sudo apt-get update && sudo apt-get upgrade
apt-get install tesseract-ocr --print-uris
apt-get install tesseract-ocr
sudo !!

Якщо ви збираєтесь використовувати мову, відмінну від англійської, з tesseract, тоді вам доведеться встановити відповідний пакет мов. Наприклад, для португальської, вам потрібно буде зробити:

sudo apt-get install tesseract-ocr-por

Інакше ви отримаєте помилку:

Error opening data file /usr/share/tesseract-ocr/4.00/tessdata/por.traineddata
Please make sure the TESSDATA_PREFIX environment variable is set to your 
"tessdata" directory.
Failed loading language 'por'
Tesseract couldn't load any languages!
Could not initialize tesseract.

Якщо ви Google "Tesseract PDF", ви, ймовірно, знайдете цю дещо застарілу публікацію . Однак це дає кілька корисних підказок. Спочатку доведеться конвертувати .pdfфайл у .tiffодин. Виконати:

convert -density 125 originalfile.pdf -depth 8 -alpha Off newfile.tiff

Якщо, як у застарілому дописі, ви забудете додати alpha -Off, ви отримаєте таку помилку:

Tesseract Open Source OCR Engine v4.0.0-beta.1 with Leptonica
Error in pixReadFromTiffStream: spp not in set {1,3,4}

Тепер ви можете запустити остаточну команду. У конкретному випадку, якщо ваш оригінальний PDF - португальською, вам знадобиться ця команда:

tesseract -l por newfile.tiff output pdf 

Створений файл буде названий output.pdf. Наприклад, якщо ваш PDF-файл є французькою мовою, після встановлення відповідної роботи tesseract-ocr-fra, ви запускаєте:

tesseract -l fra newfile.tiff output pdf 

І знову бажаний файл буде output.pdf.


0

У мене була ця сама проблема, тому я написав це у вихідні. Дайте йому постріл; це чудово працює! Це проста обгортка навколо tesseract. Він використовує pdftoppmдля перетворення PDF у купу файлів TIFF, потім використовує tesseractдля виконання OCR (оптичне розпізнавання символів) на них та створює PDF, який можна шукати як вихід. Всі проміжні тимчасові файли автоматично видаляються після завершення сценарію.

Вихідний код: https://github.com/ElectricRCAircraftGuy/PDF2SearchablePDF

Інструкції щодо встановлення та використання pdf2searchablepdf:

Тестовано на Ubuntu 18.04 11 листопада 2019 року.

Встановити:

git clone https://github.com/ElectricRCAircraftGuy/PDF2SearchablePDF.git
./PDF2SearchablePDF/install.sh
sudo apt update
sudo apt install tesseract-ocr

Використання:

pdf2searchablepdf mypdf.pdf

Тепер у вас буде pdf під назвою mypdf_searchable.pdf , який містить текст для пошуку!

Зроблено. Обгортка не має пітонних залежностей, так як вона в даний час повністю написана в баші.

Посилання або суміжні ресурси:

  1. PDF2SearchablePDF : https://github.com/ElectricRCAircraftGuy/PDF2SearchablePDF
  2. Як перетворити PDF в текст, у якому можна шукати текст?
  3. Яке найкраще, найпростіше рішення для OCR?
  4. Витяг вбудованих зображень з PDF
  5. pdfsandwich : Альтернативна обгортка програмного забезпечення, яку я щойно виявив, що теж варто перевірити! http://www.tobias-elze.de/pdfsandwich/
  6. /unix/301318/how-to-ocr-a-pdf-file-and-get-the-text-stored-within-pdf/551526#551526
  7. [як перетворити PDF у купу зображень за допомогою pdftoppm] Витягування вбудованих зображень із PDF
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.