Как извлечь таблицу в виде текста из PDF с помощью Python?

У меня есть PDF, который содержит таблицы, текст и некоторые изображения. Я хочу извлечь таблицу везде, где есть таблицы в PDF.

Прямо сейчас я делаю вручную, чтобы найти таблицу со страницы. Оттуда я беру эту страницу и сохраняю ее в другом PDF файле.

import PyPDF2

PDFfilename = "Sammamish.pdf" #filename of your PDF/directory where your PDF is stored

pfr = PyPDF2.PdfFileReader(open(PDFfilename, "rb")) #PdfFileReader object

pg4 = pfr.getPage(126) #extract pg 127

writer = PyPDF2.PdfFileWriter() #create PdfFileWriter object
#add pages
writer.addPage(pg4)

NewPDFfilename = "allTables.pdf" #filename of your PDF/directory where you want your new PDF to be
with open(NewPDFfilename, "wb") as outputStream:
    writer.write(outputStream) #write pages to new PDF

Моя цель - извлечь таблицу из всего документа PDF.

Please have a look at the sample image of a page in PDF

Ответ 1

на мой взгляд, у вас есть 4 возможности:

  • Вы можете работать с PDF напрямую, используя tabula

  • .Вы можете преобразовать PDF в текст, используя pdftotext, а затем проанализировать текст с помощью Python

  • Вы можете использовать внешний инструмент, чтобы преобразовать файл PDF в Excel или CSV, а затем использовать необходимый модуль Python, чтобы открыть файл Excel/CSV.

  • Вы также можете преобразовать pdf в файл изображения, а затем использовать любое недавнее программное обеспечение для оптического распознавания текста (которое автоматически восстанавливает таблицу из изображения) для получения данных или

  • если вход представляет собой изображение или отсканированный PDF, попробуйте ExtractTable или CamelotPro, если вы уже использовали camelot-py

Ваш вопрос похож на:

С уважением

Ответ 2

Я бы предложил вам извлечь таблицу, используя Tabula. Передайте ваш pdf в качестве аргумента в api tabula, и он вернет вам таблицу в виде фрейма данных. Каждая таблица в вашем pdf файле возвращается как один кадр данных. Это мой код для извлечения PDF.

#the table will be returned in a list of dataframe,for working with dataframe you need pandas
import pandas as pd
import tabula
file = "filename.pdf"
path = 'enter your directory path here'  + file
df = tabula.read_pdf(path, pages = '1', multiple_tables = True)
print(df)

Пожалуйста, обратитесь к моему репо для более подробной информации.

Ответ 3

Обновление вопроса 2019 года, так как меня всегда направляют сюда каждый раз, когда я ищу "таблицу pdf extract python"

Есть решение на python под названием camelot/excalibur

https://github.com/atlanhq/camelot

Ответ 4

Также как ключевое слово для ваших дальнейших исследований: существует также возможность использования зонального OCR. Я использовал это с большим успехом в проекте. Но этот метод не подходит для высокой громкости/высокой скорости, и для этого требуется определить шаблон извлечения для каждого поля:

enter image description here

С положительной стороны, поскольку он работает визуально, он работает с любой таблицей (текстом, изображением, сканированием).

Ответ 5

Поскольку AI и API доминируют над технологиями в большинстве потребностей разработчиков, здесь, в 2019 году, вы можете попробовать https://extracttable.com, API для определения табличной структуры в изображении или PDF файлах через API и перестать беспокоиться об указании столбцов. или создание правил или табличных областей

Вы должны попробовать их ExtractTable-py - для вывода требуется всего 3 строки кода

Компания также поддерживает CamelotPro, обертку для известной библиотеки с открытым исходным кодом, camelot-py, которая извлекает таблицы не только из текстовых PDF файлов, но и из изображений.

Ответ 6

Вы можете попытаться преобразовать файл pdf в файл excel, а затем вы можете использовать библиотеку openpyxl для извлечения данных из файла excel, добавления этого файла в массив и последующего преобразования массива в json.