it-swarm.com.ru

Как извлечь текст из PDF?

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

Мы бы хотели, чтобы эти данные выводились в формате xml или json. В настоящее время мы смотрим на PdfTextStream , который кажется довольно хорошим, но хотел бы услышать опыт и предложения других людей.

Существуют ли альтернативы (коммерческие или бесплатные) для извлечения текста из pdf программно?

132
Budda007

Мне дали 400-страничный PDF-файл с таблицей данных, которые мне пришлось импортировать - к счастью, никаких изображений. Ghostscript работал на меня:

gswin64c -sDEVICE=txtwrite -o output.txt input.pdf

Выходной файл был разбит на страницы с заголовками и т.д., Но тогда было легко написать приложение для удаления пустых строк и т.д. И впитать все 30 000 записей. -dSIMPLE и -dCOMPLEX не сделали различий в этом случае.

90
user2176753

С сегодняшнего дня я это знаю: лучшая вещь для извлечения текста из PDF-файлов - это TET, текст инструментарий извлечения . TET является частью семейства продуктов PDFlib.com.

PDFlib.com - компания Томаса Мерца. В случае, если вы не узнаете его имя: Томас Мерц является автором "PostScript и PDF Библия".

Первое воплощение TET - это библиотека . Это, вероятно, может сделать все, что хотел Budda006, включая информацию о местоположении каждого элемента на странице. Да, и он также может извлекать изображения. Он объединяет изображения, которые фрагментированы на куски.

pdflib.com также предлагает другое воплощение этой технологии, плагин TET для Acrobat . И третье воплощение - это PDFlib TET iFilter . Это автономный инструмент для рабочих столов пользователей. Оба они бесплатны (как в пиве) для использования в личных некоммерческих целях.

И это действительно мощно. Намного лучше, чем собственное извлечение текста Adobe. Он извлек текст для меня, где другие инструменты (в том числе Adobe) выплескивают только мусор.

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

Эта штука с сегодняшнего дня будет моей рекомендацией для всех сложных и сложных PDF требований извлечения текста.

ТЕТ просто потрясающе. Он обнаруживает таблицы. Внутри таблиц он идентифицирует ячейки, охватывающие несколько столбцов. Он определяет строки таблицы и содержимое каждой ячейки таблицы отдельно. Он очень хорошо справляется с переносами слов: он удаляет дефисы и восстанавливает полные слова. Он поддерживает языки не ASCII (включая CJK, арабский и иврит). При встрече с лигатурами восстанавливаются оригинальные символы ...

Попробуйте.

33
Kurt Pfeifle

Эффективный инструмент командной строки с открытым исходным кодом, бесплатный и доступный как в Linux, так и в Windows: просто с именем pdftotext. Этот инструмент является частью библиотеки xpdf.

http://en.wikipedia.org/wiki/Pdftotext

26
131

Для python есть PDFMiner и pyPDF2 . Для получения дополнительной информации см. модуль Python для преобразования PDF в текст .

20
Jonathan

PdfTextStream (который, как вы сказали, просматривали) теперь свободен для однопоточных приложений. На мой взгляд, его качество намного лучше, чем у других библиотек (особенно для таких вещей, как встроенные шрифты в стиле фанк и т.д.).

Кроме того, вы должны взглянуть на Apache PDFBox , с открытым исходным кодом.

8
Renaud

Вот мое предложение. Если вы хотите извлечь текст из PDF, вы можете импортировать PDF-файл в Google Docs, а затем экспортировать его в более удобный формат, например .html, .odf, .rtf, .txt и т.д. Все это с помощью Drive API , Это бесплатно * и надежно. Взгляни на:

https://developers.google.com/drive/v2/reference/files/inserthttps://developers.google.com/drive/v2/reference/files/get

Поскольку это API отдыха, он совместим со ВСЕМИ языками программирования. Ссылки, которые я опубликовал выше, имеют рабочие примеры для многих языков, включая: Java, .NET, Python, PHP, Ruby и другие.

Я надеюсь, что это помогает.

8
oabarca

Один из комментариев здесь использовал gs на Windows. У меня также был некоторый успех в Linux/OSX со следующим синтаксисом:

gs \
 -q \
 -dNODISPLAY \
 -dSAFER \
 -dDELAYBIND \
 -dWRITESYSTEMDICT \
 -dSIMPLE \
 -f ps2ascii.ps \
 "${input}" \
 -dQUIET \
 -c quit

Я использовал dSIMPLE вместо dCOMPLEX, потому что последний выводит 1 символ в строке.

6
kvz

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

Docotic.Pdf также можно использовать для извлечения изображений из PDF-файлов .

Отказ от ответственности: я работаю на Bit Miracle.

6
Bobrovsky

Поскольку речь идет конкретно об альтернативных инструментах для получения данных из PDF в формате XML , вам может быть интересно взглянуть на коммерческий инструмент "ByteScout PDF Extractor SDK" , который способен сделать именно это: извлечь текст из PDF в виде XML вместе с данными позиционирования (x, y) и информацией о шрифте:

Текст в исходном PDF:

Products | Units | Price 

Результатной XML:

 <row>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="212" y="126" width="47" height="11">Products</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="428" y="126" width="27" height="11">Units</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="503" y="126" width="26" height="11">Price</text> 
  </column>
</row>

П.С .: Кроме того, он также разбивает текст на структуру таблицы.

Раскрытие информации: я работаю на ByteScout

4
Eugene

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

https://Gist.github.com/smalot/6183152

В некоторых случаях командная строка запрещена по соображениям безопасности. Таким образом, нативный класс PHP может удовлетворить многие потребности.

Надеюсь, это поможет

3
Sebastien Malot

Лучшее, что я могу себе представить (в списке "простых" инструментов), это Ghostscript (текущая версия v.8.71) и служебная программа PostScript ps2ascii.ps. Ghostscript отправляет его в свой подкаталог lib. Попробуйте это (в Windows):

gswin32c.exe ^
   -q ^
   -sFONTPATH=c:/windows/fonts ^
   -dNODISPLAY ^
   -dSAFER ^
   -dDELAYBIND ^
   -dWRITESYSTEMDICT ^
   -dCOMPLEX ^
   -f ps2ascii.ps ^
   -dFirstPage=3 ^
   -dLastPage=7 ^
   input.pdf ^
   -dQUIET ^
   -c quit

Эта команда обрабатывает страницы 3-7 из input.pdf. Прочитайте комментарии в самом файле ps2ascii.ps, чтобы увидеть, что означают "странные" цифры и дополнительная информация (, которые они указывают на строки, позиции, ширину, цвета, картинки, прямоугольники, шрифты и разрывы страниц. . ). Чтобы получить "простой" вывод текста, замените часть -dCOMPLEX на -dSIMPLE.

2
Kurt Pfeifle

Для извлечения изображений pdfimages - это бесплатный инструмент командной строки для Linux или Windows (win32):

pdfimages: извлечение и сохранение изображений из переносимого формата документа (PDF) файл

2
Sun

Apache pdfbox имеет эту функцию - текстовая часть описана в:

http://pdfbox.Apache.org/apidocs/org/Apache/pdfbox/util/PDFTextStripper.html

пример реализации см. https://github.com/WolfgangFahl/pdfindexer

testPdfIndexer.testExtracting показывает, как это работает

2
Wolfgang Fahl

QuickPDF кажется разумной библиотекой, которая должна делать то, что вы хотите, за разумную цену.

http://www.quickpdflibrary.com/ - У них есть 30-дневная пробная версия.

1
Andrew Cash

В моих системах Macintosh я обнаружил, что "Adobe Reader" выполняет довольно хорошую работу. Я создал псевдоним на рабочем столе, который указывает на "Adobe Reader.app", и все, что я делаю, - это перетаскиваю pdf-файл на псевдоним, который делает его активным документом в Adobe Reader, а затем из меню "Файл", Я выбираю "Сохранить как текст ...", даю ему имя и место для сохранения, нажимаю "Сохранить", и все готово.

0
Dick Guertin