2016-12-26 13 views
-1

私は同じソースから同じフォーマットの2つのpdfレポートを持っていますが、唯一の違いはレポートの日付です.2016年、2015年です。PythonがPDFテキストの抽出に失敗しました

https://www.ffiec.gov/nicpubweb/nicweb/InstitutionProfile.aspx?parID_Rssd=1039502&parDT_END=99991231
  • を選択2016年6月30日に
    1. 移動し、トップから4番目の報告(すなわち、銀行組織システミック・リスクレポート(FR Y-15))の隣にレポートを作成]をクリックします
    2. あなたの要求をクリックします財務報告書は準備ができており、開くPDFをダウンロードする
    3. 繰り返し、手順1〜3を代わりに

    2つのpdfのは、JPモルガンのために規制当局への申請されているステップ2で2015年12月31日を選択してください。私が望む情報は青色の数字で、左のキーで一意に識別できます。たとえば、2ページ目の最初の項目 - a。デリバティブ契約の現在のエクスポージャーは、M337によって一意に識別することができます。ここで

    は、私は番号を取得しようとしたものです:

    1. 私が「M337」のために、メモ帳++とCtrl-Fに2つのPDFファイルを開いたの。 2016年のpdfの場合、文字列はそこにあり、対応する数値はそれほど遅れていませんでした。 2015 PDFファイルの場合は、しかし、文字列でも数でもないが
    2. を見つけることができる私は、バイナリファイルとしてpythonで

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

      をPDF年代を開き、pdf_strにM337を探索しました。この文字列は2016.pdfにありますが、2015.pdfにはありません

    3. Adob​​e AcrobatのSave As Other機能を使用して、pdfをtxtとして保存しようとしましたが、同じ結果が得られました。 2015.txtで

    誰が何が起こっているのか分かりませんか?

  • 答えて

    4

    私は下の私のプロセスを参照して、ダウンロードしたテキストファイルにpdftotextを使用して、キーの文字列と関連付けられた値を見つけることができた:あなたは簡単に、バイナリファイル形式であること、そのPDFをすることはできません覚えておく必要があります

    $ 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ライブラリを使わずに文字列を検索することができます。実際には、handle.read()は、ファイルが文字列ではなくバイナリ形式で開かれたときにbytesオブジェクトを返します。私はあなたが生のバイトを検索することによって2016年のファイルでM337を見つけることができたことに驚いています。

    +0

    私を 'pdftotext'に紹介してくれてありがとう。私はツールを試しましたが、元のpdfの内容の相対的な間隔を無視するという点で、結果のtxtは "フラット"です。たとえば、次の3つのセグメントはpdfの同じ行にありますが、txtの別々の行にあります。デリバティブ契約「M337」、「71624000」の現在のエクスポージャー。どのように私はそれらをtxtの同じ行に表示させることができますか? – Nero

    +0

    残念ながら、PDFはデータを解析するための恐ろしいファイル形式です。これは、デバイス間でコンテンツを正確かつ一貫して表示するように設計されているため、PDFリーダーのように見える場合でも、PDFの内容はバイナリレベルで有用なテーブルに整理されない可能性があります。私の最善のアドバイスは、PDFを解析し、必要な結果を得るためのツールがあるかどうかを確認するために設計されたPythonライブラリを試してみることです。 – twrightsman

    +0

    pdftotextを実行しているときにオプションとして-layoutを追加すると、私が望むものが得られます。 – Nero

    関連する問題