2016-12-26 3 views
-1

У меня есть два отчета в формате PDF с одинаковым форматом из того же источника, единственная разница - дата отчета - одна для 2016 года, другая - для 2015 года. Вот как получить pdf-файлы:Python не смог извлечь PDF-текст

  1. Перейти к https://www.ffiec.gov/nicpubweb/nicweb/InstitutionProfile.aspx?parID_Rssd=1039502&parDT_END=99991231
  2. выберите 2016-06-30 и нажмите кнопку Создать отчет рядом с четвертым докладом из верхней части (т.е. банковской организация доклада системного риска (FR Y-15))
  3. нажмите Ваш запрос готово для получения финансового отчета и загрузки pdf, который открывается
  4. Повторите шаги 1-3, но вместо этого выберите 2015-12-31 на этапе 2

Эти два документа являются нормативными документами для JP Morgan. Информация, которую я хочу, это цифры в синем цвете, которые можно однозначно идентифицировать по клавишам слева. Например, первая позиция на стр. 2 - a. Текущее воздействие контрактов на производные - может быть однозначно идентифицировано M337.

Вот что я пытался получить номера:

  1. Я открыл два PDF-в Notepad ++ и Ctrl-F для "M337". Для 2016 года в формате pdf строка была там, и соответствующее число не отставало. Для 2015 года PDF, однако, ни строка, ни число может быть найдено
  2. я открыл в PDF-питон в виде двоичных файлов

    with open('2016.pdf', 'rb') as handle: pdf_str = handle.read()

    и искали M337 в pdf_str. Строку можно найти в 2016.pdf, но не в 2015.pdf

  3. Я попытался использовать функцию Adobe Acrobat Save As Other для сохранения pdf-файлов в формате txt и получил те же результаты - строка была в 2016.txt, но не в 2015.txt

Кто-нибудь знает, что происходит?

ответ

4

Я был в состоянии найти ключевую строку и связанное с ним значение, используя pdftotext загруженный текстовый файл, см мой процесс ниже:

$ pdftotext FRY15_1039502_20151231.PDF 
$ grep -C 10 'M337' FRY15_1039502_20151231.txt 
b. Regulatory adjustments........................................................................................ 
4. Other off-balance sheet exposures: 
a. Gross notional amount of items subject to a 0% credit conversion factor (CCF) ............... 
b. Gross notional amount of items subject to a 20% CCF................................................ 
c. Gross notional amount of items subject to a 50% CCF................................................ 
d. Gross notional amount of items subject to a 100% CCF .............................................. 
e. Credit exposure equivalent of other off-balance sheet items (sum of 0.1 times item 4.a, 
0.2 times item 4.b, 0.5 times item 4.c, and item 4.d) ................................................... 
5. Total exposures prior to regulatory deductions (sum of items 1.h, 2.e, 3.a, and 4.e) ............. 

M337 
M339 
Y822 
M340 
Y823 
Y824 
Y825 

71624000 
387577000 
3535000 

Вы должны помнить, что PDF, будучи двоичный формат файла, не может легко искать строки без использования специальной библиотеки Python для разбора PDF-файлов. Фактически, handle.read() возвращает объект bytes, когда файл открывается в двоичном формате, а не в строке. Я удивлен, что вы смогли найти M337 в файле 2016, выполнив поиск необработанных байтов.

+0

Спасибо, что ознакомили меня с 'pdftotext'. Я попробовал инструмент, но полученный txt был «плоским», поскольку он игнорирует относительный интервал содержимого в исходном pdf. Например, следующие три сегмента находятся в одной строке в pdf, но находятся в отдельных строках в txt: 'a. Текущее воздействие контрактов на производные, 'M337',' 71624000'. Любая идея, как я могу заставить их отображаться в одной строке в txt? – Nero

+0

К сожалению, PDF - это ужасный формат файла для анализа данных. Он предназначен для отображения контента точно и последовательно на всех устройствах, и поэтому содержимое PDF не может быть организовано в полезные таблицы на двоичном уровне, даже если это похоже на чтение в PDF-ридере. Мой лучший совет - попытаться использовать библиотеку Python, предназначенную для анализа PDF-файлов, и посмотреть, есть ли у нее инструменты, чтобы дать вам нужные результаты. – twrightsman

+0

Добавление -layout как опция при запуске pdftotext дает мне то, что я хотел. – Nero

Смежные вопросы