#python #pandas #dataframe #pdf
#python #панды #фрейм данных #PDF
Вопрос:
Я использую библиотеку tabula для чтения каждого PDF-файла. В каждом PDF-файле есть таблица с ее заголовками (столбцами) и соответствующей информацией. Все это работало отлично, за исключением последнего pdf. code:
import tabula
read_pdf(path, pages = "2", multiple_tables = False,
output_format = 'dataframe', pandas_options ={header: None})
часть вывода фрейма данных (пример):
nan SBI nan nan nan nan nan nan nan nan nan nan
JKL1LU1UKDAO/ /O/NEPLW45WF3CKL AF HSF1P PUAVKM RO0SA OSOAEAUMM5M31/6 PO LLŠF
KLMIMOG 0TLSL P0EK RV V OKŠGVJAVUAMNAWA ACADFUIF S JN FKFKLLLGLDAA2F LEV KA OTIF 2A4 KACNATULO01F2NVSCFRE BB AG05ANJA OLE4CPIVL1SGA 2AFK MR0HASET2PMG MLIONEKO0KF 0IEOJB1 L E NECGCVL1GXLDA 7019N8BVPV90
Это def. не код, так как я пробовал даже ссылку на веб-таблицу: https://tabula.technology /
где вы можете указать соотношение сторон (так же, как в коде, который я также использовал), и он просто иногда распознает слово или символ.
Похоже, это связано с тем, как таблица PDF была создана в формате pdf. Когда я нажимаю редактировать в pdf, я вижу кучу текстовых полей, иногда с ненужными текстами в виде группы, иногда это отдельные буквы, слова и т.д.
На некоторой части страниц также есть какой-то скрытый слой — информация.
Даже после обрезки определенных частей, удаления метаданных, скрытых и перекрывающихся объектов, а затем повторного экспорта в pdf (в Adobe Reader), когда я пытаюсь загрузить pdf, проблема остается.
Единственный способ, которым я мог бы получить правильный текст из pdf, — это очистить только текст с помощью следующей библиотеки и кода:
import fitz
text = ""
path = "file.pdf"
doc = fitz.open(path)
for page in doc:
text = page.getText()
Это дает мне точно такой же, как в pdf, но это далеко от фрейма данных, а это означает, что потребуется довольно много времени, чтобы предварительно обработать его, очистить данные и проанализировать их в нужном формате, чтобы в конечном итоге получить желаемый фрейм данных, что должно быть возможно сделать непосредственно с помощью tabula.
попробовал еще две библиотеки: PyPDF2 и PDFMiner обе выдают строковые выходные данные, для предварительной обработки которых потребуется долгий путь.
from pdfminer.high_level import extract_text
text = extract_text(path.pdf)
Таким образом, мой вопрос был бы:
- каков был бы наилучший практический подход здесь. Должен ли я попытаться преобразовать pdf в текст с возможностью полного поиска? Если да, то какой способ был бы наиболее подходящим для pythonic?
- попытка обрезки за пределами python кажется подходом новичка, когда я обрезаю и удаляю объекты, чтобы получить соотношение сторон и избавиться от некоторых данных. Должен быть способ доступа ко всей этой информации, чтобы получить фрейм данных
Основная идея состоит в том, чтобы прочитать PDF-файл таким, какой он есть, и воспроизвести его на самом деле, чтобы получить таблицы в dataframe, чтобы иметь возможность манипулировать с ним. Любые предложения приветствуются.
Заранее спасибо!
Ответ №1:
Решение для извлечения таблицы из частично доступных для поиска PDF-файлов заключается в использовании функции распознавания текста в Adobe Reader. После этого tabula может фактически прочитать и извлечь его.