Частично доступный для поиска PDF-документ

#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)
 

Таким образом, мой вопрос был бы:

  1. каков был бы наилучший практический подход здесь. Должен ли я попытаться преобразовать pdf в текст с возможностью полного поиска? Если да, то какой способ был бы наиболее подходящим для pythonic?
  2. попытка обрезки за пределами python кажется подходом новичка, когда я обрезаю и удаляю объекты, чтобы получить соотношение сторон и избавиться от некоторых данных. Должен быть способ доступа ко всей этой информации, чтобы получить фрейм данных

Основная идея состоит в том, чтобы прочитать PDF-файл таким, какой он есть, и воспроизвести его на самом деле, чтобы получить таблицы в dataframe, чтобы иметь возможность манипулировать с ним. Любые предложения приветствуются.

Заранее спасибо!

Ответ №1:

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