Benchmark des Plateformes de Gestion de la…
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.
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.
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.
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.
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 :
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.
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 :
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.)
Dans un projet faisant intervenir de l’extraction de documents PDF, il faut avant tout répondre à deux ensembles de questions.
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:
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.
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.
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.