Utilisez l'outil pdfread.py se trouvant à côté de ce fichier pour lire des PDF. Exécutez-le de l'une des manières suivantes :
- Avec uv 0.11+ (recommandé) : invoquez
pdfread.pydirectement — le shebang l'exécute viauv run, et le premier appel télécharge les dépendances et peut prendre une minute. - Sans uv :
python3 pdfread.py …fonctionne avec toute version de Python 3.10+ disposant depymupdf4llm>=0.0.17installé (pip install pymupdf4llm).
La commande search nécessite SQLite avec FTS5 ; les Pythons gérés par uv et la quasi-totalité des Pythons système modernes l'incluent, et le script émet une erreur claire dans le cas contraire.
Exécutez pdfread.py --help pour connaître l'utilisation complète. En résumé :
pdfread.py info FICHIER— nombre de pages, métadonnées, plan/TOC. Commencez ici.pdfread.py search FICHIER "termes"— pages mentionnant les mots-clés, classées par BM25 avec un extrait par résultat. La première recherche construit un index cache (quelques secondes) ; les recherches suivantes sont instantanées. Les termes sont combinés par ET,terme*correspond aux préfixes,--rawdéverrouille la syntaxe complète de FTS5 ("phrase exacte", OU, NEAR). Couche texte uniquement — les pages scannées sont invisibles à la recherche.pdfread.py text FICHIER --pages 10-25— texte en markdown pour une plage de pages (base 1). Les figures apparaissent sous forme de placeholders[image: p12-img2 640x480px].pdfread.py image FICHIER p12-img2— écrit cette figure en PNG et affiche son chemin ; visualisez-la avec votre outil de lecture de fichiers.pdfread.py images FICHIER --pages 12— liste les identifiants de figures sur les pages.pdfread.py render FICHIER 7— rend une page entière (ou--rect x0,y0,x1,y1pour un recadrage) en PNG ; solution de repli pour les pages scannées et tout ce que la couche texte ne couvre pas.
Préserver le contexte sur les grands PDF
Pour des questions précises ("où le contrat mentionne-t-il les frais de résiliation ?"), exécutez d'abord search et lisez uniquement les pages pertinentes avec text --pages — pas besoin de déployer un sous-agent. Le cache d'index est partagé, donc les sous-agents peuvent aussi utiliser search sans le reconstruire.
Pour une synthèse large, ne déversez pas un document entier dans la conversation principale. Procédez plutôt ainsi :
- Exécutez
infopour obtenir le nombre de pages et le plan, puis partitionnez le document en plages cohérentes (par chapitre, ou ~15–25 pages). - Lancez un sous-agent par plage avec des instructions du type : "Exécutez
<chemin>/pdfread.py text <fichier> --pages 10-25et répondez à la question de l'utilisateur / résumez en au maximum N mots. Si un placeholder[image: ...]semble pertinent, extrayez-le avec la commandeimageet examinez-le." - Conservez uniquement les résumés/réponses dans la conversation principale et synthétisez à partir de ceux-ci. Re-ciblez vous-même des pages spécifiques uniquement lorsqu'un résumé indique que la réponse s'y trouve.
Remarques
- Il n'y a pas d'OCR : une page sans couche texte revient avec uniquement son placeholder
[image: ...]pleine page (ou une note "aucun texte extractible") — extrayez-la ou utilisezrenderet lisez l'image visuellement. - L'extraction est déterministe : les identifiants d'image sont stables d'une exécution à l'autre, donc un identifiant rapporté par un sous-agent peut être extrait ultérieurement depuis la conversation principale.