113 lines
3.1 KiB
Markdown
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
|
|
```
|