Consi-dé-rant que la mé-con-nais-sance et le mé-pris des droits de l'homme ont conduit à des actes de bar-ba-rie qui ré-voltent la conscience de l'hu-ma-nité et que l'avè-ne-ment d'un monde où les êtres hu-mains se-ront libres de par-ler et de croire, li-bé-rés de la ter-reur et de la mi-sère, a été pro-clamé comme la plus haute as-pi-ra-tion de l'homme,
Consi-dé-rant qu'il est es-sen-tiel que les droits de l'homme soient pro-té-gés par un ré-gime de droit pour que l'homme ne soit pas contraint, en su-prême re-cours, à la ré-volte contre la ty-ran-nie et l'op-pres-sion,
Consi-dé-rant qu'il est es-sen-tiel d'en-cou-ra-ger le dé-ve-lop-pe-ment de re-la-tions ami-cales entre na-tions,
Consi-dé-rant que dans la Charte les peuples des Na-tions Unies ont pro-clamé à nou-veau leur foi dans les droits fon-da-men-taux de l'homme, dans la di-gnité et la va-leur de la per-sonne hu-maine, dans l'éga-lité des droits des hommes et des femmes, et qu'ils se sont dé-cla-rés ré-so-lus à fa-vo-ri-ser le pro-grès so-cial et à ins-tau-rer de meilleures condi-tions de vie dans une li-berté plus grande, ...
Sans césures | Avec césures (auto) |
Considérant que la reconnaissance de la dignité inhérente à tous les membres de la famille humaine et de leurs droits égaux et inaliénables constitue le fondement de la liberté, de la justice et de la paix dans le monde, Considérant que la méconnaissance et le mépris des droits de l'homme ont conduit à des actes de barbarie qui révoltent la conscience de l'humanité et que l'avènement d'un monde où les êtres humains seront libres de parler et de croire, libérés de la terreur et de la misère, a été proclamé comme la plus haute aspiration de l'homme, Considérant qu'il est essentiel que les droits de l'homme soient protégés par un régime de droit pour que l'homme ne soit pas contraint, en suprême recours, à la révolte contre la tyrannie et l'oppression, | Considérant que la reconnaissance de la dignité inhérente à tous les membres de la famille humaine et de leurs droits égaux et inaliénables constitue le fondement de la liberté, de la justice et de la paix dans le monde, Considérant que la méconnaissance et le mépris des droits de l'homme ont conduit à des actes de barbarie qui révoltent la conscience de l'humanité et que l'avènement d'un monde où les êtres humains seront libres de parler et de croire, libérés de la terreur et de la misère, a été proclamé comme la plus haute aspiration de l'homme, Considérant qu'il est essentiel que les droits de l'homme soient protégés par un régime de droit pour que l'homme ne soit pas contraint, en suprême recours, à la révolte contre la tyrannie et l'oppression, |
tran2s1o2
, 1ni
, .o4
, 4fre.
, .dé3s2o3dé
, etc. Le point symbolise le début ou la fin du mot. Ainsi, par ex., on interdit la coupure avant une syllabe muette terminant le mot, cam-bre-mer, mais chambre. Parfois on trouve des règles "culturelles / psychologiques" : dé-cons-truc-tion, mais construc-tion, devinez pourquoi...
Les patterns vous seront donnés. Dans http://www.ctan.org/tex-archive/language/hyphenation/ vous trouverez les listes de patterns dans la plupart de langues adaptées au TeX (ou systèmes équivalents). La liste pour le français aussi, bien sûr. Localement vous avez ce document. Son format n'est pas commode, on reviendra à la représentation des patterns dans votre programme ; ceci constitue une partie de votre travail.
hy3ph he2n hena4 hen5at 1na n2at 1tio 2io o2n.
.
Voici l'appariement du mot et des patterns :
h y p h e n a t i o n h y3p h h e2n h e n a4 h e n5a t 1n a n2a t 1t i o 2i o o2n ----------------------- h y3p h e2n5a4t2i o2nLa dernière ligne qui ramasse les nombres en gardant le maximum, donne la réponse au problème de la coupure. La réponse est hy-phen-ation.
hyph-fr.tex
, construisez un fichier qui contient seulement les motifs :
.a4 'a4 .â4 'â4 ab2h .ab3réa 'ab3réa ad2h a1è2dre .ae3s4ch 'ae3s4ch 1alcool a2l1algi .amino1a2c 'amino1a2c .ana3s4tr 'ana3s4tr 1a2nesthési .anti1a2 ...En utilisant les expressions régulières, éliminez les commentaires TeX : tout ce qui commence par le caractère "%" jusqu'à la fin de ligne. Ensuite éliminez les espaces redondants. Finalement, éliminez
"\patterns{"
et "}"
et c'est tout.
"alalgi"
. Répétons, que les chiffres servent à localiser les points de coupure. Encore un exemple :
. a l g o r i t h m . 4l1g4 l g o3 1g o 2i t h 4h1m ----------------- 4 1 4 3 2 0 4 1 a l-g o-r i t h-mAvec ce format le programme doit séquentiellement parcourir le mot et les patterns, lettre par lettre, et accumuler les données partielles, ce qui est faisable, mais pénible (à mes yeux...). Mais si on sépare le motif 4l1g4 en "pur" :
lg
, on a la fonction standard Python : mot.find(sousCh) qui trouve l'indice où la sous-chaîne se trouve, ou -1 en cas d'échec. On a également la très riche panoplie d'expressions régulières ! Les chiffres, ici "414" peuvent être stockés séparemment, avec les traces de leurs positiions.
Alors, une possibilité d'optimisation est la suivante. Pour chaque pattern découvert, séparer le fragment lexical, supprimer les chiffres (mais elles ne seront pas oubliées). Ainsi e2n1i2vr se transformera en enivr
. Ce motif "pur" servira de clé dans un dictionnaire de recherche. Les valeurs associées aux clés utiliseront les chiffres, et permettront d'identifier les positions des points légaux de césure. Pour chaque caractère du motif complet, on stocke une séquence des chiffres correspondants, où leurs positions sont évidentes, si on restaure les zéros implicits. Par exemple
'.pa3rent.' => '.parent.' : '000300000' '.su2b1é2' => '.subé' : '00020102' '1rô' => 'rô' : '100' 'stéréo1s2' => 'stéréos' : '000000102' 'e2n1i2vr' => 'enivr' : '02010200' 'hen4a' => 'hena' : '00040' 'hen5at' => 'henat' : '000500'etc. Compléter ainsi le dictionnaire. La liste contient autour de 1140 patterns, ce qui n'est pas exorbitant aujourd'hui. (Mais il y a 30 ans, ce n'était pas évident...) On peut stocker une liste numérique : [1, 0, 0] au lieu de '100', ce qui est plus rapide, mais plus gourmand en mémoire. Mieux, on peut stocker un dictionnaire avec les positions comme clés. La séquence
02010200
associée à 'enivr' est représentée comme le dictionnaire {1: 2, 2: 1, 3: 2}.
alié-nable
, mais il décide de couper in-aliénable
de cette manière, car il trouve seulement le premier NA des deux dans iNA
liéNA
ble...