CodeGym /Cours Java /Python SELF FR /Conversion de texte d'un PDF en format CSV ou Excel pour ...

Conversion de texte d'un PDF en format CSV ou Excel pour l'analyse des données

Python SELF FR
Niveau 44 , Leçon 1
Disponible

1. Analyseur de PDF

Pourquoi convertir un PDF en CSV ou Excel ?

Avant de plonger dans cette tâche, parlons un peu de pourquoi on devrait faire ce genre de conversion. Les documents PDF sont omniprésents pour transmettre des informations grâce à leur statisme et leur facilité d'impression.

Cependant, quand il s'agit d'analyse de données, les PDF ne sont pas le meilleur ami de l'analyste. C'est là que les fichiers CSV et Excel entrent en jeu. Ils sont pratiques pour l'analyse, peuvent être facilement ouverts dans Excel ou importés dans n'importe quel outil analytique. Lire, filtrer, trier et visualiser les données dans ces formats est un jeu d'enfant. Et qui dirait non à ça ?

Outils et bibliothèques

Pour accomplir notre tâche, on va utiliser quelques bibliothèques Python qui vont nous aider à "lever la malédiction du PDF" et transformer ce fichier en un merveilleux CSV (ou Excel, si tu préfères). On va utiliser PyPDF2, PDFPlumber et pandas. PyPDF2 nous permettra d'extraire le texte d'un PDF, PDFPlumber de le faire au niveau pro, et pandas — de manipuler les données comme des tables.

Si tu n'as pas encore installé ces bibliothèques, pourquoi ne pas le faire tout de suite ? Tape cette commande dans ton terminal :

Bash
pip install PyPDF2 PDFPlumber pandas

Ça c'est réglé, passons maintenant aux choses sérieuses !

2. Extraction de texte d'un document PDF

Extraction de texte avec PyPDF2

La première tâche : extraire ce précieux texte du PDF. On va utiliser la bibliothèque PyPDF2 pour ça. Écrivons un petit script qui ouvre un fichier PDF et extrait le texte de chaque page du document.

Python

import PyPDF2

# On ouvre le fichier
with open('sample.pdf', 'rb') as file:
    reader = PyPDF2.PdfReader(file)
    text = ""
    
    # On parcourt toutes les pages pour extraire le texte
    for page in reader.pages:
        text += page.extract_text()
    
    print(text)  # On affiche le texte extrait

Facile comme bonjour ! On a lu le fichier et extrait le texte. Mais tous les textes ne sont pas parfaits : parfois, il faudra un traitement supplémentaire, comme supprimer des caractères inutiles ou diviser en lignes.

Extraction de texte avec PDFPlumber

PDFPlumber est plus précis pour les PDF contenant des tables et des structures complexes. Avec lui, tu peux non seulement extraire du texte, mais aussi travailler avec des tables.

Python

import pdfplumber

# On ouvre le fichier PDF
with pdfplumber.open("sample_with_table.pdf") as pdf:
    text = ""
    for page in pdf.pages:
        text += page.extract_text() + "\n"

print(text)

Ce code extrait également du texte de toutes les pages, mais contrairement à PyPDF2, PDFPlumber gère mieux la mise en page et les tableaux.

Extraction de tableaux d'un PDF avec PDFPlumber

Si le PDF contient des tableaux, PDFPlumber permet de les extraire sous forme de listes, ce qui facilite leur conversion ultérieure en CSV ou Excel.

Python

import pdfplumber
import pandas as pd

# On ouvre le PDF et on extrait les tableaux
with pdfplumber.open("sample_with_table.pdf") as pdf:
    all_tables = []
    for page in pdf.pages:
        table = page.extract_table()
        if table:
            all_tables.extend(table)

# On transforme les données en DataFrame
df = pd.DataFrame(all_tables[1:], columns=all_tables[0])  # La première ligne contient les en-têtes
print(df)

Ce code crée une table à partir des données du PDF et la sauvegarde dans un DataFrame, ce qui permet de facilement sauvegarder la table au format CSV ou Excel.

3. Sauvegarde des données

Conversion de texte en DataFrame

Maintenant qu'on a le texte, imaginons qu'il est organisé en lignes, chacune correspondant à une ligne de notre future table. Notre tâche sera de le convertir en DataFrame avec pandas pour ensuite le sauvegarder en fichier CSV.

Python

import pandas as pd

# Imaginons que chaque ligne de texte correspond à une ligne de données
data = text.split('\n')
data = [row.split(',') for row in data if row.strip() != '']  # On divise les lignes par des virgules

# On crée un DataFrame
df = pd.DataFrame(data[1:], columns=data[0])  # La première ligne est utilisée comme en-têtes

# On sauvegarde le DataFrame en CSV
df.to_csv('output.csv', index=False)

Ici, on a juste divisé tout le texte en lignes, puis en éléments individuels, et créé un DataFrame, en utilisant la première ligne comme en-têtes de colonnes. Ensuite, on l'a sauvegardé en fichier CSV. Woohoo ! On a fait un boulot qui, autrefois, aurait demandé énormément d'efforts avec un stylo et une calculette.

Conversion des données en CSV

Après avoir extrait du texte ou des tableaux du PDF, tu peux sauvegarder les données en CSV avec la bibliothèque Pandas.

Sauvegarde des données en CSV

Python

# Sauvegarde des données en CSV
df.to_csv("output.csv", index=False)
print("Les données ont été sauvegardées avec succès dans output.csv")

Ce code sauvegarde le DataFrame avec les données du PDF dans le fichier output.csv, que tu peux ouvrir avec n'importe quel éditeur de tableau ou charger sur une plateforme analytique.

Conversion en Excel

Et si tu veux ni plus ni moins qu'Excel ? Pas de souci ! pandas fournit tout ce qu'il faut pour ça. Il suffit de remplacer la dernière ligne du précédent exemple par :

Python

df.to_excel('output.xlsx', index=False)

Ainsi, ton DataFrame sera sauvegardé en fichier Excel, et tu pourras le faire défiler dans tous les sens, appliquer des filtres et utiliser des tableaux croisés dynamiques Excel — tout ce qui fera de toi l'analyste de l'année à la fête de l'entreprise.

Particularités et pièges

Comme toujours, on rencontre des obstacles sur notre chemin. Extraire du texte des documents PDF peut parfois ressembler à expliquer à ta grand-mère ce qu'est le cloud. Certains PDF ont des structures complexes, comme des tableaux, graphiques et images, qui ne sont pas faciles à convertir en texte, surtout en structure organisée. Dans de tels cas, tu pourrais avoir besoin de traitement de texte supplémentaire, d'utiliser des expressions régulières, ou même des bibliothèques OCR spécialisées pour extraire des données à partir d'images contenues dans le PDF.

En plus, tous les documents PDF ne sont pas également amicaux pour l'automatisation. Certains d'entre eux sont chiffrés ou protégés par des mots de passe. PyPDF2 permet de gérer les mots de passe, mais avec le chiffrement, les choses se compliquent.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION