Ramener les ligatures « œ » et « æ » à « oe » et « ae »

L'Œuvre de Zola, que la BnF écrit avec la ligature, était introuvable à
qui tape « oeuvre » : NFD sépare les accents mais laisse les ligatures.

Table explicite plutôt que NFKD, qui aurait aussi transformé les exposants,
les chiffres romains et les espaces insécables. Une normalisation de
recherche doit rester prévisible.

Sept colonnes normalisées en dépendent, dont cinq portent une unicité. Le
rattrapage au démarrage est donc étendu aux envies, séries, revues et
numéros — qui ne calculaient leurs formes qu'à l'écriture — et refuse toute
collision AVANT d'écrire : sinon l'exception tomberait au démarrage et le
serveur ne se lancerait plus.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-19 22:25:59 +02:00
co-authored by Claude Opus 5
parent ca0a9dc18c
commit b97cf33494
7 changed files with 293 additions and 36 deletions
@@ -106,6 +106,12 @@ public class RapprochementAuteursTests
[InlineData(" Zola, Émile ", "zola emile")]
[InlineData("Saint-Exupéry", "saint exupery")]
[InlineData("L'Écume", "l ecume")]
// Ligatures : NFD ne les défait pas, une table explicite s'en charge (2026-08-19).
[InlineData("L'Œuvre", "l oeuvre")]
[InlineData("Sœur Emmanuelle", "soeur emmanuelle")]
[InlineData("Ex æquo", "ex aequo")]
// La ligature vaut deux lettres, elle ne coupe donc PAS le mot en deux.
[InlineData("cœur", "coeur")]
[InlineData("", "")]
[InlineData(null, "")]
public void La_normalisation_met_a_plat_casse_accents_et_ponctuation(string? brut, string attendu)