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 :
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.
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.
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.
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.
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
# 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 :
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.
GO TO FULL VERSION