Intelligence documentaire : l'art de l'extraction d'information à partir des PDF

Auteur : Anurag Bejju, Statistique Canada

Les documents PDF (Portable Document Format) sont l'un des formats de fichier les plus populaires et les plus utilisés. Tandis que le monde évolue rapidement vers une économie numérique, les PDF sont devenus une solution écologique au papier, permettant aux créateurs de diffuser, d'imprimer et de visualiser facilement un fichier dans sa mise en page prévue sur de multiples plateformes. Ils contiennent une foule de renseignements importants pour les organisations, les entreprises et les institutions, dans un format qui reflète le papier qu'ils ont remplacé.

Bien que les PDF constituent un moyen fiable de formater et de stocker des données, il n'est pas toujours facile d'en extraire les données. Statistique Canada a tiré parti de la puissance des technologies d'intelligence artificielle responsables et de l'application de solutions de science des données pour rechercher et élaborer des solutions permettant d'extraire de précieux renseignements de sources non structurées comme les PDF et les images numérisées. L'application de ces solutions permet de réduire les coûts et garantit que les renseignements sont fournis aux Canadiens de manière plus opportune, plus précise et plus sécurisée. En obtenant, puis en extrayant des données à partir de documents PDF, nous pouvons concevoir des moyens de générer des statistiques significatives de haute qualité en temps opportun. Cela permet de gagner un temps considérable dans la saisie des données et permet aux chercheurs de consacrer leur temps à des analyses plus importantes.

Qu'est-ce que l'intelligence documentaire?

Travailler avec des documents non structurés est complexe et peut entraîner un gaspillage de ressources précieuses. De nombreux services financiers, organismes gouvernementaux et autres grandes entreprises travaillent avec des documents imprimés et électroniques qui doivent être transformés et stockés dans un format de données consultable et interrogeable (p. ex. JSON ou CSV). Le processus d'extraction et de transformation des données à partir des PDF est souvent effectué manuellement et peut demander beaucoup de ressources, car les membres doivent copier des parties de renseignements pertinents et les formater dans une structure tabulaire. Ce processus peut être lourd, entraîner des erreurs et provoquer des retards. Même avec de multiples ressources pour la récupération des données, il faut parfois des jours ou des semaines pour obtenir des renseignements concrets.

En réponse à ces défis, les entreprises technologiques créent des outils d'automatisation qui permettent de saisir, d'extraire et de traiter les données à partir de divers formats de documents. Les technologies d'intelligence artificielle, telles que le traitement automatique du langage naturel, la vision par ordinateur, l'apprentissage profond et l'apprentissage automatique, créent des solutions en libre accès qui transforment les renseignements non structurés et semi-structurés en données exploitables. Ces technologies d'intelligence documentaire sont appelées traitement intelligent des documents.

Quels sont les avantages du traitement intelligent des documents?

Le traitement intelligent des documents présente six avantages essentiels :

  1. Temps : Il faut moins de temps pour traiter et créer des sources de données structurées.
  2. Argent : Il permet de réaliser des économies en réduisant le travail d'extraction manuelle.
  3. Efficacité : Il supprime les tâches répétitives en milieu de travail et accroît la productivité.
  4. Fiabilité : Il augmente la précision des renseignements extraits et réduit les erreurs humaines.
  5. Évolutivité : Il offre la possibilité de faire évoluer un grand volume de documents à un coût relativement faible.
  6. Polyvalence : Il traite les documents structurés, semi-structurés et non structurés dans la plupart des formats.

Types de documents PDF

Les trois types de documents PDF les plus courants sont les suivants :

  1. PDF structurés : La mise en page et la structure sous-jacentes de ces documents restent fixes dans l'ensemble des données. En créant des segments, puis en leur apposant des étiquettes appropriées, on construit des pipelines d'automatisation pour extraire et structurer les valeurs dans un format tabulaire. Ces modèles peuvent être reproduits pour des formulaires présentant des dispositions similaires.
  2. PDF textuels non structurés : Si vous pouvez cliquer et glisser pour sélectionner du texte dans une visionneuse PDF, votre document PDF est un document textuel. Extraire du texte libre de ces documents peut être assez simple, mais le faire en tenant compte de la mise en page ou du contexte peut être extrêmement difficile. La base de données Système électronique de données, d'analyse et de recherche (SEDAR) utilisée par Statistique Canada (qui sera expliquée plus en détail plus bas dans l'article) contient des millions de PDF textuels non structurés qui nécessitent des techniques avancées de traitement intelligent des documents afin de créer des ensembles de données structurés.
  3. PDF non structurés numérisés : Les documents PDF numérisés contiennent des renseignements de formes et de tailles multiples. Des étapes supplémentaires permettent de localiser les composants du texte et d'effectuer une reconnaissance optique des caractères pour extraire le texte. Une fois que le PDF est converti en texte et que l'emplacement du texte est spécifié, vous pouvez déployer des méthodes semblables à celles utilisées pour les PDF textuels pour extraire des renseignements. Les dernières recherches dans ce domaine seront abordées dans les prochains articles de cette série.

Bibliothèques de source libre disponibles pour l'extraction de PDF

Progiciel 1 : PyPDF2

PyPDF2 (le contenu de cette page est en anglais) est une boîte à outils PDF entièrement en langage Python provenant du projet PyPDF. Elle peut extraire des données de fichiers PDF ou manipuler des fichiers PDF existants pour produire un nouveau fichier. Cela permet au développeur de recueillir, diviser, transformer et fusionner des PDF ainsi que d'extraire les métadonnées associées au PDF. Comme le montre l'image, la précision de l'extraction du texte est inférieure à celle des autres logiciels, et vous ne pouvez pas extraire d'images, de cadres de délimitation, de graphiques ou d'autres supports de ces documents. Il s'agit d'un bon outil si le seul objectif est d'extraire du texte libre indépendamment de sa mise en page.

Extrait de code


import PyPDF2

with open(pdf_path, "rb") as f:
    reader = PyPDF2.PdfFileReader(f)
    page = reader.getPage(1)
    output = page.extractText()
	

Exemple de PDF

Progiciel 1 : PyPDF2 - Exemple de PDF

Sorties

Progiciel 1 : PyPDF2 - Sorties
Description - PyPDF2 Exemple de PDF et Sorties

Une image d'un exemple de PDF avec une structure tabulaire composée d'une en-tête, d'un sous-titre, de rubriques et d'une colonne de notes à droite. La boîte de sortie affichant l'extraction du texte a le bon texte, mais elle est indépendante de la mise en page originale ou des détails délimitant les sous-titres et le texte normal.

Progiciel 2 : PyMuPDF

PyMuPDF (le contenu de cette page est en anglais) est une liaison Python pour MuPDF, soit une visionneuse, un moteur de rendu et une boîte à outils légers pour les documents PDF, les fichiers XPS et les livres numériques, qui est développée et mise à jour par Artifex Software inc. Il permet au développeur d'obtenir des fonctionnalités beaucoup plus avancées basées sur la mise en page, avec une capacité de rendu et une vitesse de traitement élevée. Les programmeurs ont accès à de nombreuses fonctions importantes de MuPDF à partir d'un environnement Python. Comme PDFMiner (décrit sous Progiciel 3), ce progiciel ne fournit que des renseignements sur la mise en page, et le développeur doit construire des processus pour les structurer et les formater.

Extrait de code


import fitz
import pandas as pd

doc = fitz.open(good_pdf_path)
page = doc[4]
_, _, p_width, p_height = page.MediaBox
text = page.getText("blocks")
output = pd.DataFrame(text, columns=["block_xMin", "block_yMin", "block_xMax", "block_yMax", "block_text", "block_id", "page" ])

Exemple de PDF

Progiciel 2 : PyMuPDF - Exemple de PDF

Sorties

Progiciel 2 : PyMuPDF - Sorties
Description - PyMuPDF Exemple de PDF et Sorties

Une image d'un exemple de PDF avec une structure tabulaire composée d'une en-tête, d'un sous-titre, de rubriques et d'une colonne de date à droite. La boîte de sortie montrant l'extraction des données a la bonne mise en page, mais le texte est constitué de formules prêtes à être formatées par l'utilisateur.

Progiciel 3 : PDFMiner

Le progiciel PDFMiner (le contenu de cette page est en anglais) vous permet d'analyser tous les objets d'un document PDF en objets Python et d'analyser, de regrouper et d'extraire du texte ou des images de manière lisible par un humain. Il prend également en charge des langues comme le chinois, le japonais et le coréen ainsi que l'écriture verticale. Comme le montre l'image, vous pouvez obtenir des renseignements tels que le cadre de délimitation exact de chaque élément de texte sous forme de chaîne, ainsi que d'autres renseignements sur la mise en page (polices, etc.). Bien que ce progiciel puisse être excellent pour localiser des éléments dans le document, le développeur doit construire des processus pour le structurer et le formater.

Extrait de code


from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBox, LTTextLine, LTFigure
import pandas as pd
output = []
def parse_layout(layout):
    """Function to recursively parse the layout tree."""

    for lt_obj in layout:

        if isinstance(lt_obj, LTTextBox) or isinstance(lt_obj, LTTextLine):
            output.append([lt_obj.__class__.__name__, lt_obj.bbox, lt_obj.get_text()])
        elif isinstance(lt_obj, LTFigure):
            parse_layout(lt_obj)  # Recursive

with open(pdf_path, "rb") as f:
    parser = PDFParser(f)
    doc = PDFDocument(parser)
    page = list(PDFPage.create_pages(doc))[1]  # Page Number
    rsrcmgr = PDFResourceManager()
    device = PDFPageAggregator(rsrcmgr, laparams=LAParams())
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    interpreter.process_page(page)
    layout = device.get_result()
    _, _, width, height = page.mediabox
    parse_layout(layout)

output = pd.DataFrame(output, columns=["bbox_type", "coords", "token"])
output[["word_xMin", "word_yMin", "word_xMax", "word_yMax"]] =  output["coords"].to_list()

Exemple de PDF

Progiciel 3 : PDFMiner - Exemple de PDF

Sorties

Progiciel 3 : PDFMiner - Sorties
Description - PDFMiner Exemple de PDF et Sorties

Une image d'un exemple de PDF avec une structure tabulaire composée d'une en-tête, d'un sous-titre, de rubriques et de colonnes de date à droite. La boîte de sortie montrant l'extraction des données a un texte et une mise en page similaires, avec le cadre de délimitation exact pour chaque élément de texte sous forme de chaîne, ainsi que la police et d'autres renseignements de mise en page. L'utilisateur doit tout de même créer des processus déterminant la structure pour remplir le tableau.

Progiciel 4 : Tabula-py

Tabula-py (le contenu de cette page est en anglais) est une simple enveloppe Python de tabula-java, qui peut lire un tableau à partir de PDF et le convertir en format DataFrame de pandas. Il vous permet également de le convertir en fichier CSV, TSV et JSON et d'utiliser des fonctionnalités avancées comme la grille, qui fonctionne bien pour les lignes séparant les cellules du tableau. Il peut être difficile d'extraire et de détecter correctement le contenu des tableaux pour les PDF plus complexes.

Extrait de code


import tabula
import pandas as pd

output = tabula.read_pdf(pdf_path, lattice=False, pages=4)[0]

Exemple de PDF

Progiciel 4 : Tabula-py - Exemple de PDF

Sorties

Progiciel 4 : Tabula-py - Sorties
Description - Tabula-py Exemple de PDF et Sorties

Une image d'un exemple de PDF avec une structure tabulaire composée d'une en-tête, d'un sous-titre, de rubriques et de colonnes de date à droite. La boîte de sortie montrant l'extraction des données a une mise en page similaire, avec le cadre de délimitation exact pour chaque élément de texte sous forme de chaîne, ainsi que la police et d'autres renseignements de mise en page.

Progiciel 5 : Camelot

Tout comme Tabula-py, Camelot (le contenu de cette page est en anglais) est également une bibliothèque Python qui peut vous aider à extraire les tableaux des documents PDF. Il s'agit du progiciel le plus efficace et le plus avancé, qui vous permet de contrôler le processus d'extraction des tableaux. Il fournit également des mesures de précision et d'espacement des blancs pour le contrôle de la qualité, ainsi que des méthodes de segmentation des pages pour améliorer l'extraction.

Extrait de code


import camelot
tables = camelot.read_pdf(good_pdf_path)
output = tables[0].df

Exemple de PDF

Progiciel 5 : Camelot - Exemple de PDF

Sorties

Progiciel 5 : Camelot - Sorties
Description - Camelot Exemple de PDF et Sorties

Une image d'un exemple de PDF avec une structure tabulaire composée d'une en-tête, d'un sous-titre, de rubriques et de colonnes de date à droite. La boîte de sortie montrant l'extraction des données a une mise en page similaire du texte, avec le cadre de délimitation exact pour chaque élément de texte sous forme de chaîne.

Utilisation du traitement intelligent des documents dans le projet SEDAR

Statistique Canada a acquis l'ensemble de données historiques du système de classement SEDAR. Les spécialistes des données disposent ainsi d'une source de données de rechange qui leur permet d'obtenir des renseignements précieux et de fournir des renseignements en temps opportun. SEDAR est un système utilisé par les sociétés canadiennes cotées en bourse pour déposer des documents relatifs aux valeurs mobilières (tels que des états financiers, des rapports annuels et des notices annuelles) auprès de diverses commissions canadiennes des valeurs mobilières. Les employés de Statistique Canada utilisent la base de données SEDAR pour la recherche, la confrontation des données, la validation, le processus de mise à jour de la base de sondage, et plus encore. Toutefois, l'extraction de données à partir des documents relatifs aux titres publics se fait manuellement et prend beaucoup de temps.

Pour gagner en efficacité, l'équipe des sciences des données a mis au point un pipeline d'intelligence documentaire basé sur l'intelligence artificielle qui détermine et extrait correctement les variables financières clés des bons tableaux d'un document PDF. Cela a permis de transformer une grande quantité de documents publics non structurés provenant de SEDAR en ensembles de données structurées. Cette transformation permet l'automatisation et l'extraction de renseignements économiques relatifs aux entreprises canadiennes.

La première partie du processus d'automatisation consiste à déterminer les pages requises dans le document PDF, ce qui est fait à l'aide d'une méthodologie élaborée à Statistique Canada. Une sous-section du document comprenant une forte densité de tableaux est d'abord établie. Cette sous-section de pages est ensuite traitée afin d'extraire les caractéristiques principales, qui sont utilisées par un modèle de classification par apprentissage automatique formé pour déterminer les bonnes pages. La deuxième partie du processus d'automatisation porte sur l'extraction des tableaux. Les pages déterminées à la première étape servent d'entrée pour un algorithme d'extraction de tableaux élaboré à l'interne appelé algorithme Spatial Layout based Information and Content Extraction (SLICE)(le contenu de cette page est en anglais), qui extrait tous les renseignements dans un tableau en format numérique. Les données sont présentées dans une application Web interactive et peuvent être téléchargées en format CSV.

Ce processus robuste automatise le processus d'extraction des variables financières pour un maximum de 70 000 PDF par an en quasi temps réel. Cela permet de réduire considérablement le nombre d'heures passées à déceler et à saisir manuellement les renseignements requis et de réduire la redondance des données.

Souhaitez-vous en savoir plus sur l'intelligence documentaire?

Les outils à code source ouvert fonctionnent pour les processus simples d'extraction de PDF, mais ne sont pas adaptés aux sources complexes, non structurées et variables de documents PDF. Dans les prochains articles, nous aborderons les dernières recherches en matière d'apprentissage automatique et d'intelligence artificielle dans le domaine de l'intelligence documentaire. Nous parlerons encore également de SLICE, le nouvel algorithme de vision par ordinateur conçu et développé par Statistique Canada que nous avons mentionné auparavant. Cet algorithme a la capacité d'utiliser simultanément des renseignements textuels, visuels et de mise en page pour segmenter plusieurs points de données dans une structure tabulaire. Cette solution modulaire fonctionne avec des tableaux non structurés et effectue l'extraction de variables financières à partir d'une variété de documents PDF.

Date de modification :