Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер
Всем привет, меня зовут Питер~
Во многих случаях нам приходится иметь дело с файлами в формате PDF. Особенно, когда мы сталкиваемся с данными таблицы PDF, которые необходимо извлечь, это действительно головная боль.
Поскольку файлы PDF нельзя копировать напрямую, как Word, даже если они копируются и вставляются, могут возникнуть проблемы с форматированием и набором текста или даже искаженные символы. Как извлечь табличные данные из файла PDF? В этой статье представлены два решения:
- camelot
- tabula
Артефакт 1: Камелот
Одним из первых предоставляемых методов является инструмент для извлечения табличной информации из текстовых PDF-файлов: Camelot, который может напрямую преобразовывать большинство таблиц в фреймы данных Pandas.
Для получения более подробной информации, пожалуйста, обратитесь к адресу проекта:GitHub.com/Камелот-Дев…
установить камелот
Есть несколько способов установить камелот. Если есть ошибка, обычно есть решения в Интернете:
1. Установить через conda
conda install -c conda-forge camelot-py
2. Установить с помощью pip
pip install "camelot-py[base]"
3. Установить через GitHub
Сначала скопируйте проект на локальный:
git clone https://www.github.com/camelot-dev/camelot
Затем введите файл для установки:
cd camelot
pip install ".[base]"
Случаи применения
Ниже приведен пример, объясняющий, как использовать камелот. Предположим, теперь у нас есть PDF-файл test.pdf только с одной страницей:
1. Сначала прочитайте файл
tables = camelot.read_pdf("test.pdf")
tables
Экспорт данных в формате csv (способ 1)
tables.export('test.csv', # 导出文件名
f='csv', # 导出格式
compress=True # 文件压缩
)
Просмотр информации о таблицах:
Метод экспорта 2:
tables[0].to_csv("test1.csv")
Преобразуйте данные в DataFrame:
Артефакт 2: табула
Tabula более мощная, чем camelot, и может одновременно извлекать данные из нескольких таблиц. Конкретный адрес проекта можно найти по адресу:GitHub.com/withdraw/он не…
Установить
Установка tabula очень проста:
pip install tabula-py # 安装python扩展
После установки убедитесь, что библиотека установлена успешно:
Чтение PDF-файлов
Чтение PDF-файлов через библиотеку tabula:
df1 = tabula.read_pdf("test.pdf",pages="all")
Затем мы обнаруживаем, что единственным элементом в списке является фрейм данных:
вывод в csv файл
Вывести прочитанные данные в файл в формате CSV:
# 方式1:间接输出成csv格式
df2.to_csv("test2.csv")
# 方式2:直接输出成csv格式
tabula.convert_into("test.pdf","test3.csv",output_format="csv",pages='all')
Файл PDF, прочитанный выше, относительно прост, всего одна страница, и это очень стандартная форма данных.Давайте рассмотрим более сложный пример:
- В файле PDF всего 3 страницы.
- Существуют различия в формате данных таблицы на каждой странице.
Ниже приведена первая страница, первый столбец можно рассматривать как индекс:
На второй странице есть две таблицы с большим количеством пустых строк между ними:
Критерии сравнения данных на третьей странице:
Эти 3 страницы находятся в одном файле PDF, эти 3 страницы находятся в одном файле PDF, эти 3 страницы находятся в одном файле PDF
прочитать первую таблицу
tab1 = tabula.read_pdf("data.pdf",stream=True)
len(tab1)
В красном приглашении выше мы видим, что, когда параметр pages не указан, по умолчанию считываются только данные первой страницы, поэтому длина списка равна 1.
Преобразуйте исходный индекс в новый столбец после преобразования в фреймворк данных(часть данных)
Читать все данные PDF
Прочитать все данные по страницам:
tab2 = tabula.read_pdf("data.pdf",pages="all") # 获取全部数据all
len(tab2)
Указание страниц = «все»:
- Получены данные 4-х таблиц, а длина списка 4
- После того, как первая таблица преобразована в данные кадра данных, исходный индекс строки не существует,Это отличается от приведенного выше (без параметра pages)
Получить данные указанной страницы
tab3 = tabula.read_pdf("data.pdf",
pages=3, # 表示第3页的数据
stream=True)
tab3[0]
Получить данные из двух таблиц одновременно:
tab4 = tabula.read_pdf("data.pdf",
pages="1,3", # 同时2个表格数据
stream=True)
len(tab4) # 长度为2
Прочитать данные указанного места (области)
Указать по параметру площади:
Удалить ненужную информацию
Удаляем ненужную нам информацию о полях в читаемой таблице
вывод файлов в разных форматах
Полученные данные можно выводить в файлы разных форматов, на примере формата json:
tabula.convert_into("data.pdf", # 源文件
"test4.json", # 输出文件名
output_format="json") # 文件格式
Мы видим, что