Files

113 lines
3.1 KiB
Markdown

# Collecteur de PDF officiels
Ce dossier contient un collecteur local pour repérer, télécharger et ranger les PDF officiels liés aux cycles 3 et 4 depuis des pages sources de l'État français, principalement éduscol.
Le script est volontairement prudent :
- il ne suit que les domaines listés dans `seeds.json` ;
- il limite la profondeur de crawl ;
- il fonctionne en `dry-run` par défaut ;
- il calcule un SHA256 pour éviter les doublons ;
- il range les fichiers par `Cycle 3` / `Cycle 4` puis par matière ;
- il met les cas ambigus dans `A_trier`.
## Lancer un test local
Depuis `Programme` :
```powershell
python .\pdf_collecteur\collect_official_pdfs.py --dry-run
```
Pour limiter le test à peu de pages :
```powershell
python .\pdf_collecteur\collect_official_pdfs.py --dry-run --max-depth 1 --limit-pages 20
```
Pour repartir d'un manifest/log vide pendant les essais :
```powershell
python .\pdf_collecteur\collect_official_pdfs.py --dry-run --fresh --max-depth 1 --limit-pages 20
```
Si Python échoue avec `CERTIFICATE_VERIFY_FAILED` sur Windows, utiliser temporairement :
```powershell
python .\pdf_collecteur\collect_official_pdfs.py --dry-run --insecure --max-depth 1 --limit-pages 20
```
## Télécharger les nouveaux PDF
```powershell
python .\pdf_collecteur\collect_official_pdfs.py --download
```
Sans `--download`, aucun PDF n'est écrit dans les dossiers `Cycle 3` / `Cycle 4`.
## Sorties
Le script écrit dans `pdf_collecteur/state/` :
- `manifest.csv` : catalogue des PDF vus/téléchargés ;
- `crawl_log.jsonl` : journal technique ligne par ligne ;
- `downloads_tmp/` : fichiers temporaires pendant le téléchargement.
## Ajouter des sources
Modifier `seeds.json` :
```json
{
"url": "https://eduscol.education.fr/...",
"cycle_hint": "Cycle 3",
"subject_hint": "Math"
}
```
Les hints ne forcent pas le classement, mais ils servent de point d'appui quand le lien PDF est peu explicite.
## Déploiement VPS
Le script n'a pas de dépendance externe Python. Sur VPS :
```bash
cd /chemin/vers/Programme
python3 pdf_collecteur/collect_official_pdfs.py --dry-run --max-depth 2
python3 pdf_collecteur/collect_official_pdfs.py --download --max-depth 2
```
Pour automatiser, commencer avec un cron en `--dry-run`, relire `manifest.csv`, puis passer en `--download` quand les classements sont satisfaisants.
## Indexer les PDF avec Poppler
Après téléchargement, générer les textes et métadonnées dans le format historique :
```powershell
python .\pdf_collecteur\index_pdfs.py --fresh
```
Sur Windows avec Poppler installé via WinGet, utiliser plutôt le script PowerShell :
```powershell
.\pdf_collecteur\index_pdfs.ps1 -Fresh
```
Le résultat est écrit dans :
```text
extractions_pdf_indexed_global/
```
Format :
- `001.txt`, `002.txt`, etc. : texte extrait avec `pdftotext -layout`.
- `001.pdfinfo.txt`, `002.pdfinfo.txt`, etc. : métadonnées `pdfinfo`.
- `manifest.csv` : correspondance entre ID, chemin PDF source, hash et statut.
Pour inclure aussi les PDF placés à la racine de `Programme` :
```powershell
python .\pdf_collecteur\index_pdfs.py --fresh --include-root-pdfs
```