{"word_count": 2082, "character_count": 14039}
Ce penseur observa que tous les livres, quelque divers qu'ils soient, comportent des éléments égaux : l'espace, le point, la virgule, les vingt deux lettres de l'alphabet. Il fit également état d'un fait que tous les voyageurs ont confirmé : il n’y a pas, dans la vaste Bibliothèque, deux livres identiques. De ces prémisses incontroversables il déduisit que la Bibliothèque est totale, et que ses étagères consignent toutes les combinaisons possibles des vingt et quelques symboles orthographiques (nombre, quoique très vaste, non infini), c'est-à-dire tout ce qu'il est possible d'exprimer, dans toutes les langues.(Borges, Fictions, « La Bibliothèque de Babel », 1941, traduction de Nestor Ibarra)La langue, en tous cas le texte, est un lieu de liberté et d’intelligence qui semble l’antithèse du hasard mathématique. Dans la bibliothèque de Babel, Borges imagine l’errance de l’humanité dans un univers purement combinatoire, produit par le mélange aléatoire de 25 signes, sur des livres de 410 pages, dans une immense bibliothèque. Il raconte les espoirs et les déceptions de bibliothécaires pèlerins, à la recherche d’un livre, ou même seulement, d’une ligne, qui a du sens. En manipulant des logiciels bureautiques, ou par quelques lignes de programme, nous entrerons dans des statistiques moins naïves sur la langue. Certes, le pur hasard ne produit pas facilement du sens, mais le sens obéit cependant à certaines lois statistiques. Il est important d’avoir une idée de ces distributions pour pondérer les résultats que peut produire une machine. Les expériences seront menées sur le texte de Borges que vous pouvez télécharger ici.Fréquence des lettresBorges, la Bibliothèque de BabelLe Livre de sable dont rêvait Borges se réalise désormais très facilement avec un petit programme. Le principe se conçoit sans peine, une page de Babel est spécifiée par l’auteur comme une matrice de 40 lignes de 80 colonnes, remplie par un caractère choisi au hasard dans une liste de 25. Avec Internet et un navigateur, il est possible d’exécuter en temps réel des programmes,  sans perdre de temps avec toutes sortes d’installations. J’utilise ci-dessous le site jsfiddle, qui permet d’écrire en ligne dans la syntaxe Javascript, et d’afficher le résultat dans le navigateur (en cliquant l’onglet “Result”). En cliquant le lien  “Edit in JSFiddle”, chacun peut modifier ce bout de programme, y introduire des erreurs qui en cassent le fonctionnement, ou bien aussi, des perfectionnements.Ce texte ne peut être d’aucune langue connue, nous le pressentons bien, mais pourquoi ? La langue a des régularités. En reprenant le texte de Borges lui-même, la machine montre que les lettres ne se distribuent absolument pas de manière égale.CharsL’espace (2990), le “E” (2345) ou le “S” (1252) sont bien plus fréquents que le “Z“ (9). La pente est vertigineuse. Il ne suffit cependant pas de pondérer l’alphabet pour produire un texte plus prononçable, car en tirant toujours au hasard, la machine n’est pas gênée d’aligner plusieurs espaces, d’insérer des points au milieu des lettres, ou de produire des séries de consonnes qui ne passent pas les dent. Mais cette pondération augmente sérieusement les chances de générer une séquence prononçable, voire, intelligible. Cette question ressemble aux hypothèses sur l’apparition de la vie. Selon l’état de nos connaissances, la probabilité de génération spontanée d’une molécule aussi complexe que l’ADN semble négligeable pour la durée de vie connue de la terre. Soit c’est la preuve d’un Dieu, ou de la vie extra-terrestre, ou bien l’indice qu’il nous manque une connaissance pour expliquer ce fait pourtant patent. Pour notre générateur automatique de textes, il faudrait lui apprendre quelques molécules de base, le dictionnaire d’une langue.Nous allons montrer maintenant que comme les lettres, les mots ne sont pas également fréquents. Nous allons maintenant procéder à un petit tutoriel qui peut être reproduit avec une suite bureautique. Le commentaire insistera sur différents problèmes linguistiques rencontrés qui montreront les limites de ces manipulations. Les illustrations alterneront le logiciel libre LibreOffice, et le produit commercial Microsoft.Office. Cela peut être l’occasion de découvrir des fonctionnalités avancées de ces logiciels (rechercher/remplacer avec caractères spéciaux, tableaux croisés dynamiques). Segmentation des mots Liste de fréquence Loi de Zipf Segmentation des motsAfin d’obtenir la liste des mots d’un texte, on voudrait qu’ils soient séparés sans équivoque, par exemple à un par ligne. Avec le latin moderne imaginé par Borges, il n’y a pas de différence entre les majuscules et les minuscules ; ce qui n’est pas le cas du français et des autres langues en alphabet latin. La première opération à exécuter sur le texte consiste donc à normaliser la casse. Par esthétique borgesienne, j’ai choisi ici les majuscules, mais habituellement, on utilise plutôt les minuscules. 1) sélectionner tout le texte (ctrl+A), 2) trouver le bon bouton sur la bonne barre ; ou alors LibreOffice / Modifier la casse / Majuscule.[caption id="attachment_345" align="aligncenter" width="600"] LibreOffice, changer la casse[/caption][caption id="attachment_346" align="aligncenter" width="600"] MS.Word, modifier la casse de la sélection[/caption]Le latin borgesien est exclusivement ponctué d’espaces, de virgules, et de points. Afin de dresser la liste des mots, on imagine qu’il suffit  de remplacer un ou plusieurs de ces séparateurs par un saut de ligne. En réalité, le texte édité de la fiction a bien d’autres caractères, comme des point-virgules, des points de suspension ou des parenthèses. Dresser une liste exhaustive de ces signes est peu robuste à long terme, tant les textes peuvent introduire des caractères spéciaux (guillemets anglais et français, tirets quadratins, équations mathématiques…). Une autre stratégie pourrait alors de procéder de manière négative, couper sur tous les signes qui ne sont pas des lettres. Il semble simple de commencer par l’alphabet, mais il ne faut pas oublier les lettres accentuées, le c cédille, ou l’e dans l’o. Cette approche aurait l’inconvénient de perdre les mots dans d’autres alphabets (grec, cyrillique…). De ces investigations, retenons que les caractères peuvent être  classés en différentes catégories, qui peuvent être affirmées ou niées. Concernant notre problème, il faudrait un rechercher/remplacer un peu élaboré pour remplacer toutes les séries de caractères “non-lettre” contigus par un saut de ligne.[caption id="attachment_349" align="aligncenter" width="536"] LibreOffice, Rechercher/Remplacer avec expressions régulières[/caption]Parce que c’est un logiciel libre, LibreOffice n’a pas d’avantage commercial a réinventer un standard, au contraire, il simplifie la vie des utilisateurs en employant des syntaxes puissantes largement déployées par ailleurs. Le formulaires de Rechercher/Remplacer propose des options avancées, et notamment, les expressions régulières, que l’on retrouve dans de nombreux langages de programmation. Cette syntaxe permet de sélectionner des motifs de caractères selon une algèbre mêlant classes de caractères et quantifieurs. Dans notre cas, il faut remplacer un caractère qui n’est pas dans un mot \W, une ou plusieurs fois +, par un seul saut de paragraphe \n. La mise au point de ce type d’expressions demande un peu d’entraînement, aussi conseillera-t-on de commencer par chercher les occurrences, de remplacer avec un contrôle visuel, avant de lancer un “Tout remplacer”.Microsoft.Word a développé sa propre syntaxe de recherche avancée, afin d’assister les éditeurs dans leurs correction les plus répétitives (ex : normalisation de la ponctuation). L’approche consiste à fouiller la documentation pour trouver la ruse dont on a besoin. Avec Word on remplacera tous les caractères entre les mots par un saut de paragraphe &#62;*&#60; : ^p.[caption id="attachment_350" align="aligncenter" width="600"] Microsoft, Rechercher/Remplacer des caractères spéciaux[/caption]Cette approche purement par caractère ne fonctionne pas pour le chinois, dont les mots ne sont pas séparés d’espaces et peuvent pourtant être composés de 2, 3, 4, voir plus de caractères. Le problème n’est pas aussi massif en français, mais nous avons des locutions de plusieurs mots (ex : à l’instar, parce que), et des comportements variables sur l’apostrophe (ex : d’autres prud’hommes). Un logiciel de segmentation demanderait à prendre en compte plus de cas pour être plus exact, mais cela suffit ici pour avoir une colonne de mots dans leur ordre d’apparition.Liste de fréquencesAfin de découvrir le mot le plus fréquent d’un texte, le principe consiste à alimenter un dictionnaire qui garde l’index de ces mots, et qui ajoute un à chaque fois que le mot est rencontré. Dans un langage de programmation on utilise alors des objets de type dictionnaires qui permettent de conserver efficacement un jeu de clés auxquelles on peut associer les valeurs que l’on souhaite (pour nous, des fréquences). Le programme illustre l’algorithme en Javascript, ce n’est qu’une petite démonstration qui ne supportera pas des grosses masses, mais elle détaille plus précisément ce que nous allons essayer de réaliser avec un tableur (cliquer “Result”).Pour réaliser la même opération avec un tableur, il faut commencer par coller la colonne de mots réalisée plus haut  avec un traitement de texte. Parce que Microsoft veut vous aider contre votre gré, il ne collera pas les mots mais un lien au fichier MS.Word. Paradoxe de l’informatique, il faut fouiller l’interface pour avoir droit à une opération simple, clic droit sur une cellule, et choisir collage spécial.[caption id="attachment_354" align="aligncenter" width="526"] Microsoft Excel, collage spécial, clic droit dans une cellule[/caption]Sur cette colonne de mots, il s’agit maintenant de trouver une ruse pour les dédoublonner et les compter. Microsoft.Excel parle de “Tableau croisé dynamique”, LibreOffice.Calc appelle cela “Table de pilote”. Le principe consiste à proposer une vue dynamique qui ne modifie pas les données mais qui permet de les observer. La manipulation demande un peu d’habitude pour être comprise mais elle peut servir à d’autres traitements de données, sans passer par de la programmation. Sélectionner la colonne de mot en cliquant la tête de colonne ; dans Excel, onglet Insertion / TblCroiséDynamique — dans LibreOffice / Données / Table de pilote / Créer.[caption id="attachment_359" align="aligncenter" width="585"] Microsof.Word, Tableau croisé dynamique, liste de fréquence[/caption]Le principe du formulaire de table dynamique est de glisser les noms de colonnes sur lesquelles une vue est souhaitée, LibreOffice impose une dernière complication, il cherche par défaut à faire le somme des mots (qui ne donne rien avec des lettres), il faut lui préciser d’en faire le compte en double-cliquant le champs de données.[caption id="attachment_360" align="aligncenter" width="507"] LibreOffice, DataPilot, obtenir le comptage des doublons.[/caption]Nous avons maintenant une double colonne avec sur chaque ligne, un mot, et sa fréquence. Cet appareillage n’est pas le plus simple pour obtenir les données,  l’exercice était l’occasion de montrer des fonctionnalités avancées qui peuvent servir à l’exploration d’autres données.Loi de ZipfLa suite est beaucoup plus adaptée au tableur, elle consiste à copier les deux colonnes plus haut dans une feuille de calcul vierge pour produire un graphique de Zipf. Il s’agit de montrer le rapport entre le nombre d’occurrences (fréquence) et le rang d’un mot. Sélectionner la colonne de nombre (uniquement), dans LibreOffice / Insertion / Objet /Diagramme — dans Excel / Insertion / Nuage.[caption id="attachment_363" align="aligncenter" width="587"] LibreOffice, progression de Zipf en repères linéaires[/caption]La pente de la progression ne présente pas de régularité remarquable, à part une chute vertigineuse. Il faut modifier L’échelle des deux axes, pour les rendre logarithmique, et le mystère apparaît, il y a un rapport linéaire entre les deux variables.[caption id="attachment_364" align="aligncenter" width="527"] Microsof Excel, échelle logarithmique[/caption]Vous avez trouvé cela laborieux ? Il est aussi possible de concrétiser la même courbe sur papier millimétré à échelle logarithmique.[caption id="attachment_365" align="aligncenter" width="472"] E.-V. Condon, 1928, graphique log/log de Pareto sur des fréquences lexicales[/caption]ConclusionDans la bibliothèque de Babel, Borges propose une statistique purement linéaire de la langue, et uniquement au niveau de la lettre. En réalité, la langue est articulée à plusieurs niveaux, notamment au mot. Parce que nous ne sommes pas des dieux omniscients, nous ne pouvons pas avoir en mémoire tous les mots du dictionnaire dans une égale indifférence. Certains mots sont très souvent utilisés, et portent peu de signification, comme “de” ou les articles, qui s’appliquent par la fatalité de la syntaxe ; une autre partie importante du lexique est utilisée très rarement, demande de l’attention, comme “interpolations”, ou “pulmonaire”. Avoir en tête la loi de Zipf permet de lire et d’écrire différemment, de prendre conscience de phénomènes statistiques inévitables dans la transmission d’un message, quand bien même il s’agisse de grands écrivains.La loi de Zipf nous donne la clé de cette fiction de Borges. Un Dieu omniscient n’a pas besoin de mots outils pour produire du sens, mais nous ne pourrions pas le comprendre, car notre attention ne pourrait pas le suivre et se reposer sur du connu. Si un dieu a écrit le Coran, alors il s’est appliqué à se rendre compréhensible, et il se soumet à la loi de Zipf.[caption id="" align="aligncenter" width="500"] Wikipedia, le Coran suit la loi de Zipf[/caption]Bibliographie Mandelbrot, Benoit. 1957. « Linguistique statistique macroscopique » Petruszewycz, 1973. Mathématiques et Sciences Humaines, « L'histoire de la loi d'Estoup-Zipf : documents » Wikipedia, Loi de Zipf