2016-12-26 66 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