# Algorithme de césure

Un algorithme de césure est un ensemble de règles qui décide à quels endroits peut être réalisée la césure d'un mot, c'est-à-dire à quels endroits un mot peut être coupé pour être réparti sur deux lignes, avec un trait d'union. Par exemple, un algorithme de césure peut décider que prochainement peut être cassé en pro-chainement ou prochai-nement mais pas proc-hainement.
Quelques règles de base peuvent être trouvées dans "On Hyphenation – Anarchy of Pedantry". Parmi tous les algorithmes s'attaquant au problème de la césure, celui mis en œuvre dans le système de composition TeX est le plus largement utilisé. Il est bien documenté dans les deux premiers volumes de Computers and Typesetting ainsi que dans la thèse de doctorat de Franklin Mark Liang. Le but du travail de Liang a été d'obtenir un algorithme aussi précis qu'il le pourrait techniquement et de garder une version réduite de toutes les exceptions du dictionnaire.
Dans les motifs originaux de césure de TeX pour l'anglais américain, la liste d'exceptions contient seulement 14 mots.

## Fonctionnement et historique

Il existe basiquement deux méthodes afin de décrire un algorithme de césure : définir et appliquer des règles de césures, ou alors définir un dictionnaire exhaustif où chaque mot y figurera avec les points de césures admises ainsi que ses formes dérivées.
Si l'une des raisons de la complexité de la césure en anglais se situe dans son nombre d'exceptions et des différences de césure entre dialectes de l'anglais, la raison de sa complexité en français réside dans le nombre de formes dérivées, presque absentes en anglais.

### Historique
#### Premiers pas

Le premier livre sur la typographie en anglais à mentionner le besoin de césure est le Mechanick Exercices (1683) de Joseph Moxon. Cependant, il ne donnait aucune règle pour la césure. Un certain nombre de dictionnaires sont apparus mais étaient la plupart du temps des listes de mots.
Le premier programme de césure automatisé apparaît pour le premier système de typographie informatique$^,$$^,$ baptisé système BBR selon les initiales de l'équipe française qui en dépose le brevet en 1954 : Georges Bafour; ingénieur en chef des Manufactures de l'Etat à l'Imprimerie nationale, François-Henri Raymond, fondateur de la Société d'Electronique et d'Automatisme (laquelle met au point les premiers ordinateurs français) et André Blanchard qui joue ici le rôle de prête-nom pour le rédacteur réel du brevet, qui est Louis Chéreau (ce dernier ne pouvant signer puisqu'il travaille au service des brevets de la société LMT qui produit le Lumitype). Le système de composition BBR est capable de produire des textes justifiés, ce qui représente alors une prouesse technique, mais il n'aura pas le succès commercial espéré par ses promoteurs.
Le programme de césure du système BBR s'appuyait sur les règles basiques de césure des mots français pour fonctionner. Il avait alors pour avantage d'être simple et de pouvoir diviser correctement la plupart des mots. Les inventeurs continuent de le perfectionner dans les années suivantes, en travaillant à simplifier les règles typographiques qui le gouverne, d'autant que celles-ci sont implémentées selon une logique cablée « en dur » dans le système. Or, il ne gérait pas les exceptions : ce qui ne représentait pas un obstacle pour le français, s'avéra rédhibitoire pour la langue anglaise, dont les règles de césure sont beaucoup moins systématiques. Cette limitation, associée à l'évolution rapide de l'informatique et la réticence des imprimeurs français traditionnels, condamnèrent l'avenir du système BBR comme système de typographie professionnel.

#### La thèse de F. Liang

En 1983 dans le cadre de sa thèse de doctorat en informatique à l'université de Stanford, aux États-Unis, Frank Liang s'est intéressé à la question et a conçu en WEB un programme efficace, nommé Patgen, pour la langue anglaise dont il décrit le fonctionnement dans sa thèse. Son idée a été de combiner les deux méthodes en utilisant un système de règles de césure et en créant un dictionnaire de sous-mots, ou dit de motifs (pattern). Ce dictionnaire est séparé en deux parties, une partie comporte un petit nombre de motifs correspondant aux règles et un grand nombre correspondant aux exceptions.
Ce travail de thèse intitulé « Word hy-phen-a-tion by com-put-er » (en français, Cé-sure par or-di-na-teur) est réalisé sous la direction Donald Knuth, qui est lui-même le père du logiciel de typographie, TeX. Depuis 1977, Knuth avait inclus dans TeX un premier algorithme de césure basé sur 3 règles de bases (détection de préfixes, de suffixes ou de formes voyelle-consonne-consonne-voyelle). L'algorithme de Liang, parfois dénommé Knuth-Liang sera implémenté dans TeX puis LaTeX.

#### Adaptation de l'algorithme de Liang au français

Plus tard, entre 1984 et 1985, alors que Jacques Désarménien se trouve à Stanford, il travaille sur les tables de motifs des mots en français en se basant sur les travaux et l'algorithme de Liang. Il publiera ensuite ses résultats dans plusieurs articles tels que « La division par ordinateur des mots français : application à TeX » ou encore « How to run T$_E$X in a French environment : hyphenation, fonts, typography ». Il créa notamment un dictionnaire exhaustif des motifs de tous les mots existants ainsi que des exceptions.

### Fonctionnement
#### Algorithme BBR (1954)

La méthode utilisée alors était assez simple.
: les césures étaient autorisées n'importe où dans un mot sauf parmi les combinaisons de lettres suivantes.
* Avant deux consonnes, deux voyelles ou un x.
* Entre deux voyelles, une consonne et un h, un e et un r, un s et un autre s.
* Après deux consonnes où la première n'est pas l, m, n, r ou s.
* Après c, j, q, v, une consonne et un w, mm, lr, nb, nf, nl, nm, nn ou nr.
Cette règle fonctionnait relativement bien pour le français. En revanche, testé sur un dictionnaire anglais, il arrive, selon Liang, à trouver 70% des césures mais fait tout autant des erreurs de césure, Liang donne des exemples de mots mettant en échec cet algorithme : fundraising, algorithm...

#### Algorithme de Frank Liang (1983)

L'implémentation dans TeX de l'algorithme de Frank Liang, le plus utilisé, procède en deux étapes afin de trouver une césure correcte :
Avant toute chose, TeX vérifie que le mot concerné n'est pas une exception en regardant dans un dictionnaire définissant les points de césure pour les mots spéciaux. S'il n'en trouve pas, il passe à la reconnaissance de motifs (patterns). Ces motifs sont contenus dans un autre dictionnaire et correspondent à des ensembles de lettres redondants.
Avant toute chose, TeX entoure le mot concerné de marqueurs spéciaux. Prenons le mot coquelicot. Avec ces marqueurs, cela donne : . c o q u e l i c o t .. Ensuite il découpe le mot en sous-mots de longueur k, le découpage précédent correspondant à une longueur 1. Voici à titre d'illustration le découpage en longueur 2 et puis 3 :
. c co oq qu ue el li ic co ot t .
. co oqu que uel eli lic ico cot ot .
et ainsi de suite.
Chaque sous-mot (ou motif) de longueur k possède k+1 coefficients entier de poids de césure. Ce poids permet de savoir où il est préférable de couper le mot. Le coefficient est un chiffre compris entre 0 et 9 et est placé entre chaque lettre. Un poids de 0 signifie qu'il est absolument interdit de couper entre ces deux lettres, un poids pair désigne une interdiction de couper (comme 0) et un poids impair une préférence pour couper. Si deux motifs s'affrontent, celui ayant le plus de poids l'emporte.
Par exemple dans les mots périscope et discophile, nous avons le pattern scop. Cependant ils se coupent différemment, pé-ri-scope et dis-co-phile. Les motifs seront alors $_1$s$_2$c$_0$o$_0$p$_0$, $_0$i$_2$s$_3$c$_0$o$_0$p$_0$e$_0$ et $_0$d$_0$i$_3$s$_4$c$_0$o$_0$p$_0$. Par défaut le 1er schéma s'applique. S'il y a concurrence avec un autre motif, on choisit le motif avec les coefficients les plus grands.
Comme ces motifs sont dépendants des mots, il est donc impératif d'avoir un dictionnaire de mots (et d'exceptions) propre à chaque langue.

##### Structure de donnée

Pour l'implémentation de son logiciel Patgen, Liang a conçu une nouvelle structure de donnée, compacte, utilisant le même principe que les arbres préfixes (ou tries) indexés, le trie compacte ou packed trie. Cette structure de donnée en arbre est utilisée pour représenter les motifs d'un dictionnaire d'une façon compacte. Il arrive en effet à gagner de l'espace mémoire en éliminant entièrement les liens null généralement présents dans de telles structures de donnée.
Finalement, l'algorithme utilise un dictionnaire de 4500 motifs (pour la langue anglaise) qui est compilé dans un trie compact occupant 25 Kb de stockage mémoire. En comparaison, un dictionnaire non compressé utilise, pour le même nombre de pattern, 500 Kb.

## En TeX

Des portages de l'algorithme de césure de TeX sont disponibles dans des bibliothèques pour plusieurs langages de programmation, y compris Haskell, JavaScript, Perl, PostScript, Python, Ruby, C#. Dans TeX, il est également possible de montrer les césures dans le log par la commande \showhyphens.
En LaTeX, la correction de la césure peut être ajoutée par les utilisateurs à l'aide de la commande :
La commande \hyphenation déclare les points de césure autorisés dont les mots est une liste de mots, séparés par des espaces, dans laquelle chaque point de césure est indiqué par un signe -. Par exemple,
déclare que, dans le travail en cours "fortran" ne devrait pas être coupé, et que, si "ergonomique" doit être coupé, cela se fera à l'un des points indiqués.
Cependant, il existe plusieurs limites. Par exemple, la commande de base \hyphenation n'accepte par défaut que les lettres sous encodage ASCII et ne peut donc pas être utilisée pour corriger la césure des mots avec des caractères non-ASCII (comme ä, é, ç), qui sont très communs dans presque toutes les langues sauf l'anglais. Des solutions de contournement simples existent cependant.