PDF извлечение таблицы

У меня есть (те же) данные, сохраненные как файл изображения GIF и файл PDF, и я хочу проанализировать их в HTML или XML. Данные на самом деле меню для моей столовой университета. Это означает, что существует новая версия файла, которая должна анализироваться каждую неделю! В общем, файлы содержат некоторые заголовки и текст нижнего колонтитула, а также таблицу, заполненную другими данными между ними. Я прочитал несколько сообщений о стека и потоке, и я также начал несколько попыток разобрать данные таблицы в HTML / XML:

PDF

PDFBox || iText (Java) Google Docs Import PDF2HTML || PDF2Table

GIF

Tesseract-OCR

Я получил лучший результат при разборе PDF-файла с PDFBox, но все же (поскольку меню меняется еженедельно), он недостаточно надежен. HTML-код, который я получаю, включает иногда больше, иногда меньше "параграфов" (<p>), так что я не могу проанализировать данные достаточно точно.

Вот почему я хотел бы знать, есть ли другой способ сделать это?

 Vilius24 апр. 2012 г., 21:53
Я тоже думал об этом, но с этим были две проблемы: 1. университеты любят скрывать свою информацию и делать ее доступной только, если они этого хотят, и 2. я также думал о поиске подхода, который был бы применим к большему количеству кафетериев, чем только то, что я имел в виду;) Я просто продолжу свой «метод проб и ошибок»; метод!
 Marc B24 апр. 2012 г., 17:12
PDF-> текст редко бывает простым. PDF - это язык макета документа, а не язык разметки. В зависимости от настроения генератора PDF в этот день, он может генерировать совершенно разные документы каждый раз.
 Vilius24 апр. 2012 г., 17:36
Понимаю. Единственное, что меня беспокоит, это то, что некоторые парсеры pdf to xls работают довольно хорошо. Так почему же нет проектов с открытым исходным кодом, которые также способны надежно анализировать PDF-таблицы?
 ChrLipp03 мая 2012 г., 10:49
Опубликовать ссылку на образец PDF.
 halfer24 апр. 2012 г., 21:17
Если вы можете связаться с людьми, которые пишут это меню, посмотрите, в каком формате оно создается. Они могут создать его в формате, из которого намного проще извлечь текст.

Ответы на вопрос(7)

Таблицы находятся в одном и том же месте каждый раз? Если вы можете найти размеры каждого блока, вы можете использовать инструмент для разделения PDF на несколько документов, каждый из которых содержит один блок, после чего вы можете использовать любой инструмент, который вы хотите конвертировать каждый меньший PDF в HTML (например, инструменты, упомянутые в других ответах). Случайные поиски Google остановилисьPyPdf, который выглядел так, как будто может иметь некоторые полезные функции.

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

 03 мая 2012 г., 19:26
@ Vilius, почему «преобразование не полностью» соответствует [вашим] требованиям ??
 Vilius05 мая 2012 г., 11:03
Поскольку есть разные виды меню, мне, вероятно, нужно было бы жестко закодировать много вещей, но я хочу сделать их более общими. Таким образом, Преобразование Хафа было бы достаточно, но недостаточно эффективно.
 Vilius03 мая 2012 г., 17:18
Жестко закодированный подход не применим к моей ситуации. Поскольку каждую неделю появляются новые меню с разным количеством приемов пищи, структура таблицы варьируется по размеру ячеек таблицы ... Прочитав гораздо больше материала о SO и материалах из Google, я действительно нашел способ обнаружить & quot; данные & Quot; в изображениях: преобразование Хафа. Это все еще не полностью соответствует моим требованиям

Вы можете использовать Camelot для извлечения таблиц из вашего PDF и экспорта в файл HTML. CSV, Excel и JSON также поддерживаются. Вы можете ознакомиться с документацией по адресу:http://camelot-py.readthedocs.io, Это дает более точные результаты по сравнению с другими инструментами и библиотеками для извлечения таблиц с открытым исходным кодом. Вот этосравнение.

Вы можете использовать следующий фрагмент кода для продолжения своей задачи:

>>> import camelot
>>> tables = camelot.read_pdf('file.pdf')
>>> type(tables[0].df)
<class 'pandas.core.frame.DataFrame'>
>>> tables[0].to_html('file.html')

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

Я реализовал свой собственный алгоритм (его имяtraprange ) для анализа табличных данных в PDF-файлах.

Ниже приведены некоторые примеры файлов PDF и результаты:

Input file: sample-1.pdf, result: sample-1.html Input file: sample-4.pdf, result: sample-4.html

Посетите страницу моего проекта наtraprange

или моя статья вtraprange

 09 авг. 2016 г., 09:26
отличная работа над этим проектом! Возможно, вы захотите добавить поддержку анализа линий границ для разделения строк и столбцов, а не только по расстоянию.

Tabula является неплохим началом веб-интерфейса JRuby для извлечения таблиц CSV / TSV из произвольных PDF-файлов.

 08 апр. 2014 г., 21:18
О, есть. Движок, который приводит Tabula в действие, является tabula-extractor, и вы можете получить его здесь:github.com/jazzido/tabula-extractor - он написан с помощью jruby, который вам понадобится, но инструкции просты.
 07 апр. 2014 г., 23:07
Согласен, точность, которую я до сих пор видел, является выдающейся (упоминается, что заголовки таблиц все еще могут быть проблематичными, но у меня до сих пор не было проблем с ними). Я просто хотел, чтобы был API ...
 06 мая 2016 г., 20:43
Обновленный список инструментов:okfnlabs.org/blog/2016/04/19/…

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

Я также пытался использовать Google и многие другие онлайн (около 900 веб-сайтов) и оффлайн (около 1000 программных продуктов) продукты разных компаний. Если вы хотите извлечь текст из любого метода, такого как OCR или Text из PDF, то наиболее точная программа, которую я нашел, этоPDFTOHTML, Коэффициент точностиPDFTOHTML составляет около 98%, а Google Online - около 94%. Это очень хорошее программное обеспечение, которое также предоставляет вам правильный формат текста, то есть полужирный, курсив и т. Д. Текста.

 Vilius02 мая 2012 г., 00:34
Вы правы благодаря возможности распознавания текста. PDF2HTML дает довольно хороший результат, но он все еще не может обрабатывать таблицы в документе PDF - он просто не может распознать их существование. Я, однако, искал "инструмент" он также может обнаруживать таблицы и преобразовывать их (вместе с информацией в них) в данные, такие как HTML или XML.
 02 мая 2012 г., 05:48
Никто, никто в мире не может извлечь ocr / изображение в HTML-таблицы или любую другую вещь. Таблицы не используются для отображения текста, и, если таблицы имеют границы, это может быть возможно, но довольно сложно. Нужно иметь дело с двумя вещами OCR и PDF. Нет ничего невозможного, но очень сложного. Нужно сначала извлечь текст каждой позиции текста из ocr, а затем пометить их как в PDF. Попробуйте сделать с PS (ghost-script) также, как их используют многие техники печати. Измените GIF-изображение на PS. Сначала PDF-файл может дать правильный ответ.

Если вы хотите извлекать данные из таблиц один раз в неделю и работаете в Windows, проверьте эту бесплатную утилиту pdf, которая включает автоматическое обнаружение таблиц и преобразование таблиц в CSV, XML:Утилита PDF Viewer.

Утилита бесплатна как для коммерческого, так и для некоммерческого использования для не-разработчиков (и есть отдельная версия для разработчиков, которые хотят автоматизировать через API).

Disclaimer: I work for ByteScout

 09 авг. 2016 г., 22:59
конечно, вы можете написать мне на jackj33 на почтовом сервере Google
 09 авг. 2016 г., 09:22
@ Джек, есть ли способ связаться с вами?
 08 авг. 2016 г., 00:34
Я только что протестировал возможность конвертировать в HTML, это лучшее программное обеспечение из всех, что я когда-либо обнаруживал. Вы работали над этим программным обеспечением? Я хочу использовать этот экстракт в программном обеспечении, так что да, я имею в виду SDK.
 07 авг. 2016 г., 20:36
Утилита @jack pdf (PDF Multitool) абсолютно бесплатна, вы имели в виду PDF Extractor SDK?
 07 авг. 2016 г., 19:22
Программное обеспечение потрясающее, но принц, не так много для человека, где один доллар 1 почти 4. :(

Я недавно столкнулся с подобной проблемой.

Альтернативное решение, которое я нашел, состояло в том, чтобы открыть документ PDF в Adobe и экспортировать его в XML. По крайней мере, в моих файлах PDF он сохранил информацию таблицы, а затем я смог программно работать с XML для создания табличных файлов, таких как Excel и т. Д.

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

Ваш ответ на вопрос