Parser les Documents PDF avec PyMuPDF
Maîtrisez le parsing PDF : extrayez le texte, les images, les tableaux et les métadonnées des PDF en utilisant PyMuPDF et les alternatives.
Pourquoi les PDF sont difficiles
Les PDF sont conçus pour l'affichage, pas pour l'extraction de données. Le texte peut être :
- Des images (documents scannés)
- Des polices intégrées avec encodages personnalisés
- Des mises en page complexes (multi-colonnes, tableaux)
- Protégé ou chiffré
PyMuPDF : La référence (2025)
PyMuPDF (fitz) est l'analyseur PDF le plus rapide et le plus fiable.
DEVELOPERpythonimport fitz # PyMuPDF def extract_pdf_content(pdf_path): doc = fitz.open(pdf_path) full_text = "" metadata = { "title": doc.metadata.get("title", ""), "author": doc.metadata.get("author", ""), "pages": len(doc) } for page_num, page in enumerate(doc): # Extraire le texte avec préservation de la mise en page text = page.get_text("text") full_text += f"\n\n--- Page {page_num + 1} ---\n{text}" return full_text, metadata
Extraire les images des PDF
DEVELOPERpythondef extract_images(pdf_path): doc = fitz.open(pdf_path) images = [] for page_num, page in enumerate(doc): image_list = page.get_images() for img_index, img in enumerate(image_list): xref = img[0] base_image = doc.extract_image(xref) images.append({ "page": page_num + 1, "image_data": base_image["image"], "extension": base_image["ext"] }) return images
Gérer les PDF scannés (OCR)
Pour les PDF basés sur images, utilisez Tesseract OCR :
DEVELOPERpythonfrom PIL import Image import pytesseract import fitz def ocr_pdf(pdf_path): doc = fitz.open(pdf_path) text = "" for page in doc: # Convertir la page en image pix = page.get_pixmap() img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples) # OCR sur l'image page_text = pytesseract.image_to_string(img) text += page_text + "\n\n" return text
Extraire les tableaux
Utilisez pdfplumber pour l'extraction de tableaux :
DEVELOPERpythonimport pdfplumber def extract_tables(pdf_path): tables = [] with pdfplumber.open(pdf_path) as pdf: for page in pdf.pages: page_tables = page.extract_tables() tables.extend(page_tables) return tables
Extraction consciente de la mise en page
Préserver la structure du document :
DEVELOPERpythondef extract_with_layout(pdf_path): doc = fitz.open(pdf_path) structured_content = [] for page in doc: blocks = page.get_text("dict")["blocks"] for block in blocks: if block["type"] == 0: # Bloc de texte text = "" for line in block["lines"]: for span in line["spans"]: text += span["text"] structured_content.append({ "type": "text", "content": text, "bbox": block["bbox"], # Position "page": page.number }) return structured_content
Optimisation des performances
Traitement parallèle pour les gros PDF :
DEVELOPERpythonfrom concurrent.futures import ThreadPoolExecutor def parse_pdf_parallel(pdf_path, num_workers=4): doc = fitz.open(pdf_path) def process_page(page_num): page = doc[page_num] return page.get_text() with ThreadPoolExecutor(max_workers=num_workers) as executor: texts = list(executor.map(process_page, range(len(doc)))) return "\n\n".join(texts)
Outils alternatifs (2025)
- PyPDF2 : Simple mais plus lent
- pdfplumber : Excellent pour les tableaux
- Camelot : Extraction spécialisée de tableaux
- Adobe PDF Extract API : Commercial, très précis
Meilleures pratiques
- Tester d'abord avec des documents échantillon
- Gérer gracieusement les PDF chiffrés
- Préserver les numéros de page pour les citations
- Extraire les métadonnées (titre, auteur, date)
- Utiliser l'OCR uniquement si nécessaire (plus lent)
- Mettre en cache les résultats analysés pour éviter le retraitement
Les PDF sont l'épine dorsale de la connaissance d'entreprise. Maîtrisez l'analyse PDF pour débloquer le potentiel de votre RAG.
Tags
Articles connexes
Fondamentaux du Parsing de Documents
Commencez votre parcours RAG : apprenez à extraire le texte, les métadonnées et la structure des documents pour la recherche sémantique.
OCR pour Documents Scannés et Images
Extrayez le texte des PDF scannés et des images en utilisant Tesseract, AWS Textract et les techniques OCR modernes.
Stratégies de Mise en Cache pour Réduire la Latence et le Coût RAG
Réduisez les Coûts de 80% : Implémentez la Mise en Cache Sémantique, la Mise en Cache d'Embeddings et la Mise en Cache de Réponses pour un RAG Production.