Blog ·
Un pluriel vague n’est pas un nombre
Un garde-fou comparant les nombres dans neuf langues a signalé deux défauts qui n’en étaient pas, et validé deux langues pour des raisons sans rapport.
Par Provibr
Chaque article que nous publions existe en neuf langues, et ce qui risque le plus de mal tourner dans une traduction n’est pas un mot. C’est un nombre. Un décompte qui dit 200 dans une langue et 20 dans une autre est invisible pour un lecteur qui n’en voit qu’une seule, et il n’existe aucun correcteur orthographique pour cela.
Il y a donc un garde-fou. Il prend la source anglaise, en extrait les nombres, et exige que chaque traduction contienne au moins autant d’occurrences de la même valeur. Cette ronde, il a produit deux rapports rouges au sujet de deux traductions entièrement correctes, et la raison mérite d’être notée.
Le garde-fou doit lire des mots, pas des chiffres
La version évidente de cette vérification compare les chiffres, et c’est celle que nous avons eue en premier. Elle est presque inutile ici, parce que notre usage maison en anglais écrit les nombres en toutes lettres. Non pas 38 tests mais trente-huit tests ; non pas 1440 mais mille quatre cent quarante.
Il y a donc un second garde-fou, avec une table dedans : pour chaque valeur qui vaut la peine d’être vérifiée, la façon dont chacune des neuf langues l’orthographie. Compter les occurrences dans l’anglais, les compter dans chaque traduction, et signaler tout ce qui vient à manquer.
Les petites valeurs sont délibérément exclues. Dans chacune de ces langues, les mots pour un, deux et trois sont aussi des articles, des prépositions ou des morceaux de mots plus longs, et les compter produirait des centaines de constatations qui ne veulent rien dire. Un garde-fou qui crie au loup finit ignoré, et un garde-fou ignoré est pire que pas de garde-fou du tout.
Compter par sous-chaîne, et compter du plus grand au plus petit
Deux mécanismes rendent tout le reste possible, et tous les deux créent la défaillance dont parle cet article.
Le premier, c’est que la correspondance doit se faire par sous-chaîne. Le néerlandais écrit seize mille en un seul mot, et la seule façon d’y voir le seize est de regarder à l’intérieur. Plusieurs de ces langues composent librement, si bien qu’un ancrage sur les limites de mots perdrait la plupart des occurrences réelles.
Le second, c’est que les valeurs sont comptées de la plus grande à la plus petite, et que chaque occurrence est découpée hors du texte avant que la valeur suivante ne soit comptée. Sans cela, quarante et un est compté une fois comme quarante et un et une fois comme quarante, et une langue qui écrit le même nombre en un seul mot indivisible a l’air d’en manquer un. Sept des trente-sept premières constatations que le garde-fou ait jamais produites étaient exactement cela, et aucune n’était un défaut.
La correspondance par sous-chaîne assortie du découpage est la bonne conception. Elle signifie aussi que le garde-fou cherche des lettres, et les lettres ne sont pas des nombres.
Le mot qui n’est pas un nombre
La phrase anglaise qui l’a mis en défaut est celle-ci : a guard on it names hundreds of non defects.
Il n’y a aucun nombre dans cette phrase. Hundreds of est un mot de quantité, le même genre de mot que several ou plenty, et ce n’est pas une affirmation disant que quelque chose s’est produit cent fois. Mais il contient les lettres du numéral, si bien que le garde-fou a compté une occurrence de cent dans l’anglais, puis est allé chercher cent dans huit traductions.
Voici ce qui est revenu. L’italien dit centinaia, le roumain dit sute de, et aucun des deux ne contient le numéral de sa langue pour cent. Deux rapports rouges, sur deux phrases qu’un locuteur natif qualifierait de parfaites.
Les six autres sont passées, et quatre seulement sont passées pour une raison. Le néerlandais honderden contient honderd, l’allemand Hunderte contient hundert, l’espagnol cientos contient ciento, le français centaines contient cent. Ces quatre-là sont le même défaut que l’italien et le roumain ; le garde-fou n’a simplement pas pu le voir, parce que le mot vague se trouve être bâti sur le numéral.
Les deux dernières sont celles qui mettent mal à l’aise. Le portugais est passé parce que le mot portugais pour cent, cem, apparaît à l’intérieur de parecem, dans un titre au sujet de deux choses qui se ressemblent. L’ukrainien est passé avec 39 occurrences dans un seul article, parce que les lettres cyrilliques de cent se trouvent à l’intérieur des mots ordinaires pour page et pour garde-fou.
Sur huit langues, donc : deux ont échoué sur un non-défaut, quatre ont caché le même non-défaut derrière une coïncidence d’orthographe, et deux étaient vertes sur des mots qui n’ont rien à voir avec des nombres. Un garde-fou ne vaut que les raisons qui se trouvent derrière ses résultats verts, et ici seulement deux des huit verts portaient sur du comptage.
Où le retrait doit se placer, et pourquoi il ne peut pas venir en premier
Le correctif est une seconde table : les pluriels vagues, par langue. Hundreds, honderden, Hunderte, cientos et centenares, centaines, centinaia, centenas, sute de, et les formes ukrainiennes. Les retirer avant de compter, parce que ce ne sont pas des valeurs.
La partie intéressante, c’est quand. L’instinct est de les retirer au début, comme une passe de nettoyage sur le texte, et cela casserait le garde-fou d’une manière bien plus difficile à remarquer que ce qu’il répare.
Le roumain pour quatre cents fois est patru sute de ori. Il contient sute de littéralement. Retirez les pluriels vagues d’entrée de jeu et vous avez détruit un vrai quatre cents en supprimant un faux cent, et le garde-fou signale désormais que le roumain manque d’un nombre qu’il possède manifestement.
Le retrait se fait donc à l’intérieur de la boucle, au moment où la boucle atteint la valeur cent. À ce moment-là, la passe de quatre cents a déjà consommé patru sute, et ce qui reste de sute de est réellement le mot vague. L’ordonnancement qui existait pour une autre raison se révèle être ce qui rend cela sûr, ce qui est un bon argument pour garder la raison écrite à côté du code.
Une fois les pluriels vagues retirés, la comparaison est passée de 224 décomptes et deux constatations à 216 décomptes et aucune. Le décompte baisse parce qu’une valeur qui apparaît zéro fois dans l’anglais n’est plus comparée du tout, ce qui est exactement juste : il n’y a jamais eu de cent à cet endroit.
Six valeurs qui étaient simplement absentes
En prouvant tout cela, il s’est avéré qu’il manquait à la table six des valeurs employées par les nouveaux articles, si bien que chacun de ces nombres restait non vérifié dans huit langues.
C’est la défaillance la plus ordinaire et c’est celle qui se reproduira. Une table de valeurs est écrite pour les articles de la ronde qui l’a créée, et la ronde suivante écrit d’autres nombres. Une ligne manquante n’échoue pas ; elle ne vérifie rien, en silence, ce qui a la même forme qu’une entrée de liste d’autorisation contenant une faute de frappe, et cela nous a déjà mordus.
La description honnête de ce garde-fou est donc la suivante : c’est un filet dont la maille est connue, il attrape la classe d’erreurs pour laquelle il a été bâti, et chaque ronde doit ajouter ses propres valeurs ou n’obtenir rien. Ce qui va très bien, tant que personne ne lit un résultat vert comme une couverture.
Ce que nous noterions
- Un mot de quantité n’est pas une valeur. Hundreds of est plus proche de several que de 100.
- La correspondance par sous-chaîne est juste ici et elle est la source du problème. Les langues qui composent en ont besoin.
- Demandez pourquoi chaque résultat vert est vert. Quatre des nôtres étaient une coïncidence et deux du bruit.
- Un radical de numéral court se cache dans des mots ordinaires, et le 100 cyrillique se trouve dans le mot pour page.
- Ordonnez les passes de la plus grande valeur à la plus petite et découpez chaque occurrence, sinon les composés comptent deux fois.
- L’endroit où un nettoyage se produit compte autant que ce qu’il retire. Retirer les pluriels vagues en premier détruit un vrai quatre cents.
- Gardez la raison à côté de l’ordonnancement, parce que l’ordonnancement est porteur et n’en a pas l’air.
- Une table de valeurs ne couvre que la ronde qui l’a écrite. Six manquaient ici.
- Une ligne manquante est silencieuse, exactement comme une entrée de liste d’autorisation mal orthographiée.
- Dites ce qu’un garde-fou ne couvre pas, pour que personne ne lise le vert comme une couverture.
Pour être clair : la comparaison a porté sur quatre articles dans huit langues, 224 décomptes avec deux constatations avant que les pluriels vagues ne soient traités et 216 sans aucune ensuite, six valeurs ajoutées à la table, et le retrait des pluriels vagues placé à l’intérieur de la boucle plutôt qu’avant elle, pour que le roumain de quatre cents survive. À côté de cela, cette ronde a produit 886 articles générés sans aucun avertissement, une vérification de contenu de 887 fichiers sur 887 identiques octet pour octet, la suite web à 4594 verts avec les autres suites à 7287, la comparaison de faits à 1144 décomptes sans aucun échec, les jetons à 64 et les noms de liens à 72, sept scripts et quatre règles typographiques prouvés rouges avant d’être crus verts, et un balayage de mise en page de 108 vérifications à 390 pixels contre une construction de production. Non prouvé : le bruit de sous-chaîne en ukrainien et en portugais est compris mais pas supprimé, ce qui demande un lecteur morphologique plutôt qu’une table, et chaque traduction n’a toujours qu’un seul relecteur.
Issu du travail de plateforme sur Provibr. Ce que neuf catalogues font à un ensemble de contrôles de taille fixe est dans Seize mille clés, neuf langues, le garde-fou qui distingue un texte de lien raccourci d’un texte remplacé est dans Deux noms pour le même article, et la relecture qui a lancé toute cette série est dans Trois défauts qu’aucun script ne pouvait voir.