PDF извлечение текста с координатами - PullRequest
40 голосов
/ 31 мая 2011

Я хотел бы извлечь текст из части (используя координаты) PDF, используя Ghostscript.

Кто-нибудь может мне помочь?

Ответы [ 3 ]

96 голосов
/ 31 мая 2011

Да, с Ghostscript вы можете извлекать текст из PDF-файлов. Но нет, это не лучший инструмент для работы. И нет, вы не можете сделать это «порциями» (частями отдельных страниц). Что вы можете сделать: извлечь текст только из определенного диапазона страниц.

Первое: Устройство вывода txtwrite Ghostscript (не очень хорошо)

 gs \
   -dBATCH \
   -dNOPAUSE \
   -sDEVICE=txtwrite \
   -dFirstPage=3 \
   -dLastPage=5 \
   -sOutputFile=- \
   /path/to/your/pdf

Это выведет весь текст, содержащийся на страницах 3-5, в стандартный вывод. Если вы хотите выводить текстовый файл, используйте -sOutputFile=textfilename.txt.


gs Обновление:

В последних версиях Ghostscript произошли значительные улучшения в устройстве txtwrite и исправлены ошибки. См. последние изменения в журнале Ghostscript (поиск txtwrite на этой странице) для получения подробной информации.


Второе: утилита Ghostscript ps2ascii.ps PostScript (лучше)

Для этого требуется загрузить последнюю версию файла ps2ascii.ps из репозитория Ghostscript Git . Вам нужно будет конвертировать PDF в PostScript, а затем выполнить эту команду для файла PS:

gs \
  -q \
  -dNODISPLAY \
  -P- \
  -dSAFER \
  -dDELAYBIND \
  -dWRITESYSTEMDICT \
  -dSIMPLE \
   /path/to/ps2ascii.ps \
   input.ps \
  -c quit

Если параметр -dSIMPLE не определен, каждая выходная строка содержит некоторую дополнительную информацию, помимо чистого текста, о используемых шрифтах и ​​размере шрифта.

Если вы замените этот параметр на -dCOMPLEX, вы получите дополнительную информацию об используемых цветах и ​​изображениях.

Прочтите комментарии внутри ps2ascii.ps , чтобы узнать больше об этой утилите. Это не удобно, но для меня это работало, в большинстве случаев мне это было нужно ....

Третье: Утилита XPDF pdftotext CLI (удобнее, чем Ghostscript)

Более удобный способ извлечения текста: используйте pdftotext (доступно для Windows, а также для Linux / Unix или Mac OS X). Эта утилита основана на Poppler или XPDF. Вы можете попробовать эту команду:

 pdftotext \
   -f 13 \
   -l 17 \
   -layout \
   -opw supersecret \
   -upw secret \
   -eol unix \
   -nopgbrk \
   /path/to/your/pdf
   - |less

При этом отобразится диапазон страниц от 13 ( f первая страница) до 17 ( l ast страница), сохранится макет защищенного двойным паролем именованного файла PDF (с использованием пользователя и пароли владельца secret и supersecret ), с соглашением Unix EOL, но без вставки разрывов страниц между страницами PDF, пропускаемых через меньше ...

pdftotext -h отображает все доступные параметры командной строки.

Конечно, оба инструмента работают только для текстовых частей PDF-файлов (если они есть). Да, и математическая формула тоже не сработает ...; -)


pdftotext Обновление:

В последних версиях Poppler pdftotext теперь есть опции для извлечения "части (с использованием координат) PDF" страниц, как запрашивал OP. Параметры:

  • -x <int>: x-координата левого верхнего угла области обрезки
  • -y <int>: координата Y левого верхнего угла области обрезки
  • -W <int>: ширина области обрезки в пикселях (по умолчанию 0)
  • -H <int>: высота области обрезки в пикселях (по умолчанию 0)

Наилучшее, если используется с параметром -layout.


Четвертый: команда MuPDF mutool draw также может извлекать текст

Кроссплатформенное приложение с открытым исходным кодом MuPDF (разработанное той же компанией, которая также разрабатывает Ghostscript) включает инструмент командной строки mutool. Чтобы извлечь текст из PDF с помощью этого инструмента, используйте:

mutool draw -F txt the.pdf

выдаст извлеченный текст в <stdout>. Используйте -o filename.txt, чтобы записать его в файл.

Пятое: PDFLib's Text Extrak Toolkit (TET) (лучше всего ... но это PayWare)

TET , набор инструментов для извлечения текста из семейства продуктов pdflib может найти координату xy текстового содержимого в файле PDF (и многое другое ). TET имеет интерфейс командной строки, и это самый мощный из всех известных мне инструментов для извлечения текста. (Он может даже обрабатывать лигатуры ...) Цитата с их сайта:

Геометрия
TET предоставляет точные метрики для текста, такие как положение на странице, ширина глифа и направление текста. Определенные области на странице могут быть исключены или включены в извлечение текста, например, игнорировать верхние и нижние колонтитулы или поля.

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


И есть еще больше вариантов:

  1. podofotxtextract (инструмент CLI) из проекта PoDoFo (с открытым исходным кодом)
  2. calibre (обычно программа с графическим интерфейсом для работы с электронными книгами, с открытым исходным кодом) имеет параметр командной строки, который может извлекать текст из PDF-файлов
  3. AbiWord (текстовый процессор с графическим интерфейсом, с открытым исходным кодом) может импортировать PDF-файлы и сохранять свои файлы в формате .txt: abiword --to=txt --to-name=output.txt input.pdf
1 голос
/ 05 августа 2015

Debenu Quick PDF Library может извлекать текст из определенной области на странице. Функция SetTextExtractionArea позволяет указать координаты x и y, а также указать ширину и высоту области.

  • Слева = Горизонтальная координата левого края области
  • Верх = Вертикальная координата верхнего края области
  • Ширина = Ширина области
  • Высота = Высота области

Тогда сразу после этого можно вызвать функцию GetPageText , чтобы извлечь текст из этой определенной области.

Вот пример использования C # (хотя библиотека многоплатформенная и может использоваться со многими различными языками программирования):

DPL.LoadFromFile(@"Sample.pdf", "");
DPL.SetOrigin(1); // Sets 0,0 coordinate position to top left of page, default is bottom left
DPL.SetTextExtractionArea(35, 35, 229, 30); // Left, Top, Width, Height
string ExtractedContent = DPL.GetPageText(8);
Console.WriteLine(ExtractedContent);

Используя GetPageText, можно также вернуть только текст, расположенный в этой области, или текст, расположенный в этой области, а также информацию о шрифте текста, такую ​​как имя, цвет и размер.

1 голос
/ 03 сентября 2011

Я не уверен, что GhostScript может принимать координаты, но вы можете преобразовать PDF-файл в изображение и отправить его на механизм распознавания текста либо как фрагмент изображения, вырезанный из заданных координат, либо как целое изображение вместе с координатами.Некоторые OCR API принимают параметр прямоугольника, чтобы сузить область для OCR.

Посмотрите на VietOCR для рабочего примера, который использует Tesseract в качестве своего механизма OCR и GhostScript какКонвертер PDF в изображения.

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