Aller au contenu principal

Optimiser l’extraction d’informations dans des PDF

Comment exploiter mes documents PDF?

Qu’il s’agisse de rapports d’activité d’entreprises, de communiqués de presse, de documentation ou de réglementations diverses, le PDF est depuis très longtemps l’un des formats les plus utilisés pour diffuser de l’information sur Internet. Par ailleurs, la multiplication des informations disponibles en ligne, combinée aux récents progrès de l’intelligence artificielle en traitement du langage naturel offre aujourd’hui une multitude d’opportunités et de nouvelles applications : scraping, automatisation de tâches de lecture, entraînement de modèles de NLP, etc. 

Ainsi, les documents PDF représentent une source phénoménale et quasiment incontournable de données. Cependant, ils  peuvent se révéler complexes à exploiter du fait de leur structure particulière, 

Dans cet article, nous passerons en revue les bons réflexes à avoir face à ce type de document, et comment les exploiter au maximum. 

I. Le format PDF: d’où viennent les complications ?

a. Pourquoi l’utilise-t-on autant ?

 

Le Portable Document Format (PDF) est un langage de description de page présenté par la société Adobe Systems en 1992 et qui est devenu une norme ISO en 2008. 

Ce format est né du projet Camelot, dont le but était de créer « un moyen universel de transmission de documents à travers une grande variété de configurations de machines, de systèmes d'exploitation et de réseaux de communication.» L'objectif était de rendre ces documents visibles sur n'importe quel écran et imprimables sur n'importe quelle imprimante moderne.

Cette prouesse technologique a été réalisée grâce à l'invention du langage de description de page PostScript, permettant d’encapsuler dans un fichier unique tous les éléments d’une page grâce à des représentations vectorielles des éléments qui la composent (texte, polices, graphiques, images encapsulées, etc.).

Ainsi, le format PDF est devenu le « standard international », et est utilisé dans un ensemble large et varié de logiciels, allant de l'exportation dans les suites bureautiques grand public aux manipulations par des programmes spécialisés de l'industrie artistique, en passant par la génération de factures électroniques ou documents officiels via Internet.

b. Les difficultés engendrées 

 

Cette harmonisation et cette unité de présentation a toutefois son revers. En effet, l’encapsulation en langage Postscript empêche de parser (anglicisme désignant le fait de parcourir le contenu d'un texte ou d'un fichier en l'analysant pour vérifier sa syntaxe ou en extraire des éléments) ces documents comme on parserait un simple fichier texte. Si l’on ne souhaite pas utiliser de service payant, récupérer un simple morceau de texte sur un document PDF peut s’avérer assez fastidieux, car l’opération nécessite un minimum de connaissance en développement, et fait appel à des librairies souvent difficiles à installer, lentes, ou limitées dans le type de données potentiellement extraites. 

D’autre part, les informations pertinentes d’un document sont très souvent contenues dans des tableaux. Mais contrairement à un langage comme Excel, le PDF n’a pas de structure de données en table que l’on pourrait aisément extraire. Au contraire, le langage PostScript définit simplement des instructions plaçant chaque caractère avec des coordonnées x et y  sur un plan. Ainsi, les espaces sont simulés simplement en éloignant les caractères les uns des autres. De la même manière, les tableaux sont simulés en plaçant des caractères (constituant les mots) dans des grilles bidimensionnelles. Un visualiseur PDF prend simplement ces instructions et dessine tout pour que l'utilisateur puisse le visualiser. 

Cette méthode d’encapsulation des tableaux rend leur extraction extrêmement difficile, et même si de gros progrès ont été réalisés ces dernières années, il n’existe à ce jour aucune librairie permettant de restituer 100% des tableaux d’un PDF dans un format exploitable. 

II. Extraire l’information: quelle stratégie utiliser ?

Il existe deux grandes catégories de documents PDF: les fichiers créés numériquement, ou PDF “normaux”, et les PDF “Image seulement”, ou PDF scannés. Chaque type de PDF impose une méthode d’extraction. 

Pour déterminer à quel type de document on a affaire, rien de plus simple ! Il suffit d’ouvrir le document, et de tenter de sélectionner un bout de texte. Si vous y parvenez, vous pouvez déjà vous réjouir, car votre document appartient à la première catégorie, la plus facile à extraire. Dans le cas contraire, la récupération du contenu du document passera par des techniques d’Optical Character Recognition (OCR), plus difficiles à implémenter et moins fiables.

 

1. Le PDF “normal”

 

  • Parser le document et récupérer du texte  

    A l’heure actuelle, il existe de nombreuses librairies open source de parsing de documents PDF, quel que soit le langage de programmation utilisé (pdftools pour R, PDFBox pour Java, etc.). Cependant, la grande majorité d’entre elles sont codées en Python. Ci-dessous une liste non-exhaustive des principales librairies python de parsing de PDF, et leur principales caractéristiques :

    • PDFMiner, brique de base de beaucoup de wrappers comme Slate ou PDFQuery, et qui est spécialisée dans la récupération et l’analyse de texte. Elle permet en effet d'obtenir l'emplacement exact du texte dans une page, ainsi que d'autres informations telles que les polices ou les lignes. Elle comprend un convertisseur qui peut transformer des fichiers PDF en d'autres formats de texte (tels que HTML), et dispose également d'un analyseur PDF extensible qui peut être utilisé à d'autres fins que l'analyse de texte. Elle n’est compatible qu’avec Python 2, mais dispose de wrappers pour Python 3 comme PDFMiner.six.
    • PyPDF2, capable de diviser, fusionner, recadrer et transformer les pages de fichiers PDF. Elle permet également d’accéder à certains paramètres comme les options d'affichage ou les métadonnées du document, et de gérer les éventuels mots de passe. 
    • pdfrw, permettant d’exécuter très rapidement les opérations susmentionnées , et pouvant également être couplé à d’autres librairies pour réaliser des opérations supplémentaires (rst2pdf pour reproduire fidèlement des images vectorielles d’un document, ou encore reportlab pour réutiliser des PDF existants dans de nouveaux).

Une fois le document parsé grâce à ces librairies, il est accessible comme un simple fichier texte, et exploitable grâce à des scripts classiques de recherche d’information, utilisant par exemple des expressions régulières

 

  • Le cas particulier des tableaux

Comme nous l’avons vu en introduction, un très grand nombre d’informations pertinentes sont généralement contenues dans des tableaux, et le format PDF complique grandement leur extraction. 

Là encore, il existe depuis plusieurs années des outils Python open-source (Tabula, pdf-table-extract) ou privés (smallpdf, PDFTables) pour effectuer ce genre de tâches. Cependant, dans la majorité des cas, le résultat est soit très satisfaisant (et exploitable dans un dataframe Pandas par exemple), soit la librairie échoue complètement. Il n'y a pas de résultat intermédiaire. 

Lorsqu’il s’agit d’une extraction ponctuelle, ces librairies peuvent être pratiques car il est possible de leur donner la zone à extraire sur la page. Cette méthode n’est cependant  pas industrialisable, car il est très rare que les tableaux d’un PDF aient un format standardisé. Au contraire, comme le montre l’image ci-dessous, de plus en plus de PDF contiennent des tableaux avec différents types de formats, de police, et plus généralement de manières d’agencer l’information. 

C’est pourquoi l’extraction de tableau conduit généralement à la rédaction de scripts ad hoc pour chaque type de table PDF. Cependant, une librairie récente du nom de Camelot a justement été créée pour pallier ces difficultés et offrir aux utilisateurs un contrôle bien plus large sur l'extraction des tables, grâce à de multiples outils et paramètres ajustables. Parmi les différentes innovations qu’apporte Camelot, on peut lister : 

  • la détection automatique de plusieurs tableaux sur une même page ;
  • les modes d’extraction stream et lattice, permettant à l’utilisateur d’indiquer si le tableau possède des lignes de démarcation bien définies, comme un tableau Excel (lattice), ou si Camelot doit inférer la structure du tableau à partir de l’agencement des différents éléments, et notamment des zones blanches (stream). Pour plus d’information, cliquez ici
  • un débugger visuel, permettant à l’utilisateur de voir ce que “voit” la librairie, et ainsi comprendre quels sont les paramètres à modifier pour que le tableau soit mieux détecté.

 

2. Le PDF Image

 

Pour le second type de PDF, la solution est d’utiliser des outils d’OCR, à l’instar des librairies open-source comme Pytesseract, Textract ou encore Pyocr

Là encore, elles offrent à l’utilisateur un ensemble plus ou moins fourni de fonctions pour reconnaître du texte, des tableaux, les zones d’extraction associées aux différents caractères, et même paramétrer le type de données à extraire (lettre, mot, chiffre, etc.)

III. Faisabilité d’un projet d’extraction, et intégration dans des process existants

Dans un projet faisant intervenir de l’extraction de documents PDF, il faut avant tout répondre à deux ensembles de questions.

  1. L’information est-elle toujours contenue dans le document et où se situe-t-elle? Quel est mon service minimum attendu ? Comment dois-je gérer les erreurs irréductibles?

Nous l’avons vu, il est quasiment impossible de récupérer 100% des informations sur un document PDF. C’est pourquoi, pour chaque nouveau projet faisant intervenir de l’extraction de PDFs, il est essentiel d’effectuer une véritable étude de faisabilité mettant en rapport les objectifs du projet avec la capacité d’extraction réelle, et de déterminer a priori un seuil en dessous duquel le projet ne sera pas réalisable. 

 

Prenons un exemple, et imaginons que l’on souhaite récupérer des données financières dans des rapports d’activités de PME françaises. En partant de l’hypothèse (déjà audacieuse) que l’on ait accès à un nombre suffisant de documents contenant les principales pièces financières de ces entreprises, il est très probable que l’on soit confronté aux deux problématiques suivantes: 

  • l’information n’est pas présente sur tous les documents. En effet, il arrive que certaines entreprises ne fournissent pas un compte de résultat détaillé, et se contentent des champs principaux ;
  • l’information est présente, mais dans des formats différents. Une première entreprise va donner son résultat net dans un paragraphe de texte. Une deuxième le présentera dans un tableau présentant les informations en ligne. Une troisième les présentera en colonne, et utilisera les lignes pour comparer l’année N à l’année N-1, etc. 

Dans cet exemple, l’étude de faisabilité permettra d’estimer le pourcentage de documents contenant l’information recherchée, ainsi que de scripts à concevoir pour l’extraire (un script par format de présentation de l’information). Cela permet de donner de la lisibilité aux différentes parties prenantes, en anticipant les limites du projets ainsi que le temps de développement nécessaire. 

 

  1. Quels outils dois-je utiliser ? Sont-ils cohérents avec la dimension du projet (taille, performance) et le niveau de service attendu ? 

Nous avons en effet vu plus haut qu’il existait une myriade d’outils, plus ou moins difficiles à installer, performants, et surtout plus ou moins gourmands en ressources. Ainsi, afin d’optimiser l’utilisation des différents outils, il est essentiel de déterminer en amont le type de PDF à traiter (image ou texte), le type d’information à extraire (texte, tableau, image), et enfin la volumétrie des documents. En effet, entre extraire une centaine de documents de quelques kO tous les mois et 1000 documents de plusieurs MO par jour, les ressources à fournir ne seront pas les mêmes, sachant que l’extraction de PDF peut prendre de quelques secondes à quelques minutes selon la taille du document. 

Conclusion

Nous avons passé en revue les différents réflexes à avoir lorsque l’on travaille avec des documents PDF : définir le type de document, localiser l’information, analyser la diversité des formats, en déduire les technologies à utiliser, estimer la volumétrie des documents à traiter et établir un seuil de performance. Même si ces tâches peuvent paraître fastidieuses, elles n’en sont pas moins essentielles pour s’assurer de la faisabilité d’un projet. Elles en facilitent le pilotage, et permettent d’anticiper un grand nombre d’erreurs potentiellement fatales, mais ne survenant généralement qu’au bout de plusieurs semaines de développement.