Оцифровка наборов данных из PDF-файлов

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

Что ж, дорогой читатель, сегодня твой счастливый день. Для одного из своих проектов я оцифровал наборы правительственных данных, опубликованные в виде файлов PDF, и я хочу рассказать, как это сделать. И мы собираемся сделать это на нашем любимом языке: Python.

Ниже вы найдете инструкции по настройке среды и учебное пособие о том, как использовать Python для извлечения таблиц из файлов PDF, а также! Пример из реальной жизни.

Настраивать

В этом руководстве я буду использовать Python 3.7. Вы можете использовать любую версию, которая вам нравится, однако я не гарантирую, что что-то будет работать, если вы используете любую версию, кроме 3.7.

Для работы с руководством вам потребуются следующие библиотеки Python:

  • Табула (библиотека OCR, написанная на Java для преобразования PDF в DataFrame).
  • Pandas (библиотека для работы с данными на Python).
  • Java 8+ (в большинстве операционных систем это должно быть по умолчанию).

Вышеупомянутые библиотеки могут быть установлены в вашем терминале (в macOS) следующим образом:

pip install tabula-py
pip install pandas

Java 8 можно загрузить и установить с этого сайта.

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

Запустите свой любимый редактор и следуйте за ним!

Примечание. Все строки, начинающиеся с #, являются комментариями.

Шаг 1. Импортируйте все библиотеки

import tabula
#the pd is the standard shorthand for pandas
import pandas as pd

Шаг 2. Преобразование таблицы PDF в фрейм данных

#declare the path of your file
file_path = "/path/to/pdf_file/data.pdf"
#Convert your file
df = tabula.read_pdf(file_path)

Это так просто! Ну хотя бы теоретически. Но давайте попробуем проделать все вышеизложенное на нескольких реальных примерах, чтобы вы могли увидеть Tabula в действии.

Пример: телекоммуникации в Пакистане.

Так как я канадец пакистанского происхождения, мне нравится смотреть статистику о моей родной стране, так что давайте начнем с этого.

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

#file is in the same folder as your program
file_path = "./Telecommination_Sept_2019.pdf""
#Convert your file
df = tabula.read_pdf(file_path)

Выход:

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

Но есть проблема. Этот конкретный файл содержит шесть разных страниц данных. Что, если мы хотим прочитать все страницы? Что ж, все, что вам нужно сделать, это передать флаг pages=’all’ в Tabula, как показано ниже:

#file is in the same folder as your program
file_path = "./Telecommination_Sept_2019.pdf""
#Convert your file
df = tabula.read_pdf(file_path, pages='all')

Выход:

Довольно просто, правда? На самом деле существует довольно много разных команд, которые вы можете передать в Tabula, чтобы ускорить его, или даже предоставить конкретные координаты X-Y для извлечения.

Это потрясающая библиотека! Напишите мне, если хотите глубже погрузиться в саму Табулу.