Методы парсинга больших файлов PDF - PullRequest
2 голосов
/ 15 сентября 2010

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

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

Имя |Адрес |Cash Reported |Год сообщается |Имя держателя

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

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

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

Ответы [ 5 ]

1 голос
/ 15 сентября 2010

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

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

  1. Попробуйте сначала очистить файл, переустанавливаяit.
  2. Попробуйте с помощью различных инструментов CLI извлечь текст в файл .txt.

Это вопрос минут.Написание Ruby-программы для этого, безусловно, занимает считанные часы, дни или недели (в зависимости от ваших знаний о внутреннем устройстве форматирования файлов PDF ... Я подозреваю, что у вас пока нет такого опыта).

Если "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-файле использует «пользовательский вектор кодировки»), вам следует задать новый вопрос, описывая детали ваших результатов.Тогда вам нужно прибегнуть к большим калибрам, чтобы решить проблему.

1 голос
/ 15 сентября 2010

По крайней мере, кто-нибудь может указать мне библиотеку Ruby PDF для этой задачи?

Если вы этого еще не сделали, вам следует проверить два предыдущих вопроса:« Ruby: чтение PDF-файлов ,» и « ruby ​​pdf parsing gem / library PDF :: Reader , PDF :: Toolkit и Docsplit - некоторые из относительно популярных предлагаемых библиотек.Существует даже предложение использовать JRuby и некоторый синтаксический анализатор Java PDF библиотеки .

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

0 голосов
/ 15 сентября 2010

Проверьте, есть ли какой-либо структурированный контент в PDF. Я написал статью в блоге, объясняющую это на http://www.jpedal.org/PDFblog/?p=410

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

0 голосов
/ 15 сентября 2010

Это будет трудной задачей, поскольку в отрендеренных PDF-файлах нет концепции табличного макета, только строки и текст в заранее определенных местах. Может быть невозможно определить, что такое строки и что такое столбцы, но это может зависеть от самого PDF.

Java-библиотеки являются наиболее надежными, и может делать больше, чем просто извлекать текст. Поэтому я бы посмотрел на JRuby и iText или PDFbox.

0 голосов
/ 15 сентября 2010

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

...