Извлечение/идентификация таблиц из PDF Python

Существуют ли библиотеки с открытым исходным кодом, поддерживающие идентификацию и извлечение таблиц?

Под этим я подразумеваю:

  1. Определить, что структура таблицы существует
  2. Классифицировать таблицу по ее содержимому
  3. Извлеките данные из таблицы в удобном формате вывода, например. JSON/CSV и т. д.

Я просмотрел похожие вопросы по этой теме и нашел следующее:

  • PDFMiner, который решает проблему 3, но кажется, что пользователь должен указать PDFMiner, где существует структура таблицы для каждой таблицы. (поправьте меня если я ошибаюсь)
  • pdf-table-extract, который пытается решить проблему 1, но в соответствии с To-Do список, в настоящее время не может идентифицировать таблицы, разделенные пробелами. Это проблема, так как все таблицы в моих PDF-файлах разделены пробелами!

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


person Alexander McFarlane    schedule 16.02.2015    source источник
comment
Если вы также можете использовать инструменты помимо python, вы можете взглянуть на tabula.   -  person mkl    schedule 16.02.2015
comment
Благодарю. Обязательно посмотрю на это. Я очень хочу найти решение в python из-за скорости, с которой можно написать python.   -  person Alexander McFarlane    schedule 17.02.2015


Ответы (3)


Вы обязательно должны взглянуть на этот мой ответ:

а также посмотрите на все ссылки, включенные в него.

Tabula/TabulaPDF в настоящее время является лучшим инструментом извлечения таблиц, доступным для очистки PDF.

person Kurt Pfeifle    schedule 17.02.2015
comment
просто обновленная информация об эффективности этого ответа ... Я взломал решение вместе, используя tabula в прошлом году, чтобы перебрать около 100 PDF-файлов, которые имели несколько общих форматов. Это было не красиво, но это было лучшее из худшего и сэкономило много времени. - person Alexander McFarlane; 23.04.2016
comment
Будет ли pypi.python.org/pypi/pdftable соответствовать требованиям? - person N M; 20.09.2017
comment
он работает только с текстовыми pdf-файлами, а не с изображениями. Есть ли что-нибудь похожее на это, где он может извлекать данные из pdf-изображений? - person Sundeep Pidugu; 30.11.2018
comment
@Sundeep: Конечно он может работать только с текстовыми PDF-файлами. Если вы хотите извлечь таблицы из изображения, вы должны сначала попытаться запустить процесс OCR (оптическое распознавание символов) на изображении, а затем применить извлечение таблицы к тексту. Качество окончательного результата во многом будет зависеть от успешности этапа OCR. Нет ничего, что могло бы извлекать таблицы (или тексты) непосредственно из PDF-файлов, содержащих только изображения. - person Kurt Pfeifle; 30.11.2018
comment
Я ищу инструменты, которые могут это сделать, кстати, спасибо за информацию @KurtPfeifle - person Sundeep Pidugu; 30.11.2018
comment
@Sundeep: Вы можете начать искать, какие инструменты упомянуты здесь: stackoverflow.com/questions/tagged/ocr - person Kurt Pfeifle; 30.11.2018

После многих плодотворных часов изучения библиотек OCR, ограничивающих прямоугольников и алгоритмов кластеризации я нашел решение настолько простое, что вам хочется плакать!

Я надеюсь, что вы используете Linux;

pdftotext -layout NAME_OF_PDF.pdf

УДИВИТЕЛЬНО!!

Теперь у вас есть хороший текстовый файл со всей информацией, выстроенной в красивые столбцы, теперь это тривиально отформатировать в csv и т. д..

Именно в такие времена я люблю Linux, эти ребята придумали ПОТРЯСАЮЩИЕ решения для всего и разместили их там БЕСПЛАТНО!

person Ike    schedule 20.08.2017
comment
Ссылка на документы? Примеры? Если библиотека, которую вы упомянули, является той, которую я подозреваю, она, похоже, не соответствует критериям 1. или 2. - person Alexander McFarlane; 21.08.2017
comment
Спасибо, это работает очень хорошо! :) - person Karl Yngve Lervåg; 14.11.2017
comment
OMG, это работало удивительно хорошо!!! - person vy32; 08.12.2017
comment
Святая корова. Потратив буквально дней на попытки извлечь табличные данные из PDF, сначала используя PyPDF2 и написав регулярные выражения для очистки форматирования мусора, а затем попытавшись вместо этого использовать tabula-py с лишь незначительно лучшими результатами... и эта команда делает это почти безупречно! - person memilanuk; 16.02.2018
comment
Это золото! только что попробовал, и мой, посмотрите на хорошо отформатированный вывод \m/. @memilanuk, как вы преобразовали табличные данные .txt в настоящий CSV? Я могу придумать несколько способов сделать это, но хотел бы знать, пробовали ли вы что-нибудь с успехом. - person avg; 16.02.2018
comment
Я изучаю это прямо сейчас .... но почти в 3 часа ночи у меня быстро кончается бензин ;) - person memilanuk; 16.02.2018
comment
Мне удалось получить pdftotext в Windows 10. Просто загрузите [XPDFTools][1] для Windows. [1]: xpdfreader.com/download.html - person avg; 16.02.2018
comment
@memilanuk, тебе еще не повезло с этим? - person avg; 19.02.2018
comment
@avg только что вернулся к этому сегодня ... в основном я беру текстовый файл, сгенерированный pdftotext, разбиваю его на список строк (по одной на каждую строку), создаю набор имен полей, используя csv.DictWriter(), а затем перебираю каждую строку, нарезая ее на нужные поля, а затем возвращая их обратно в DictWriter. ХТН. gist.github.com/memilanuk/c6e0bb9f98076a172d4f39d044ed6ecf - person memilanuk; 20.02.2018
comment
Спасибо, это то, что я искал :) - person Aleksey Pastuhov; 07.05.2018
comment
Спасибо за это :) - person Akash Kandpal; 22.06.2018
comment
Он работает только для цифровых PDF-файлов, а не для отсканированных PDF-файлов. - person Suba Selvandran; 09.08.2018
comment
Эта библиотека написана для версии Python 2.x и не работает с Python 3.x. - person Laveena; 26.02.2019
comment
pdftotext -table your.pdf обеспечивает еще большую точность - person John; 10.01.2020
comment
@Джон, где ты находишь вариант -table? Я не вижу его нигде на странице руководства? - person memilanuk; 13.02.2020
comment
Или вы имеете в виду приложение pdftotext CLI, которое является частью xpdfreader, а не сценарий bash pdftotext, который входит в состав пакета popplerutils? - person memilanuk; 13.02.2020

Я просто хотел бы добавить к очень полезному ответу Курта Пфайфле - теперь есть оболочка Python для Tabula, и пока это работает очень хорошо: https://github.com/chezou/tabula-py

Это преобразует вашу таблицу PDF во фрейм данных Pandas. Вы также можете установить область в координатах x, y, что, очевидно, очень удобно для нерегулярных данных.

person Ricky McMaster    schedule 22.04.2017