- Sélection et copie de 27 documents représentatifs (10 simples, 12 moyens, 5 complexes) - Outil d'annotation CLI complet (tools/annotation_tool.py) - Guide d'annotation détaillé (docs/annotation_guide.md) - Évaluateur de qualité (evaluation/quality_evaluator.py) * Calcul Précision, Rappel, F1-Score * Identification faux positifs/négatifs * Métriques par type de PII * Export JSON et rapports texte - Scanner de fuite (evaluation/leak_scanner.py) * Détection PII résiduels (CRITIQUE) * Détection nouveaux PII (HAUTE) * Scan métadonnées PDF (MOYENNE) - Benchmark de performance (evaluation/benchmark.py) * Mesure temps de traitement * Mesure CPU/RAM * Export JSON/CSV - Tests unitaires complets pour tous les composants - Documentation complète du module d'évaluation Tâches complétées: - 1.1.1 Sélection de 27 documents (au lieu de 30) - 1.1.2 Outil d'annotation CLI - 1.2.1 Évaluateur de qualité - 1.2.2 Scanner de fuite - 1.2.3 Benchmark de performance Prochaines étapes: - 1.1.3 Annotation des 27 documents (manuel) - 1.1.4 Enrichissement stopwords médicaux - 1.3 Mesure de la baseline
8.8 KiB
Guide d'Annotation - Dataset de Test
Vue d'Ensemble
Ce guide explique comment utiliser l'outil d'annotation CLI pour créer le dataset de test annoté nécessaire à l'évaluation de la qualité d'anonymisation.
Objectif
Créer un corpus de 27 documents PDF annotés manuellement avec :
- Tous les PII (Personally Identifiable Information) présents
- Le type de chaque PII (NOM, TEL, EMAIL, etc.)
- Le contexte de détection
- Les termes médicaux à préserver
Installation
L'outil d'annotation nécessite PyMuPDF (fitz) :
pip install pymupdf
Utilisation
Lister les documents disponibles
python tools/annotation_tool.py --list
Affiche la liste des 27 documents avec leur statut d'annotation.
Annoter un document spécifique
python tools/annotation_tool.py tests/ground_truth/pdfs/001_simple_unknown_BACTERIO_23018396.pdf
Reprendre l'annotation (mode automatique)
python tools/annotation_tool.py --resume
Trouve automatiquement le prochain document non annoté et lance l'annotation.
Workflow d'Annotation
1. Métadonnées du document
Au démarrage, l'outil demande :
- Nom de l'annotateur : Votre identifiant (ex:
annotator_1) - Type de document :
compte_rendu: Compte-rendu hospitaliertrackare: Document Trackareanapath: Compte-rendu d'anatomopathologiebacterio: Résultat de bactériologieconsultation: Consultation médicaleautre: Autre type
- Difficulté globale :
simple: 1-2 pages, peu de PIImoyen: 3-5 pages, PII variéscomplexe: >5 pages, nombreux PII
2. Annotation page par page
Pour chaque page :
- Affichage du texte : Le texte de la page est affiché
- Confirmation : "Annoter cette page? [O/n]"
- Annotation des PII : Pour chaque PII détecté
Annotation d'un PII
Pour chaque PII, l'outil demande :
a) Texte du PII
Texte du PII (ou 'q' pour terminer, 's' pour sauter): DUPONT
- Entrez le texte exact du PII tel qu'il apparaît dans le document
q: Terminer l'annotation de cette pages: Sauter cette annotation
b) Type de PII
Type de PII:
1. NOM
2. PRENOM
3. DATE_NAISSANCE
4. AGE
5. TEL
6. EMAIL
7. ADRESSE
8. CODE_POSTAL
9. VILLE
10. NIR
11. IPP
12. NDA
13. RPPS
14. FINESS
15. OGC
16. NUMERO_PATIENT
17. NUMERO_LOT
18. NUMERO_ORDONNANCE
19. NUMERO_SEJOUR
20. ETABLISSEMENT
21. SERVICE
22. DATE
23. AUTRE
Choix [1-23]:
c) Contexte
Contexte détecté: Dr. DUPONT a examiné le patient...
Utiliser ce contexte? [O/n]:
- L'outil détecte automatiquement le contexte (50 caractères avant/après)
- Vous pouvez l'accepter ou saisir un contexte manuel
d) PII obligatoire (RGPD)?
PII obligatoire (RGPD)? [O/n]:
O(défaut) : PII obligatoire selon le RGPD (doit être masqué)n: PII optionnel (peut être masqué ou non)
e) Difficulté de détection
Difficulté de détection:
1. easy (défaut)
2. medium
3. hard
Choix [1-3]:
easy: Facilement détectable (format structuré, contexte clair)medium: Détection moyenne (contexte faible, format variable)hard: Difficile à détecter (manuscrit, mal orienté, format inhabituel)
f) Méthodes de détection attendues
Méthodes de détection attendues (séparées par des virgules):
Options: regex, vlm, ner, contextual, trackare
Méthodes [regex,ner]:
regex: Détectable par expressions régulièresvlm: Détectable par Vision Language Model (manuscrit, scanné)ner: Détectable par Named Entity Recognitioncontextual: Détectable par analyse contextuelletrackare: Détectable par extraction Trackare
Exemples :
- Téléphone :
regex - Nom manuscrit :
vlm,ner - Nom après "Dr." :
regex,ner,contextual
3. Termes médicaux à préserver
Après l'annotation des PII, l'outil demande les termes médicaux qui ne doivent PAS être masqués :
=== Termes médicaux à préserver ===
Entrez les termes médicaux qui ne doivent PAS être masqués
(un par ligne, ligne vide pour terminer)
Terme médical: Médecin DIM
✓ Ajouté: Médecin DIM
Terme médical: Service de cardiologie
✓ Ajouté: Service de cardiologie
Terme médical:
Exemples de termes à préserver :
- Noms de services : "Service de cardiologie", "Urgences"
- Fonctions : "Médecin DIM", "Praticien conseil"
- Établissements génériques : "Centre Hospitalier"
- Termes médicaux : "Diabète", "Hypertension"
4. Sauvegarde
Les annotations sont sauvegardées automatiquement dans :
tests/ground_truth/pdfs/<nom_du_pdf>.annotations.json
Format de Sortie
Le fichier JSON généré contient :
{
"pdf_path": "tests/ground_truth/pdfs/001_simple_unknown_BACTERIO_23018396.pdf",
"metadata": {
"annotator": "annotator_1",
"annotation_date": "2024-01-15T10:30:00",
"document_type": "bacterio",
"page_count": 1,
"difficulty": "simple"
},
"annotations": [
{
"id": "ann_001",
"page": 0,
"type": "NOM",
"text": "DUPONT",
"bbox": null,
"context": "Dr. DUPONT a examiné le patient",
"mandatory": true,
"difficulty": "easy",
"detection_method_expected": ["regex", "ner", "contextual"]
}
],
"medical_terms_to_preserve": [
"Médecin DIM",
"Service de cardiologie"
],
"statistics": {
"total_pii": 1,
"by_type": {
"NOM": 1
}
}
}
Bonnes Pratiques
Exhaustivité
- Annoter TOUS les PII : Ne pas oublier les PII peu évidents
- Vérifier toutes les pages : Même les pages qui semblent vides
- Inclure les PII partiels : Ex: "M. D***" si le nom est partiellement masqué
Cohérence
- Utiliser les mêmes types : "NOM" pour tous les noms de famille
- Contexte significatif : Inclure suffisamment de contexte pour comprendre
- Difficulté réaliste : Évaluer objectivement la difficulté de détection
Qualité
- Texte exact : Copier-coller le texte exact du PII
- Pas de fautes : Vérifier l'orthographe
- Termes médicaux : Lister tous les termes à préserver
Types de PII - Guide de Référence
| Type | Description | Exemples |
|---|---|---|
| NOM | Nom de famille | DUPONT, MARTIN |
| PRENOM | Prénom | Jean, Marie |
| DATE_NAISSANCE | Date de naissance | 15/03/1980 |
| AGE | Âge | 45 ans |
| TEL | Téléphone | 01 23 45 67 89 |
| jean.dupont@example.com | ||
| ADRESSE | Adresse postale | 12 rue de la Paix |
| CODE_POSTAL | Code postal | 75001 |
| VILLE | Ville | Paris |
| NIR | Numéro de sécurité sociale | 1 80 03 75 001 234 56 |
| IPP | Identifiant Permanent Patient | 12345678 |
| NDA | Numéro de Dossier Administratif | 23042753 |
| RPPS | Numéro RPPS (médecin) | 10001234567 |
| FINESS | Numéro FINESS (établissement) | 750000001 |
| OGC | Numéro OGC | 257 |
| NUMERO_PATIENT | Numéro de patient | PAT-12345 |
| NUMERO_LOT | Numéro de lot | LOT-2024-001 |
| NUMERO_ORDONNANCE | Numéro d'ordonnance | ORD-12345 |
| NUMERO_SEJOUR | Numéro de séjour | SEJ-2024-001 |
| ETABLISSEMENT | Nom d'établissement | CHU de Bordeaux |
| SERVICE | Nom de service | Cardiologie |
| DATE | Date quelconque | 15/01/2024 |
| AUTRE | Autre type de PII | - |
Estimation du Temps
- Document simple (1-2 pages) : 15-30 minutes
- Document moyen (3-5 pages) : 30-60 minutes
- Document complexe (>5 pages) : 1-2 heures
Total pour 27 documents : ~20-30 heures
Validation
Après annotation, vérifier :
- Tous les PII sont annotés : Relire le document
- Types corrects : Vérifier la cohérence des types
- Contexte pertinent : Le contexte aide à comprendre le PII
- Termes médicaux : Liste complète des termes à préserver
Commandes Utiles
# Lister les documents
python tools/annotation_tool.py --list
# Annoter le prochain document
python tools/annotation_tool.py --resume
# Annoter un document spécifique
python tools/annotation_tool.py tests/ground_truth/pdfs/001_simple_unknown_BACTERIO_23018396.pdf
# Compter les documents annotés
ls tests/ground_truth/pdfs/*.annotations.json | wc -l
# Afficher les statistiques d'un document annoté
cat tests/ground_truth/pdfs/001_simple_unknown_BACTERIO_23018396.annotations.json | jq '.statistics'
Dépannage
Erreur "Fichier introuvable"
Vérifier que le PDF existe :
ls tests/ground_truth/pdfs/
Erreur "PyMuPDF not found"
Installer PyMuPDF :
pip install pymupdf
Annotations écrasées par erreur
Les annotations sont sauvegardées dans des fichiers .annotations.json séparés. Si vous écrasez par erreur, il n'y a pas de backup automatique. Faites des commits Git réguliers !
Support
Pour toute question ou problème :
- Consulter ce guide
- Vérifier les exemples dans
tests/ground_truth/pdfs/ - Contacter l'équipe projet
Bon courage pour l'annotation ! 🎯