Как извлечь таблицы с данными из PDF-файлов?

Выполнить эту процедуру можно в Python с помощью библиотеки Camelot.

Camelot дает возможность настроить извлечение таблиц в том случае, если невозможно получить желаемый результат с настройками библиотеки по умолчанию. Каждая извлекаемая таблица представляет собой pandas DataFrame, который легко интегрируется в ETL и рабочие процессы анализа данных. Использование Camelot позволяет экспортировать извлекаемую таблицу в форматы csv, JSON, Excel и HTML.

Хотим поделиться, как нам удалось осуществить.

Имеется pdf-файл (Table.pdf) следующего содержания:

Таблица экономии топлива на маршруте следования спецтранспорта при различных показателях движения

Результаты подтверждены проверкой.

Извлекаем из этого файла таблицу и сохраняем ее в csv формате.

  • Сначала нужно провести некоторые подготовительные действия, а именно: для работы библиотеки Camelot следует установить необходимые зависимости (tkinter и ghostscript) .
  • Очень важно, друзья, проверить правильность установки этих зависимостей:

Для tkinter следует запустить Python и выполнить:

import tkinter

В случае некорректной установки tkinter будет выведено сообщение об ошибке.

Для ghostscript, установленной в среде Windows, выполнить действие, набрав в командной строке:

C:\> gswin64c.exe -version

Или:

C:\> gswin32c.exe -version

для 32-битной версии ОС.

В случае правильной установки будет выведена информация о версии ghostscript и об авторских правах.

  • Далее устанавливаем библиотеку с помощью командной строки ОС:
pip install camelot-py[cv]
  • Теперь после установки всех требований, можно извлекать таблицы. Открываю новый файл Python и выполняю следующее:
import camelot # PDF-файл с извлекаемой таблицей file = 'Table.pdf'

Функция read_pdf () извлекает все таблицы в PDF-файле.

# извлечение всех таблиц в PDF-файле tables = camelot.read_pdf(file)

По умолчанию Camelot использует только первую страницу PDF-файла для извлечения таблиц.

Чтобы указать несколько страниц, можно использовать ключевое слово pages с аргументом:

tables = camelot.read_pdf(file, pages='1,2,3')

Проверяем количество извлеченных таблиц:

print('Количество извлеченных таблиц:', tables.n)

Вывод результата:

Количество извлеченных таблиц: 1

Для экспортирования всех возможных таблиц, которые могут быть в загруженном pdf-файле в csv-файлы необходимо выполнить:

# экспорт всех таблиц в zip-архив tables.export('export.csv', f='csv', compress=True)

Для параметра compress задано значение True, это создаст zip-архив, содержащий все таблицы в формате csv.

Стоит уточнить, что Camelot работает именно с текстовыми PDF-файлами, а не с отсканированными документами.

0
2 комментария
Кинес Кизиитов

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

Ответить
Развернуть ветку
Yaroslav Palamarchuk

Есть. OCR и нейросетевое распознавание текста называется.

Ответить
Развернуть ветку
-1 комментариев
Раскрывать всегда