From ca9194deb6aa1235d16bfd9a710d06eb96ed3eae Mon Sep 17 00:00:00 2001 From: Axelle Abbadie Date: Tue, 12 May 2026 23:22:20 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20mise=20=C3=A0=20jour=20README=20et=20RO?= =?UTF-8?q?ADMAP=20pour=20v0.1.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - README refactorisé : workflow, NER, surlignage, marqueurs, crédits - ROADMAP : Phase 8 terminée, questions ouvertes #1/#3/#5/#10 tranchées - i18n et Meld Encrypt ajoutés en Phase 10 --- README.md | 8 ++++---- ROADMAP.md | 58 ++++++++++++++++++++++++++++-------------------------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 4bb2457..3c65273 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ Le moteur de **reconnaissance d'entités nommées** détecte prénoms, noms, lie **Modèle :** `Xenova/bert-base-multilingual-cased-ner-hrl` via `transformers.js`. Exécution 100 % locale. Téléchargements uniques au premier usage : WASM (~19 Mo) + modèle NER (~66 Mo). **Fonctionnement hors-ligne après le premier téléchargement.** -**Paramètres (onglet NER du panneau) :** +**Paramètres (onglet NER du panneau)** : - **Seuil de confiance** (0,50–1,00) : augmenter réduit les faux positifs - **Mots fonctionnels exclus** : liste éditable des tokens à toujours ignorer ("de", "du", "la"…) @@ -132,8 +132,8 @@ Dans les fichiers exportés, les pseudonymes sont encadrés de marqueurs `{{Pier - Tout traitement est **local** — aucun texte de transcription n'est envoyé à un serveur externe - Le modèle NER s'exécute dans Obsidian via WASM, sans appel réseau -- **Exception documentée :** "Pseudonymiser avec Coulmont" envoie le *prénom de remplacement* (pas le contenu de la transcription) à `coulmont.com` -- Les tables de correspondance ne sont jamais incluses dans les exports pseudonymisés +- **Exception documentée :** "Pseudonymiser avec Coulmont" propose des *prénoms de remplacement* à partir d'une requête du *prénom à pseudonymiser* (pas le contenu de la transcription) à l'outil `coulmont.com/bac`. Sur son site web, B. Coulmont précise que "recherches ne sont pas enregistrées". +- Les tables de correspondance ne sont jamais incluses dans les exports pseudonymisés. --- @@ -172,7 +172,7 @@ src/ | 0–6 | ✅ | Parsers · Moteur · Commandes · Portées · Surlignage · Validation | | 7 — Coulmont | ✅ | Suggestions de prénoms équivalents · Import JSON/CSV | | 8 — Panneau latéral | ✅ | 4 onglets · NER embarqué · Wizard · Annulation · Surlignage export | -| 9 — Dictionnaires NER | 🔄 | Dictionnaires de remplacement pour lieux/institutions | +| 9 — Dictionnaires de candidats NER & spaCy | 🔄 | Dictionnaires de d'identification des mots candidats pour lieux/institutions à pseudonymiser | | 10 — Affinage | ⏳ | Stabilisation v0.2.0 | | 11 — Fonctions EMCA | ⏳ | Navigation tours · Correction Jefferson/ICOR · Export ELAN | diff --git a/ROADMAP.md b/ROADMAP.md index 4497c02..8c83623 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -4,21 +4,20 @@ Plugin Obsidian de pseudonymisation et correction de transcriptions (conventions Chaque phase produit quelque chose de testable. Les critères d'acceptation renvoient aux sections de SPECS.md. -## État actuel (mai 2026) +## État actuel (mai 2026) — v0.1.0 -**Phases 0 à 7 terminées.** La Phase 8 (interface complète) est la prochaine cible. +**Phases 0 à 8 terminées.** La Phase 9 (dictionnaires de remplacement pour lieux/institutions) est la prochaine cible. -Décision architecturale adoptée en mai 2026 : la **détection des entités identifiantes** reposera sur du **NER** (reconnaissance d'entités nommées) plutôt que sur des dictionnaires lexicaux exhaustifs. Les dictionnaires (Coulmont, etc.) restent des ressources de **remplacement** (candidats de substitution), pas de détection. La detection par listes est insuffisante pour les lieux (ambiguïté contextuelle : "Florence" la personne vs la ville). +Décision architecturale adoptée en mai 2026 : la **détection des entités identifiantes** repose sur du **NER** (`transformers.js` + `bert-base-multilingual-cased-ner-hrl`) plutôt que sur des dictionnaires lexicaux exhaustifs. Les dictionnaires restent des ressources de **remplacement** (candidats de substitution), pas de détection. ``` -✅ Phases 0–7 Parsers · Moteur · UI de base · Portées · Surlignage · Validation · Coulmont -🔄 Phase 8 Interface complète — panneau latéral 4 onglets -⏳ Phase 9 Détection NER + dictionnaires de remplacement (v0.1.0) +✅ Phases 0–8 Parsers · Moteur · UI · Portées · Surlignage · Validation · Coulmont · Panneau · NER · Wizard +🔄 Phase 9 Dictionnaires de remplacement (lieux/institutions) (v0.1.0) ⏳ Phase 10 Affinage et stabilisation (v0.2.0) ⏳ Phase 11 Fonctions d'analyse interactionnelle et conversationnelle (v1.0.0) ``` -La publication sur le répertoire communautaire Obsidian se fait **au fil des versions** (déjà en cours via PR #12766). +La publication sur le répertoire communautaire Obsidian se fait **au fil des versions** (PR #12766 en cours de validation). --- @@ -159,24 +158,26 @@ Objectif : générer des suggestions de prénoms sociologiquement équivalents e --- -## 🔄 Phase 8 — Interface complète (panneau latéral 4 onglets) +## ✅ Phase 8 — Interface complète (panneau latéral 4 onglets) Objectif : interface de travail complète pour le workflow pseudonymisation. -- [ ] Vue latérale complète : 4 onglets **Occurrences / Mappings / Dictionnaires / Exports** (§10.3) - - Onglet **Occurrences** : liste des occurrences candidates, contexte, boutons Valider / Ignorer / Faux positif, prévisualisation diff - - Onglet **Mappings** : tableau des règles actives — modifier source, remplacement, catégorie, portée, priority, désactiver - - Onglet **Dictionnaires** : liste des dictionnaires chargés, activation/désactivation par portée, commande import - - Onglet **Exports** : choix du format (SRT/CHA/MD/TXT), vérification absence de table dans l'export (§14.1) -- [ ] Rapport de pseudonymisation (§14.3) -- [ ] `correction/checker.ts` : vérification des conventions Jefferson/ICOR -- [ ] Suggestions de correction au survol des symboles de convention -- [ ] **Exploitable dans Obsidian** : - - Panneau latéral complet accessible via l'icône ruban - - Workflow de bout en bout : ouvrir → scanner → valider → pseudonymiser → exporter sans table - - Tester sur `entretien_01.srt` et `entretien_02.cha` +- [x] Vue latérale 5 onglets : **Candidats / Mappings / Dictionnaires / Exports / NER** + - Onglet **Candidats** (ex-Occurrences) : scanner le fichier + identifier des candidats NER · Valider / Ignorer / Faux positif · Appliquer + - Onglet **Mappings** : tableau des règles actives — modifier, supprimer, ajouter + - Onglet **Dictionnaires** : import de fichiers `.dict.json` + - Onglet **Exports** : pseudonymiser + exporter · exporter la table de correspondance + - Onglet **NER** : seuil de confiance + mots fonctionnels exclus (visible si NER activé) +- [x] Surlignage tri-couleur dans l'éditeur : orange (sources) · vert souligné (remplacements) · bleu (candidats NER) +- [x] Surlignage actif dans les fichiers exportés `.pseudonymized.*` +- [x] Clic droit → Annuler la pseudonymisation (sur termes verts) +- [x] Marqueurs `{{...}}` activés par défaut dans les remplacements en direct et les exports +- [x] Wizard onboarding (3 étapes) avec téléchargement WASM et import de dictionnaires +- [x] NER embarqué via `transformers.js` + `bert-base-multilingual-cased-ner-hrl` +- [x] Filtrage des sous-termes de règles composées (Saint-Jean-de-Luz filtre Jean/Luz en NER) +- [ ] `correction/checker.ts` : vérification des conventions Jefferson/ICOR *(reporté Phase 10)* -**Testable :** workflow complet depuis l'ouverture d'un fichier jusqu'à l'export pseudonymisé sans table de correspondance. +**Livré en v0.1.0.** --- @@ -199,7 +200,7 @@ Objectif : détecter automatiquement les entités identifiantes (prénoms, noms, - [ ] `mappings/ConflictDetector.ts` : détection des chevauchements entre spans NER et règles manuelles (§8.5) - [ ] Dictionnaires de **remplacement** pour lieux (`cities.json` avec `sizeClass`) et institutions - [ ] `adapters/geoapi.ts` : GeoAPI INSEE → `DictionaryEntry[]` avec `sizeClass` -- [ ] `ambiguous.json` : tokens historiquement ambigus (Nancy, Florence, Lorraine…) — signalement prioritaire +- [ ] `ambiguous.json` : tokens historiquement ambigus — signalement prioritaire - [ ] Amélioration modèle : évaluer un modèle français spécifique (CamemBERT-NER) **Testable (v0.1.0) :** scan NER → entités surlignées en bleu → clic droit → règle créée → pseudonymisation. @@ -214,9 +215,9 @@ Objectif : consolider l'ensemble des features en place avant d'aborder les fonct - [ ] Tests de non-régression Phase 4 (§18.2) maintenus verts avec les règles NER actives - [ ] Correction des conventions Jefferson / ICOR : suggestions au survol, highlighting éditeur - [ ] Performance : mesurer et optimiser le temps de scan NER sur un fichier de 500 tours -- [ ] Documentation utilisateur (README + guide de démarrage rapide pour chercheurs ICAR) +- [ ] **Internationalisation (i18n)** : externaliser toutes les chaînes UI dans un fichier de traduction (`locales/fr.json`, `locales/en.json`) — architecture à définir (standard Obsidian ou `i18next`) +- [ ] Intégration [Meld Encrypt](https://github.com/meld-cp/obsidian-encrypt) dans l'onglet Exports pour le chiffrement des tables de correspondance et des exports pseudonymisés - [ ] Trancher les questions ouvertes persistantes (SPECS §20) -- [ ] Licence : MIT ou EUPL (selon contraintes CNRS) **Testable (v0.2.0) :** workflow de bout en bout stable sur un corpus réel de 10 entretiens. @@ -235,7 +236,7 @@ Périmètre à définir lors de la Phase 10 — pistes envisagées : - Couplage audio optionnel via fichier local (Obsidian API `app.vault`) — synchronisation tour ↔ segment audio - Compatibilité avec le JSON d'échange Whispurge / Sonal pi (SPECS §20.6) -**Testable (v1.0.0) :** un chercheur ICAR peut ouvrir une transcription CHAT, la naviguer tour par tour, corriger les conventions, pseudonymiser, annoter thématiquement, et exporter vers ELAN — sans quitter Obsidian. +**Testable (v1.0.0) :** un chercheur peut ouvrir une transcription CHAT, la naviguer tour par tour, corriger les conventions, pseudonymiser, annoter thématiquement, et exporter vers ELAN — sans quitter Obsidian. --- @@ -256,12 +257,13 @@ Ces fonctionnalités sont identifiées comme utiles mais non planifiées dans le | # | Question | Statut | |---|---|---| -| 1 | Modifier les fichiers originaux ou fonctionner uniquement par export ? | À trancher | +| 1 | Modifier les fichiers originaux ou fonctionner uniquement par export ? | **Décidé** — export en `.md` pour relire dans Obsidian, puis re-export dans le format inscrit dans les métadonnées du fichier source. L'onglet Exports affiche conditionnellement une option de chiffrement via [Meld Encrypt](https://github.com/meld-cp/obsidian-encrypt) quand on est dans un `*.pseudonymized.*`. | | 2 | Tables de correspondance dans le vault ou hors vault par défaut ? | À trancher | -| 3 | Chiffrement des tables dès la v1 ? | À trancher | +| 3 | Chiffrement des tables dès la v1 ? | **Décidé** — recommander le plugin [Meld Encrypt](https://github.com/meld-cp/obsidian-encrypt) pour le chiffrement des tables et des exports. Intégration dans l'onglet Exports (Phase 10). | | 4 | Métadonnées CHAT dès le MVP ou à partir de la v0.3 ? | À trancher | -| 5 | NER avancé plus tard, ou rester sur dictionnaires + regex + validation humaine ? | **Décidé : NER (Phase 9)** — les dictionnaires servent au remplacement, pas à la détection | +| 5 | NER avancé plus tard, ou rester sur dictionnaires + regex + validation humaine ? | **Décidé : NER (Phase 9)** — l'objectif du dictionnaire (détection ou remplacement) est déterminé à l'import. Le NER assure la détection ; les dictionnaires fournissent les candidats de substitution. | | 6 | Compatibilité exacte à viser avec les JSON de Sonal pi / Whispurge ? | À explorer | | 7 | Couplage audio optionnel via fichier local (API Obsidian) ? | À explorer | | 8 | Export ELAN ou Praat ? | À explorer | | 9 | Liste canonique pour `ambiguous.json` (Nancy, Florence, Lorraine…) ? | À constituer | +| 10 | Internationalisation (i18n) du plugin ? | **Décidé** — l'architecture doit permettre la traduction de l'interface. Toutes les chaînes UI doivent être externalisées dans un fichier de traduction. Implémentation en Phase 10. |