Методы анализа больших файлов PDF
-
02-10-2019 - |
Вопрос
У меня есть очень большой файл PDF (200 000 КБ или более), который содержит ряд страниц, содержащих только таблицы. Я хотел бы каким -то образом проанализировать эту информацию с помощью Ruby и импортировать полученные данные в базу данных MySQL.
Кто -нибудь знает какие -либо методы вытягивания этих данных из PDF? Данные отформатированы следующим образом:
Имя | Адрес | Денежные средства сообщали | Год сообщил | Имя владельца
Иногда поле Имя переполняется в поле адреса, и в этом случае оставшиеся столбцы отображаются на следующей строке.
Из -за нерегулярного формата я застрял, выясняя это. По крайней мере, может ли кто -нибудь указать мне на библиотеку Ruby PDF для этой задачи?
Обновление: я случайно предоставил неверную информацию! Фактический размер файла составляет 300 МБ, или 300 000 КБ. Я сделал изменение выше, чтобы отразить это.
Решение
Я предполагаю, что вы можете скопировать фрагменты текста без проблем, когда ваш PDF открыт в Acrobat Reader или в другом PDF -просмотре?
Прежде чем пытаться проанализировать и извлечь текст из таких файлов монстров программно (даже если это всего лишь 200 мбайтовых - для простого текста в таблицах, это huuuuge, если у вас нет 200000 страниц ...), я бы поступил так:
- Попробуйте сначала дезинфицировать файл, переустановив его.
- Попробуйте с различными инструментами CLI, чтобы извлечь текст в файл .txt.
Это вопрос минут. Написание программы Ruby для этого, безусловно, является вопросом часами, днями или неделями (в зависимости от ваших знаний о внутренних органах PDF FileFormat ... Я подозреваю, что у вас еще мало опыта).
Если "2." Работает, вы, возможно, уже сделаны. Если это работает, вы также знаете, что это программно с помощью Ruby - это работа, которая в принципе может быть решена. Если "2." Не работает, вы знаете, что это может быть очень трудно достичь программно.
Продезинфицировать «monster.pdf»:
Я предлагаю использовать Ghostscript. Анкет Вы также можете использовать Adobe Acrobat Distiller, если у вас есть доступ к нему.
gswin32c.exe ^
-o Monster-PDF-sanitized ^
-sDEVICE=pdfwrite ^
-f Monster.pdf
(Мне любопытно, сколько эта единственная команда сделает ваш выход PDF сжимать по сравнению с входом.)
Извлеките текст из PDF:
Я предлагаю сначала попробовать pdftotext.exe
(от XPDF) Есть и другие, немного более неудобные методы, но это уже может сделать работу:
pdftotext.exe ^
-f 1 ^
-l 10 ^
-layout ^
-eol dos ^
-enc Latin1 ^
-nopgbrk ^
Monster-PDF-sanitized.pdf ^
first-10-pages-from-Monster-PDF-sanitized.txt
Это не будет извлекать все страницы, а только 1-10 (для доказательства концепции, чтобы увидеть, работает ли она вообще). Чтобы извлечь с каждой страницы, просто оставьте -f 1 -l 10
параметр. Вам может потребоваться настроить кодирование, изменив параметр на -enc ASCII7
(или UTF-8
, UCS-2
).
Если это не работает, быстрый путь (потому что, как иногда случается, какой -то шрифт в исходном PDF использует «вектор пользовательского кодирования»), вы должны задать новый вопрос, описывая детали ваших выводов до сих пор. Затем вам нужно прибегнуть к большим калибрам, чтобы сбить проблему.
Другие советы
По крайней мере, может ли кто -нибудь указать мне на библиотеку Ruby PDF для этой задачи?
Если вы этого не сделали, вы должны проверить два предыдущих вопроса: "Ruby: чтение файлов PDF," и "Рубин PDF." PDF :: Reader, PDF :: Toolkit, и Docsplit некоторые из относительно популярных предлагаемых библиотек. Есть даже Предложение использования Jruby и некоторого диапазона библиотеки Java PDF.
Я не уверен, что какое -либо из этих решений действительно подходит для вашей проблемы, особенно то, что вы имеете дело с такими огромными файлами PDF. Поэтому, если кто -то не предлагает более информативный ответ, возможно, вам следует выбрать библиотеку или две и взять их на тест -диск.
Это будет сложной задачей, так как отображаемые PDF не имеют концепции табличного макета, только строк и текста в заранее определенных местах. Возможно, невозможно определить, что такое строки и какие столбцы, но это может зависеть от самого PDF.
Библиотеки Java самые надежные, и мая Сделайте больше, чем просто извлечь текст. Поэтому я бы посмотрел на Jruby и ITEXT или PDFBox.
Проверьте, есть ли какой -либо структурированный контент в PDF. Я написал статью в блоге, объясняющая это на http://www.jpedal.org/pdfblog/?p=410
Если нет, вам нужно будет построить его.
Может быть, библиотека креветок? ссылка текст