Claude
docs: refonte Diataxis + 8 documents institutionnels (S60)
d0a3fab unverified
Raw
History Blame
8.81 kB
"""Métriques officielles Picarones — Cercle 2.
Ce package contient l'ensemble des mesures et analyses qui calculent,
agrègent ou interprètent des métriques sur un corpus. Il dépend du
cercle 1 (``picarones.core``) qui définit les abstractions, et est
consommé par le cercle 3 (``picarones.report``, ``picarones.cli``,
``picarones.web``) qui présente les résultats.
Sous-modules
------------
Coeur :
- :mod:`metrics` compute_metrics (CER/WER/MER/WIL via jiwer)
- :mod:`statistics` Wilcoxon, Friedman, Nemenyi, Pareto, CDD
- :mod:`runner` run_benchmark — orchestration parallèle
- :mod:`builtin_hooks` 12 hooks doc + 12 agrégateurs natifs
- :mod:`builtin_metrics` enregistrement métriques dans le registry
- :mod:`alto_metrics` métriques jonction TEXT/ALTO
- :mod:`normalization` profils Unicode
Erreurs et taxonomie :
- :mod:`confusion` matrice de confusion Unicode
- :mod:`char_scores` scores ligatures/diacritiques
- :mod:`taxonomy` taxonomie 9 classes d'erreurs
- :mod:`taxonomy_comparison` comparaison taxonomique miroir
- :mod:`taxonomy_cooccurrence` Jaccard inter-classes
- :mod:`taxonomy_intra_doc` heatmap classes × position
Structure et lignes :
- :mod:`structure` blocs/lignes/mots
- :mod:`line_metrics` distribution CER par ligne (Gini, percentiles)
- :mod:`worst_lines` lignes pires globales
Fiabilité et calibration :
- :mod:`calibration` ECE, MCE, reliability bins
- :mod:`reliability` IAA Cohen κ + multirun stability
- :mod:`hallucination` détection hallucinations VLM
- :mod:`robustness` courbes CER vs dégradation
- :mod:`robustness_projection` projection sur corpus réel
Image et difficulté :
- :mod:`image_quality` contraste, bruit, flou…
- :mod:`image_predictive` complexité paléographique
- :mod:`difficulty` score difficulté intrinsèque
Contenu et lisibilité :
- :mod:`searchability` recherchabilité fuzzy (Levenshtein)
- :mod:`numerical_sequences` préservation dates/cotes/numéraux
- :mod:`rare_tokens` rappel sur tokens rares
- :mod:`readability` Δ Flesch (sur-normalisation)
Structure ALTO et entités :
- :mod:`layout` F1 layout par type de région
- :mod:`reading_order` F1 ordre de lecture (ICDAR 2015)
- :mod:`ner`, :mod:`ner_backends`
- :mod:`error_absorption` correction vs introduction par jonction
Inter-moteurs et historique :
- :mod:`inter_engine` divergence taxonomique + oracle gap
- :mod:`specialization` spécialisation inter-moteurs
- :mod:`baseline_comparison` comparaison à l'historique
- :mod:`longitudinal` régression linéaire + change-point
- :mod:`incremental_comparison` ANOVA-like par slot
- :mod:`history` historique SQLite
Économie et opération :
- :mod:`pricing` table tarifaire
- :mod:`throughput` pages/h effectif
- :mod:`cost_projection` projection à volume cible
- :mod:`marginal_cost` coût par erreur évitée
Philologie historique :
- :mod:`mufi` couverture MUFI (médiéval)
- :mod:`abbreviations` signes d'abréviation Capelli
- :mod:`unicode_blocks` précision par bloc Unicode
- :mod:`early_modern_typography` ligatures imprimées XVIᵉ-XVIIIᵉ
- :mod:`modern_archives` marqueurs XIXᵉ-XXᵉ
- :mod:`roman_numerals` numéraux romains
- :mod:`lexical_modernization` sur-normalisation lexicale
Pipelines composées (axe B) :
- :mod:`pipeline_benchmark`, :mod:`pipeline_comparison`,
:mod:`pipeline_spec_loader`
Aide à la décision :
- :mod:`levers` leviers d'amélioration factuels
- :mod:`equivalence_profile` curseur fin équivalences diplomatiques
- :mod:`module_policy` manifest + audit modules contribués
Câblages adaptifs (suffixe ``_hooks``) :
- :mod:`readability_hooks`, :mod:`searchability_hooks`,
:mod:`numerical_sequences_hooks`, :mod:`philological_hooks` —
adaptive masking document-par-document, consommés par
:mod:`builtin_hooks`. Ces modules sont des couches d'adaptation
entre le calcul pur (sans I/O) et le runner principal (avec
agrégation par moteur).
Moteur narratif :
- :mod:`narrative` (sous-package) : arbiter, registry, renderer,
18 détecteurs en 6 familles. Le modèle de données (``Fact``,
``FactType``, ``DetectorRegistry``) vit en cercle 1 dans
:mod:`picarones.core.facts`.
Voir :doc:`docs/explanation/architecture.md` pour la cartographie complète et
la règle de dépendance des 3 cercles.
"""
# ──────────────────────────────────────────────────────────────────────────
# Sprint A3 (renforce le respect de la règle Cercle 2 → Cercle 1
# uniquement) — la cérémonie d'enregistrement des métriques typées dans
# le registre Sprint 34 a été déplacée ici depuis ``core/pipeline.py``
# qui violait la règle.
#
# Tout consommateur qui veut utiliser ``compute_at_junction``
# (``picarones.core.metric_registry``) doit avoir importé
# ``picarones.measurements`` au moins une fois pour que les décorateurs
# ``@register_metric`` aient été exécutés. C'est le cas par défaut dans
# le pipeline standard ; les notebooks isolés peuvent ajouter
# ``import picarones.measurements`` (suivi d'un commentaire d'exception
# ruff sur la ligne d'import si leur linter signale un import inutilisé).
#
# Sans ces imports, ``compute_at_junction`` trouverait un registre vide
# et ne calculerait rien aux jonctions.
# ──────────────────────────────────────────────────────────────────────────
# Sprint 34 : cer / wer / mer / wil + stub TEXT→ALTO
from picarones.measurements import builtin_metrics # noqa: F401
# Sprints 55-60 : métriques philologiques.
from picarones.measurements import abbreviations # noqa: F401
from picarones.measurements import early_modern_typography # noqa: F401
from picarones.measurements import modern_archives # noqa: F401
from picarones.measurements import mufi # noqa: F401
from picarones.measurements import roman_numerals # noqa: F401
from picarones.measurements import unicode_blocks # noqa: F401
# Sprint 53 : reading order F1. Sprints 38, 52 : NER, readability.
from picarones.measurements import ner # noqa: F401
from picarones.measurements import readability # noqa: F401
from picarones.measurements import reading_order # noqa: F401
# Chantier 1 (post-Sprint 97) : métriques (ALTO, ALTO) pour évaluer
# les reconstructeurs ALTO contre une GT ALTO du document.
from picarones.measurements import alto_metrics # noqa: F401
# ──────────────────────────────────────────────────────────────────────────
# Sprint « zéro dette actionnable » (mai 2026) — modules sans appel
# automatique par le runner OCR principal mais qui font partie de l'API
# publique de ``picarones.measurements``. L'import ici les rend
# accessibles en ``from picarones.measurements import X`` et garantit
# qu'aucun ne devient « test-only » silencieusement (cf.
# ``tests/architecture/test_module_coverage.py``).
#
# Distinction de scope :
# - Modules de calcul utilisés via les renderers HTML composables
# (l'utilisateur les compose lui-même selon son use case) :
from picarones.measurements import baseline_comparison # noqa: F401 # historique SQLite
from picarones.measurements import cost_projection # noqa: F401 # volume cible utilisateur
from picarones.measurements import equivalence_profile # noqa: F401 # curseur HTML
from picarones.measurements import error_absorption # noqa: F401 # jonction pipeline composée
from picarones.measurements import layout # noqa: F401 # GT ALTO requise (axe B)
from picarones.measurements import longitudinal # noqa: F401 # historique SQLite
from picarones.measurements import marginal_cost # noqa: F401 # paires de moteurs
from picarones.measurements import module_policy # noqa: F401 # outil d'audit
from picarones.measurements import ner_backends # noqa: F401 # factory backends NER
from picarones.measurements import rare_tokens # noqa: F401 # corpus-wide
from picarones.measurements import reliability # noqa: F401 # multi-runs
from picarones.measurements import taxonomy_cooccurrence # noqa: F401 # depuis taxonomy
from picarones.measurements import taxonomy_intra_doc # noqa: F401 # depuis taxonomy