2016-12-26 47 views
-1

我有两个来自相同来源的格式相同的pdf报告,唯一的区别是报告日期 - 一个是2016年,另一个是2015年。下面是如何获得pdf的:Python未能提取PDF文本

  1. 转到https://www.ffiec.gov/nicpubweb/nicweb/InstitutionProfile.aspx?parID_Rssd=1039502&parDT_END=99991231
  2. 选择二零一六年六月三十日,然后点击创建报告旁边,从上面的第四次报告(即银行机构系统性风险报告(FR Y型15))
  3. 点击您的要求为财务报告准备好并下载打开的pdf
  4. 重复步骤1-3,但在步骤2中选择2015-12-31

这两个pdf文件是JP Morgan的监管文件。我想要的信息是蓝色的数字,可以通过左边的键唯一标识。例如,第2页的第一个订单项 - a。衍生工具合约的当前风险 - 可以由M337唯一标识。

这里就是我试图让数字:

  1. 我开启了PDF文件在记事本++和Ctrl-F为“M337”。对于2016年的pdf,字符串在那里,相应的数字并不遥远。 2015年PDF,然而,无论是字符串,也非数可以发现
  2. 我打开PDF格式在Python作为二进制文件

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

    和pdf_str搜索M337。该字符串可以在2016.pdf中找到,但不能在2015.pdf

  3. 我试过使用Adobe Acrobat的另存为其他功能来保存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,是一个二进制文件格式,不易在不使用用于解析PDF的特殊Python库的情况下搜索字符串。实际上,当文件以二进制格式打开时,handle.read()返回一个bytes对象,而不是字符串。我很惊讶你能够通过搜索原始字节在2016文件中找到M337。

+0

感谢您向我介绍'pdftotext'。我尝试了这个工具,但是结果的txt是“平坦的”,因为它忽略了原始pdf中内容的相对间距。例如,以下三段在pdf中位于同一行上,但在txt中分开行:'a。目前风险敞口合约''M337','71624000'。任何想法如何让他们出现在txt的同一行? – Nero

+0

不幸的是,PDF是一种可怕的文件格式来解析数据。它旨在跨设备精确且一致地显示内容,因此,即使PDF看起来像PDF阅读器中的内容,二进制级别的PDF内容也可能不会被组织到有用的表格中。我最好的建议是尝试使用旨在解析PDF的Python库,并查看它是否有工具来为您提供所需的结果。 – twrightsman

+0

在运行pdftotext时添加-layout作为选项给我我想要的。 – Nero