Dans ce tutoriel, nous allons vous guider à travers la création d'une fonctionnalité d'upload et d'extraction de texte à partir de fichiers PDF en utilisant FastAPI. Nous utiliserons également la bibliothèque pdfminer
pour extraire le texte des fichiers PDF.
Prérequis
Avant de commencer, assurez-vous d'avoir les éléments suivants installés sur votre machine :
- Python 3.8 ou supérieur
- FastAPI
- Uvicorn (serveur ASGI pour exécuter FastAPI)
- pdfminer.six (pour extraire le texte des PDF)
Vous pouvez installer les dépendances nécessaires en utilisant pip :
pip install fastapi uvicorn pdfminer.six
Étape 1: Créer le Projet
Créez un nouveau répertoire pour votre projet et naviguez à l'intérieur :
mkdir pdf_extractor
cd pdf_extractor
Créez un fichier nommé main.py
dans ce répertoire. Ce fichier contiendra le code de votre application FastAPI.
Étape 2: Écrire le Code de l'Application
Ouvrez main.py
dans votre éditeur de texte préféré et ajoutez le code suivant :
from fastapi import FastAPI, File, UploadFile, HTTPException
from pdfminer.high_level import extract_text
import io
app = FastAPI()
@app.get("/")
def home():
return {"Hello": "World"}
@app.post("/upload-pdf/")
async def upload_and_extract_pdf(file: UploadFile = File(...)):
if not file.filename.lower().endswith('.pdf'):
raise HTTPException(status_code=400, detail="Le fichier doit être un PDF")
try:
# Lire le contenu du fichier
content = await file.read()
# Utiliser BytesIO pour traiter le contenu en mémoire
pdf_file = io.BytesIO(content)
# Extraire le texte du PDF
text = extract_text(pdf_file)
# Afficher le résultat dans la console
print(f"Contenu extrait du PDF '{file.filename}':")
print("-" * 50)
print(text)
print("-" * 50)
# Retourner un résumé au client
return {
"filename": file.filename,
"content_length": len(text),
"preview": text[:200] + "..." if len(text) > 200 else text
}
except Exception as e:
print(f"Erreur lors du traitement du PDF: {str(e)}")
raise HTTPException(status_code=500, detail=f"Erreur lors du traitement du PDF: {str(e)}")
Explication du Code
-
Importations:
FastAPI
, File
, UploadFile
, HTTPException
: Modules de FastAPI pour créer l'API et gérer les fichiers uploadés.
extract_text
: Fonction de pdfminer
pour extraire le texte des fichiers PDF.
io
: Module pour gérer les flux de données en mémoire.
-
Création de l'Application FastAPI:
app = FastAPI()
: Crée une instance de l'application FastAPI.
-
Route de Bienvenue:
@app.get("/")
: Définit une route GET pour la racine de l'API qui retourne un message de bienvenue.
-
Route d'Upload et d'Extraction de PDF:
@app.post("/upload-pdf/")
: Définit une route POST pour uploader et extraire le texte des fichiers PDF.
async def upload_and_extract_pdf(file: UploadFile = File(...))
: Fonction asynchrone pour gérer l'upload et l'extraction de texte.
- Vérifie que le fichier uploadé est un PDF.
- Lit le contenu du fichier.
- Utilise
BytesIO
pour traiter le contenu en mémoire.
- Extrait le texte du PDF.
- Affiche le texte extrait dans la console.
- Retourne un résumé du texte extrait au client.
- Gère les exceptions et retourne une erreur en cas de problème.
Étape 3: Démarrer le Serveur
Pour démarrer le serveur FastAPI, utilisez la commande suivante dans votre terminal :
uvicorn main:app --reload
Cette commande démarre le serveur Uvicorn et charge l'application FastAPI définie dans main.py
. L'option --reload
permet de recharger automatiquement le serveur lorsque vous modifiez le code.
Étape 4: Tester l'API
Vous pouvez tester l'API en utilisant un outil comme curl
, Postman, ou directement via l'interface utilisateur de FastAPI accessible à l'adresse http://127.0.0.1:8000/docs
.
Exemple de Requête avec curl
Pour tester l'upload d'un fichier PDF, vous pouvez utiliser la commande suivante :
curl -X 'POST' \
'http://127.0.0.1:8000/upload-pdf/' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@path/to/your/file.pdf'
Remplacez path/to/your/file.pdf
par le chemin vers votre fichier PDF.
Conclusion
Dans ce tutoriel, nous avons vu comment créer une fonctionnalité d'upload et d'extraction de texte à partir de fichiers PDF en utilisant FastAPI et pdfminer
. Vous avez appris à configurer votre projet, écrire le code de l'application, démarrer le serveur, et tester l'API. Cette fonctionnalité peut être utile dans de nombreux cas d'utilisation, comme l'analyse de documents, l'extraction de données, et bien plus encore.