Вопрос

У меня есть очень большой файл PDF (200 000 КБ или более), который содержит ряд страниц, содержащих только таблицы. Я хотел бы каким -то образом проанализировать эту информацию с помощью Ruby и импортировать полученные данные в базу данных MySQL.

Кто -нибудь знает какие -либо методы вытягивания этих данных из PDF? Данные отформатированы следующим образом:

Имя | Адрес | Денежные средства сообщали | Год сообщил | Имя владельца

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

Из -за нерегулярного формата я застрял, выясняя это. По крайней мере, может ли кто -нибудь указать мне на библиотеку Ruby PDF для этой задачи?

Обновление: я случайно предоставил неверную информацию! Фактический размер файла составляет 300 МБ, или 300 000 КБ. Я сделал изменение выше, чтобы отразить это.

Это было полезно?

Решение

Я предполагаю, что вы можете скопировать фрагменты текста без проблем, когда ваш PDF открыт в Acrobat Reader или в другом PDF -просмотре?

Прежде чем пытаться проанализировать и извлечь текст из таких файлов монстров программно (даже если это всего лишь 200 мбайтовых - для простого текста в таблицах, это huuuuge, если у вас нет 200000 страниц ...), я бы поступил так:

  1. Попробуйте сначала дезинфицировать файл, переустановив его.
  2. Попробуйте с различными инструментами 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

Если нет, вам нужно будет построить его.

Может быть, библиотека креветок? ссылка текст

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top