2016-12-26 2 views
-1

J'ai deux rapports pdf avec le même format de la même source, la seule différence étant la date du rapport - l'un est pour 2016, l'autre pour 2015. Voici comment obtenir le pdf:Python n'a pas réussi à extraire le texte PDF

  1. Aller à https://www.ffiec.gov/nicpubweb/nicweb/InstitutionProfile.aspx?parID_Rssd=1039502&parDT_END=99991231
  2. Sélectionnez 30.06.2016 et cliquez sur Créer un rapport en regard du quatrième rapport du haut (c.-à-Banking Organisation systémique rapport sur les risques (FR Y-15))
  3. cliquez sur votre demande pour un rapport financier est prêt et télécharger le pdf qui ouvre
  4. Répétez les étapes 1 à 3 mais choisissez 2015-12-31 au lieu de l'étape 2

Les deux fichiers PDF sont des dépôts réglementaires pour JP Morgan. Les informations que je veux sont les chiffres en bleu, qui peuvent être identifiés de manière unique par les touches à leur gauche. Par exemple, le premier élément de la page 2 - a. L'exposition actuelle aux contrats dérivés - peut être identifiée de manière unique par M337.

Voici ce que j'ai essayé d'obtenir les chiffres:

  1. J'ai ouvert les deux pdf est dans Notepad ++ et Ctrl-F pour "M337". Pour le pdf de 2016, la chaîne était là et le nombre correspondant n'était pas loin derrière. Pour 2015 pdf, cependant, ni la chaîne ni le nombre n'a pu être trouvée
  2. J'ai ouvert les PDF en python sous forme de fichiers binaires

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

    et cherché M337 à pdf_str. La chaîne a pu être trouvée en 2016.pdf mais pas en 2015.pdf

  3. J'ai essayé d'utiliser la fonction Save As Other d'Adobe Acrobat pour sauvegarder les pdf en tant que txt et j'ai obtenu les mêmes résultats - la chaîne était en 2016.txt mais pas en 2015.txt

Est-ce que quelqu'un sait ce qui se passe?

Répondre

4

j'ai pu trouver la chaîne clé et la valeur associée à l'aide pdftotext sur le fichier texte téléchargé, voir mon processus ci-dessous:

$ 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 

Vous devez vous rappeler que PDF, étant un format de fichier binaire, ne peut pas facilement être recherché pour les chaînes sans utiliser une bibliothèque Python spéciale faite pour l'analyse de fichiers PDF. En fait, handle.read() renvoie un objet bytes lorsque le fichier est ouvert au format binaire et non une chaîne. Je suis surpris que vous ayez pu trouver M337 dans le fichier 2016 en recherchant les octets bruts.

+0

Merci de m'avoir présenté 'pdftotext'. J'ai essayé l'outil mais le txt résultant est "plat" en ce sens qu'il ignore l'espacement relatif du contenu dans le pdf original. Par exemple, les trois segments suivants sont sur la même ligne dans le pdf mais sont sur des lignes séparées dans le txt: 'a. Exposition actuelle aux contrats dérivés "," M337 "," 71624000 ". Une idée de comment je peux les faire apparaître sur la même ligne dans le txt? – Nero

+0

Malheureusement, PDF est un format de fichier horrible pour analyser les données. Il est conçu pour afficher le contenu de manière précise et cohérente sur tous les appareils et, par conséquent, le contenu d'un PDF peut ne pas être organisé en tables utiles au niveau binaire, même s'il ressemble à celui d'un lecteur PDF. Mon meilleur conseil serait d'essayer d'utiliser une bibliothèque Python conçue pour analyser les fichiers PDF et voir si elle a des outils pour vous donner les résultats dont vous avez besoin. – twrightsman

+0

Ajout -layout en option lors de l'exécution pdftotext me donne ce que je voulais. – Nero