Spaces:
Sleeping
Sleeping
File size: 8,810 Bytes
d756039 6a9d280 d756039 6a9d280 d756039 6a9d280 d756039 6a9d280 d756039 6a9d280 d756039 6a9d280 d756039 6a9d280 d756039 6a9d280 d756039 6a9d280 d756039 6a9d280 d756039 6a9d280 d756039 6a9d280 d756039 6a9d280 d756039 77d9c47 d756039 77d9c47 d756039 6a9d280 d756039 d0a3fab 6a9d280 d756039 fda1a60 388e3f2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 | """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
|