File size: 6,751 Bytes
d2df0b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9011070
d2df0b9
 
 
 
 
 
2b782d0
d2df0b9
 
 
9011070
d2df0b9
 
 
 
 
 
 
 
 
 
 
9011070
d2df0b9
 
 
 
 
2b782d0
d2df0b9
 
 
 
 
 
 
 
 
 
 
 
 
 
9011070
d2df0b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9011070
d2df0b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9011070
d2df0b9
 
9011070
d2df0b9
9011070
d2df0b9
9011070
d2df0b9
 
 
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
# Vues HTML du rapport — chantier 3 post-Sprint 97

Le rapport HTML Picarones est composé de **5 vues principales** historiques
(navigables via la nav top) et de **3 nouvelles vues thématiques** (chantier 3)
qui s'affichent comme cartes dans la vue `analyses`.

Toutes les vues sont **adaptive** : une vue/section ne s'affiche que si elle
a du signal à montrer (au moins une sous-section avec données exploitables).

## Vues historiques (navigation principale)

| Vue | Template | Contenu |
|---|---|---|
| `ranking` | `view_ranking.html` | Classement moteurs (CER/WER médian/moyen, stratifié) |
| `gallery` | `view_gallery.html` | Galerie d'images du corpus |
| `document` | `view_document.html` | Vue détaillée par document (diff GT vs hyp) |
| `analyses` | `view_analyses.html` | Tableau de bord analytique (graphes Chart.js) |
| `characters` | `view_characters.html` | Analyse caractère par caractère (confusion) |

## Sous-sections de `view_analyses.html`

Cette vue agrège **tous les renderers spécialisés** sous forme de cartes
pleine largeur, avec un patron commun :

```jinja2
{% if some_html %}
<div class="chart-card" style="grid-column:1/-1">
  {{ some_html }}
</div>
{% endif %}
```

Si `some_html` est `""` (adaptive masking parce qu'aucune donnée), la
carte n'apparaît pas.

### Sous-sections historiques (Sprints 5+10+39+42+55-60+86+87+89)

| Bloc | Origine | Données nécessaires |
|---|---|---|
| Distribution CER | Sprint 2 | toujours |
| Radar profil moteur | Sprint 2 | ≥ 1 moteur |
| CER par document | Sprint 2 | toujours |
| Temps d'exécution | Sprint 2 | durations propagées |
| Qualité image ↔ CER | Sprint 5 | `aggregated_image_quality` |
| Taxonomie | Sprint 5 | `aggregated_taxonomy` |
| Courbes de fiabilité | Sprint 7 | `aggregated_calibration` |
| NER (P/R/F1) | Sprint 41 | `aggregated_ner` (opt-in spaCy) |
| Calibration ECE/MCE | Sprint 43 | `aggregated_calibration` |
| Stratification | Sprint 46 | `script_type` par doc |
| Profil philologique | Sprint 62 | `aggregated_philological` |
| Recherchabilité fuzzy | Sprint 86 | `aggregated_searchability` |
| Séquences numériques | Sprint 86 | `aggregated_numerical_sequences` |
| Lisibilité (Δ Flesch) | Sprint 87 | `aggregated_readability` |
| Spécialisation inter-moteurs | Sprint 89 | ≥ 2 moteurs avec taxonomie |
| Analyse inter-moteurs | Sprint 37 | ≥ 2 moteurs |
| Matrice de corrélation | Sprint 7 | toujours |

### Sous-sections du chantier 3 (post-Sprint 97)

3 nouvelles vues thématiques composables qui regroupent les **16 renderers
orphelins** identifiés dans l'audit initial :

#### Vue « Coût et performance » (`build_economics_view_html`)

Module : [`picarones/reports/html/views/economics.py`](../picarones/reports/html/views/economics.py).
Activée si :
- `engine_reports` fournis avec durations non nulles.
- (Optionnel) `extra_html_blocks` pour cost projection / marginal cost.

Sous-sections :
- **Throughput effectif** : pages/h **utilisable** (intégrant 5 s/erreur
  HTR-United), depuis `picarones.domain.throughput`.

#### Vue « Taxonomie avancée » (`build_advanced_taxonomy_view_html`)

Module : [`picarones/reports/html/views/advanced_taxonomy.py`](../picarones/reports/html/views/advanced_taxonomy.py).
Activée si ≥ 2 moteurs ont une `aggregated_taxonomy`.

Sous-sections :
- **Comparaison miroir** : leader CER vs runner-up, diagramme miroir
  par classe d'erreur, tableau de récupérabilité éditoriale.
- **Co-occurrence de classes** (opt-in) : heatmap Jaccard inter-classes.
- **Distribution intra-document** (opt-in) : heatmap classe × position.
- **Modernisation lexicale** (opt-in) : top tokens GT modernisés.

#### Vue « Diagnostic approfondi » (`build_diagnostics_view_html`)

Module : [`picarones/reports/html/views/diagnostics.py`](../picarones/reports/html/views/diagnostics.py).
Activée si `detect_levers()` produit au moins un levier (typique sur
un bench standard) ou si données opt-in fournies.

Sous-sections :
- **Leviers d'amélioration** : factuels (jamais prescriptifs), depuis
  `picarones.domain.levers`.
- **Comparaison historique** (opt-in) : encart « ce corpus est-il habituel ? ».
- **Profil d'image du corpus** (opt-in) : complexité paléographique +
  homogénéité.
- **Évolution longitudinale** (opt-in) : table par moteur sur historique.
- **Stabilité multi-runs** (opt-in) : variance entre runs successifs.
- **Lignes les pires** (opt-in) : top 20 lignes avec le pire CER.

## Vues spécifiques (rapport autonome)

Deux vues du chantier 3 ne s'intègrent pas au rapport classique mais
servent à composer des **rapports autonomes** :

### Vue « Pipeline composée » (`build_pipeline_view_html`)

Module : [`picarones/reports/html/views/pipeline.py`](../picarones/reports/html/views/pipeline.py).

Utilisée par `picarones pipeline run` (ou par tout outil qui consomme un
`PipelineBenchmarkResult`). Sous-sections :

- **Résumé pipeline** (`build_pipeline_summary_html` + `build_pipeline_steps_table_html`).
- **DAG visuel** (`pipeline_dag_render.py` Sprint 95) — opt-in.
- **Absorption d'erreur** par jonction (`error_absorption_render.py`
  Sprint 94) — opt-in.
- **Comparaison incrémentale** par slot (`incremental_comparison_render.py`
  Sprint 96) — opt-in.
- **Audit des modules** contribués (`module_audit_render.py`
  Sprint 97) — opt-in.

### Vue « Robustesse projetée » (`build_robustness_view_html`)

Module : [`picarones/reports/html/views/robustness.py`](../picarones/reports/html/views/robustness.py).

Utilisée par le workflow `picarones robustness`. Sous-sections :

- **Déficit projeté de robustesse** (`robustness_projection_render.py`
  Sprint 88).

## Convention de rendu partagée

Toutes les 5 vues du chantier 3 utilisent le même shell `_render_view_shell()`
défini dans `economics.py` :

- Titre `<h3>` + note explicative en tête.
- Une `<details>` collapsible par sous-renderer.
- Premier `<details>` ouvert, les autres fermés (réduit le scroll initial).
- Anti-injection HTML systématique via `xml.sax.saxutils.escape`.

## Code source

- [`picarones/reports/html/generator.py`](../picarones/reports/html/generator.py)
  — orchestrateur Jinja2 qui appelle les renderers et passe leurs sorties
  au template.
- [`picarones/reports/html/views/`](../picarones/reports/html/views/) — 5 modules de
  composition (chantier 3).
- [`picarones/reports/html/renderers/`](../picarones/reports/html/renderers/) — 26 renderers
  atomiques.
- [`picarones/reports/html/templates/view_analyses.html`](../picarones/reports/html/templates/view_analyses.html)
  — template Jinja2 qui inclut les blocs.
- [`tests/test_views.py`](../tests/test_views.py) — tests d'intégration
  des 5 vues du chantier 3.