Оцифровка наборов данных из 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 для извлечения.
Это потрясающая библиотека! Напишите мне, если хотите глубже погрузиться в саму Табулу.