{"id":5829,"date":"2026-09-16T03:05:11","date_gmt":"2026-09-16T03:05:11","guid":{"rendered":"http:\/\/french.arabpsychology.com\/statistics\/comment-calculer-distance-levenshtein-dans-r-exemples\/"},"modified":"2026-09-16T03:05:12","modified_gmt":"2026-09-16T03:05:12","slug":"comment-calculer-distance-levenshtein-dans-r-exemples","status":"publish","type":"psych_stat","link":"https:\/\/french.arabpsychology.com\/?psych_stat=comment-calculer-distance-levenshtein-dans-r-exemples","title":{"rendered":"Comment calculer la distance de Levenshtein dans R (avec exemples)"},"content":{"rendered":"<p>L&rsquo;analyse computationnelle du langage naturel et le traitement automatique des donn\u00e9es textuelles constituent aujourd&rsquo;hui des piliers fondamentaux de la recherche scientifique, de l&rsquo;ing\u00e9nierie logicielle et des sciences cognitives. Dans cet univers domin\u00e9 par des structures de donn\u00e9es s\u00e9miotiques hautement variables, la question de la quantification des divergences orthographiques s&rsquo;impose avec une acuit\u00e9 singuli\u00e8re. Comment, en effet, mesurer math\u00e9matiquement l&rsquo;\u00e9cart qui s\u00e9pare deux s\u00e9quences de symboles discrets ? De quelle mani\u00e8re peut-on \u00e9valuer la d\u00e9formation d&rsquo;un lemme sous l&rsquo;effet d&rsquo;une erreur typographique, d&rsquo;une mutation dialectale ou d&rsquo;un lapsus mn\u00e9sique lors d&rsquo;une t\u00e2che de rappel exp\u00e9rimental ? C&rsquo;est pr\u00e9cis\u00e9ment \u00e0 cette interrogation m\u00e9thodologique que r\u00e9pond la m\u00e9trique propos\u00e9e au milieu des ann\u00e9es soixante par le math\u00e9maticien sovi\u00e9tique Vladimir Levenshtein.<\/p>\n<p>Dans l&rsquo;\u00e9cosyst\u00e8me du calcul scientifique, le langage de programmation statistique R s&rsquo;est impos\u00e9 comme l&rsquo;un des environnements les plus rigoureux et polyvalents pour appr\u00e9hender les structures de donn\u00e9es complexes. Bien que nativement orient\u00e9 vers l&rsquo;analyse matricielle et la mod\u00e9lisation probabiliste, R s&rsquo;est enrichi au fil des d\u00e9cennies d&rsquo;un ensemble de biblioth\u00e8ques sp\u00e9cialis\u00e9es permettant d&rsquo;aborder la linguistique computationnelle et l&rsquo;appariement de donn\u00e9es imparfaites avec une efficacit\u00e9 remarquable. Le calcul de la distance d&rsquo;\u00e9dition, loin de se limiter \u00e0 une curiosit\u00e9 algorithmique purement th\u00e9orique, devient ainsi un outil op\u00e9rationnel de premier plan pour les chercheurs, les biostatisticiens et les sp\u00e9cialistes de l&rsquo;analyse exploratoire des donn\u00e9es massives.<\/p>\n<p>Ce guide exhaustif a pour vocation d&rsquo;explorer en profondeur les fondements th\u00e9oriques, les m\u00e9canismes math\u00e9matiques sous-jacents et les modalit\u00e9s pratiques de mise en \u0153uvre de la distance de Levenshtein au sein de l&rsquo;environnement R. \u00c0 travers l&rsquo;\u00e9tude approfondie du formalisme algorithmique de Wagner-Fischer, l&rsquo;analyse des propri\u00e9t\u00e9s topologiques de l&rsquo;espace m\u00e9trique induit, ainsi que l&rsquo;appropriation m\u00e9thodique du package hautement optimis\u00e9 stringdist, le lecteur d\u00e9couvrira comment d\u00e9ployer des protocoles de comparaison textuelle robustes, reproductibles et capables de passer \u00e0 l&rsquo;\u00e9chelle sur des corpus empiriques consid\u00e9rables.<\/p>\n<h2>1. Introduction th\u00e9orique et fondements conceptuels de la distance de Levenshtein<\/h2>\n<h3>1.1 D\u00e9finition formelle de la m\u00e9trique d&rsquo;\u00e9dition<\/h3>\n<p>La distance de Levenshtein, formul\u00e9e initialement en 1965 par le math\u00e9maticien et th\u00e9oricien de l&rsquo;information <a rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Vladimir_Levenshtein\">Vladimir Levenshtein<\/a>, trouve son origine dans l&rsquo;\u00e9tude de la transmission des signaux binaires \u00e0 travers des canaux de communication bruit\u00e9s. Confront\u00e9 \u00e0 la probl\u00e9matique de la d\u00e9tection et de la correction d&rsquo;erreurs de synchronisation au sein des codes correcteurs, Levenshtein a formalis\u00e9 une mesure g\u00e9om\u00e9trique capable de quantifier la divergence minimale existant entre deux s\u00e9quences de symboles issues d&rsquo;un m\u00eame alphabet fini. Contrairement aux approches probabilistes continues, cette mesure s&rsquo;ancre dans une combinatoire discr\u00e8te et d\u00e9terministe o\u00f9 la divergence entre deux \u00e9tats lexicaux est directement proportionnelle \u00e0 l&rsquo;effort transformationnel n\u00e9cessaire pour faire co\u00efncider l&rsquo;une des cha\u00eenes avec l&rsquo;autre.<\/p>\n<p>Sur le plan math\u00e9matique, la distance de Levenshtein entre une cha\u00eene source et une cha\u00eene cible se d\u00e9finit comme le nombre minimal d&rsquo;op\u00e9rations \u00e9l\u00e9mentaires d&rsquo;\u00e9dition requises pour transformer la s\u00e9quence initiale en la s\u00e9quence terminale. Ces op\u00e9rations \u00e9l\u00e9mentaires comprennent conventionnellement l&rsquo;insertion d&rsquo;un caract\u00e8re, la suppression d&rsquo;un caract\u00e8re et la substitution d&rsquo;un caract\u00e8re par un autre. La distance d&rsquo;\u00e9dition se distingue ainsi fondamentalement d&rsquo;autres m\u00e9triques plus restrictives, au premier rang desquelles figure la <a rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Hamming_distance\">distance de Hamming<\/a>. Cette derni\u00e8re, \u00e9labor\u00e9e dans le contexte exclusif de blocs de donn\u00e9es de longueurs rigoureusement identiques, n&rsquo;admet que la seule op\u00e9ration de substitution, rendant son application totalement inop\u00e9rante d\u00e8s lors qu&rsquo;un d\u00e9calage positionnel ou une variation dimensionnelle intervient entre les s\u00e9quences observ\u00e9es.<\/p>\n<p>Le r\u00f4le fondamental de la m\u00e9trique de Levenshtein r\u00e9side dans sa capacit\u00e9 \u00e0 conf\u00e9rer une structure g\u00e9om\u00e9trique mesurable \u00e0 l&rsquo;ensemble des cha\u00eenes de caract\u00e8res finies. En \u00e9tablissant une quantification formelle des divergences orthographiques, symboliques ou morphologiques, cette mesure transcende la simple binarit\u00e9 de l&rsquo;\u00e9galit\u00e9 logique. Deux mots qui ne sont pas strictement identiques cessent d&rsquo;\u00eatre consid\u00e9r\u00e9s comme arbitrairement distincts ; ils occupent d\u00e8s lors des coordonn\u00e9es spatiales relatives au sein d&rsquo;un espace m\u00e9trique discret, permettant ainsi l&rsquo;\u00e9valuation graduelle des proximit\u00e9s lexicales et l&rsquo;\u00e9laboration de mod\u00e8les math\u00e9matiques pr\u00e9dictifs pour les sciences du langage et du signal.<\/p>\n<h3>1.2 Typologie des op\u00e9rations \u00e9l\u00e9mentaires d&rsquo;\u00e9dition<\/h3>\n<p>L&rsquo;architecture de la distance de Levenshtein repose sur un ensemble clos et universel de trois op\u00e9rations atomiques, dont la combinaison s\u00e9quentielle permet de d\u00e9crire exhaustivement n&rsquo;importe quel chemin de d\u00e9formation textuelle. La premi\u00e8re op\u00e9ration \u00e9l\u00e9mentaire est l&rsquo;insertion. Ce m\u00e9canisme consiste \u00e0 int\u00e9grer un nouveau symbole, extrait de l&rsquo;alphabet de r\u00e9f\u00e9rence, au sein d&rsquo;une position arbitraire de la cha\u00eene source. D&rsquo;un point de vue morphologique, l&rsquo;insertion correspond \u00e0 la prise en compte d&rsquo;une omission dans la transcription initiale ou \u00e0 l&rsquo;adjonction d&rsquo;un affixe flexionnel. Elle incr\u00e9mente la longueur totale de la s\u00e9quence d&rsquo;une unit\u00e9 tout en modifiant l&rsquo;indexation de l&rsquo;ensemble des caract\u00e8res subs\u00e9quents situ\u00e9s en aval de la position d&rsquo;adjonction.<\/p>\n<p>La deuxi\u00e8me op\u00e9ration fondamentale est la suppression, parfois qualifi\u00e9e d&rsquo;\u00e9lision ou d&rsquo;effacement. Inverse sym\u00e9trique de l&rsquo;insertion, elle consiste \u00e0 retirer un symbole pr\u00e9alablement pr\u00e9sent au sein de la cha\u00eene source \u00e0 un indice donn\u00e9. Dans l&rsquo;analyse computationnelle des erreurs, la suppression permet de mod\u00e9liser les accidents de frappe r\u00e9sultant de la saisie involontaire de caract\u00e8res parasites ou la troncature accidentelle de d\u00e9sinences lexicales. Tout comme l&rsquo;insertion, la suppression engendre un r\u00e9alignement dynamique des indices de position pour les symboles restants, ce qui conf\u00e8re \u00e0 ces deux op\u00e9rations conjointes une puissance de restructuration globale bien sup\u00e9rieure \u00e0 celle de simples permutations statiques.<\/p>\n<p>La troisi\u00e8me op\u00e9ration \u00e9l\u00e9mentaire est la substitution, qui consiste \u00e0 \u00e9changer un caract\u00e8re de la cha\u00eene source contre un caract\u00e8re distinct provenant de l&rsquo;alphabet pour faire correspondre les positions respectives des deux s\u00e9quences. Bien que la substitution puisse \u00eatre th\u00e9oriquement d\u00e9compos\u00e9e en une s\u00e9quence cons\u00e9cutive comprenant une suppression suivie d&rsquo;une insertion, le paradigme originel de Levenshtein l&rsquo;\u00e9rige en op\u00e9ration unitaire atomique. Selon la convention standard \u00e9tablie par le mod\u00e8le classique, chacune de ces trois op\u00e9rations se voit assigner un co\u00fbt unitaire uniforme \u00e9quivalant \u00e0 1. La distance totale correspond alors \u00e0 l&rsquo;optimisation globale visant \u00e0 identifier le co\u00fbt cumul\u00e9 le plus faible parmi tous les arbres transformationnels possibles reliant la source \u00e0 la cible.<\/p>\n<h3>1.3 Pertinence de la mesure dans l&rsquo;\u00e9tude computationnelle du langage<\/h3>\n<p>Dans le domaine du traitement automatique du langage naturel et de la linguistique quantitative, l&rsquo;introduction de la distance de Levenshtein a permis de formaliser objectivement ce qui relevait historiquement de l&rsquo;intuition perceptive ou du jugement phon\u00e9tique subjectif. La similarit\u00e9 lexicale, qu&rsquo;elle soit \u00e9valu\u00e9e du point de vue de l&rsquo;observateur humain ou d&rsquo;un algorithme de classification automatique, d\u00e9pend intrins\u00e8quement du degr\u00e9 de superposition des structures de surface des mots. En fournissant une fonction de co\u00fbt continue et invariante par translation, la distance d&rsquo;\u00e9dition permet de cartographier avec une pr\u00e9cision math\u00e9matique la n\u00e9bulosit\u00e9 morphologique qui entoure chaque unit\u00e9 du lexique mental d&rsquo;une langue donn\u00e9e.<\/p>\n<p>Sur le plan psycholinguistique et empirique, la mod\u00e9lisation des erreurs de frappe, des lapsus calami et des approximations orthographiques constitue un champ d&rsquo;application privil\u00e9gi\u00e9 de cette m\u00e9trique. Lorsqu&rsquo;un scripteur saisit un mot sur un clavier physique ou num\u00e9rique, les d\u00e9viations observ\u00e9es par rapport \u00e0 la norme orthographique ne se r\u00e9partissent pas de mani\u00e8re purement al\u00e9atoire \u00e0 travers l&rsquo;espace des cha\u00eenes de caract\u00e8res. Elles r\u00e9sultent de contraintes neuromotrices, de confusions phon\u00e9tiques ou de d\u00e9faillances mn\u00e9siques locales. La m\u00e9trique de Levenshtein fournit un cadre computationnel \u00e9l\u00e9gant pour isoler ces distorsions en mesurant la d\u00e9rive minimale par rapport au lemme de r\u00e9f\u00e9rence, facilitant ainsi l&rsquo;\u00e9mergence d&rsquo;algorithmes de correction orthographique probabiliste fond\u00e9s sur le principe du voisinage de co\u00fbt minimal.<\/p>\n<p>Enfin, en dialectom\u00e9trie et en linguistique diachronique comparative, la quantification des divergences textuelles permet d&rsquo;objectiver l&rsquo;\u00e9volution temporelle et spatiale des syst\u00e8mes linguistiques. L&rsquo;application de la distance de Levenshtein \u00e0 des listes de mots apparent\u00e9s permet de mesurer math\u00e9matiquement la distance g\u00e9n\u00e9tique s\u00e9parant des idiomes issus d&rsquo;une m\u00eame souche, d&rsquo;\u00e9tablir des dendrogrammes phylog\u00e9n\u00e9tiques rigoureux et d&rsquo;\u00e9tudier la diffusion des innovations phonologiques sans d\u00e9pendre exclusivement de jugements qualitatifs subjectifs.<\/p>\n<h2>2. Mod\u00e9lisation math\u00e9matique et algorithmique de la distance d&rsquo;\u00e9dition<\/h2>\n<h3>2.1 L&rsquo;algorithme de programmation dynamique de Wagner-Fischer<\/h3>\n<p>Bien que la d\u00e9finition math\u00e9matique de la distance d&rsquo;\u00e9dition soit conceptuellement limpide, son calcul pratique sur des cha\u00eenes de caract\u00e8res non triviales pose un d\u00e9fi combinatoire majeur. En effet, l&rsquo;exploration na\u00efve de l&rsquo;ensemble des s\u00e9quences d&rsquo;op\u00e9rations d&rsquo;\u00e9dition possibles menant d&rsquo;une cha\u00eene source de longueur m \u00e0 une cha\u00eene cible de longueur n g\u00e9n\u00e8re une explosion combinatoire d&rsquo;une complexit\u00e9 exponentielle. Pour pallier cette inefficacit\u00e9 fondamentale, Robert Wagner et Michael Fischer ont formalis\u00e9 en 1974 un algorithme r\u00e9volutionnaire fond\u00e9 sur les principes de la <a rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Dynamic_programming\">programmation dynamique<\/a>, th\u00e9oris\u00e9s initialement par Richard Bellman. Cet algorithme repose sur la d\u00e9composition du probl\u00e8me global en sous-probl\u00e8mes embo\u00eet\u00e9s et sur l&rsquo;exploitation du principe d&rsquo;optimalit\u00e9.<\/p>\n<p>La formulation repose sur une relation de r\u00e9currence stricte liant les pr\u00e9fixes des deux cha\u00eenes analys\u00e9es. Consid\u00e9rons une cha\u00eene source s de longueur m et une cha\u00eene cible t de longueur n. D\u00e9finissons une matrice D de dimensions (m + 1) par (n + 1), o\u00f9 chaque cellule D(i, j) repr\u00e9sente la distance de Levenshtein exacte entre le pr\u00e9fixe de longueur i de la cha\u00eene s et le pr\u00e9fixe de longueur j de la cha\u00eene t. L&rsquo;initialisation de la matrice s&rsquo;effectue de mani\u00e8re d\u00e9terministe en \u00e9tablissant que la distance entre une cha\u00eene quelconque et la cha\u00eene vide \u00e9quivaut \u00e0 la longueur de la cha\u00eene non vide. D\u00e8s lors, pour tout i compris entre 0 et m, la cellule D(i, 0) prend la valeur i, ce qui mod\u00e9lise l&rsquo;application de i suppressions successives. De m\u00eame, pour tout j compris entre 0 et n, la cellule D(0, j) re\u00e7oit la valeur j, mod\u00e9lisant l&rsquo;application de j insertions cons\u00e9cutives.<\/p>\n<p>Pour le calcul incr\u00e9mental des cellules int\u00e9rieures, pour tout indice i sup\u00e9rieur \u00e0 0 et tout indice j sup\u00e9rieur \u00e0 0, l&rsquo;algorithme \u00e9value le co\u00fbt local en comparant le caract\u00e8re source s[i] avec le caract\u00e8re cible t[j]. Si les deux symboles sont rigoureusement identiques, le co\u00fbt d&rsquo;adaptation est nul ; s&rsquo;ils diff\u00e8rent, ce co\u00fbt est fix\u00e9 \u00e0 1. La valeur de la cellule D(i, j) est alors d\u00e9termin\u00e9e par le choix optimal local minimisant trois transitions potentielles : la suppression mod\u00e9lis\u00e9e par D(i &#8211; 1, j) major\u00e9 de 1, l&rsquo;insertion mod\u00e9lis\u00e9e par D(i, j &#8211; 1) major\u00e9 de 1, et la substitution mod\u00e9lis\u00e9e par D(i &#8211; 1, j &#8211; 1) major\u00e9 du co\u00fbt local. La cellule finale D(m, n) contient par construction la distance minimale totale recherch\u00e9e, et la r\u00e9tro-ing\u00e9nierie du chemin matriciel depuis cette cellule terminale jusqu&rsquo;\u00e0 l&rsquo;origine permet de reconstituer l&rsquo;alignement optimal explicite.<\/p>\n<h3>2.2 Analyse de la complexit\u00e9 computationnelle<\/h3>\n<p>L&rsquo;algorithme canonique de Wagner-Fischer pr\u00e9sente une complexit\u00e9 temporelle rigoureusement quadratique, not\u00e9e en notation grand O comme O(m * n), o\u00f9 m et n repr\u00e9sentent respectivement les longueurs des deux cha\u00eenes soumises \u00e0 la comparaison. Cette complexit\u00e9 temporelle d\u00e9coule directement de la n\u00e9cessit\u00e9 de parcourir et de renseigner chacune des cellules de la matrice de dimensions (m + 1) par (n + 1), chaque calcul de cellule individuelle n&rsquo;exigeant qu&rsquo;un nombre constant d&rsquo;op\u00e9rations arithm\u00e9tiques et de comparaisons \u00e9l\u00e9mentaires en temps constant O(1). Dans le cas o\u00f9 les deux cha\u00eenes pr\u00e9sentent des longueurs comparables de l&rsquo;ordre de n, l&rsquo;effort de calcul total cro\u00eet donc proportionnellement au carr\u00e9 de la longueur des s\u00e9quences, not\u00e9 O(n\u00b2).<\/p>\n<p>Sur le plan de la complexit\u00e9 spatiale, l&rsquo;impl\u00e9mentation na\u00efve qui alloue l&rsquo;int\u00e9gralit\u00e9 de la grille matricielle en m\u00e9moire vive consomme \u00e9galement un volume d&rsquo;espace m\u00e9moire d&rsquo;ordre quadratique O(m * n). Toutefois, une analyse fine de l&rsquo;\u00e9quation de r\u00e9currence d\u00e9montre que le calcul des valeurs de la ligne courante i ne requiert imp\u00e9rativement que les valeurs de la ligne imm\u00e9diatement pr\u00e9c\u00e9dente i &#8211; 1 et les valeurs d\u00e9j\u00e0 calcul\u00e9es au sein de la ligne i elle-m\u00eame. D\u00e8s lors, une strat\u00e9gie d&rsquo;optimisation classique consiste \u00e0 ne conserver en m\u00e9moire que deux lignes simultan\u00e9es, r\u00e9duisant drastiquement l&rsquo;exigence spatiale \u00e0 un ordre lin\u00e9aire O(min(m, n)). Cette optimisation s&rsquo;av\u00e8re particuli\u00e8rement pr\u00e9cieuse lorsque l&rsquo;on souhaite uniquement extraire la valeur scalaire de la distance sans reconstruire le graphe d&rsquo;alignement complet.<\/p>\n<p>Cependant, lorsque l&rsquo;on quitte le domaine du mot isol\u00e9 pour aborder le traitement computationnel de s\u00e9quences textuelles \u00e9tendues, telles que des paragraphes entiers, des transcriptions orales compl\u00e8tes ou des alignements de g\u00e9nomes de plusieurs millions de nucl\u00e9otides, cette complexit\u00e9 quadratique se transforme en un goulot d&rsquo;\u00e9tranglement infranchissable. Pour att\u00e9nuer ces contraintes massives, la recherche contemporaine en algorithmique a d\u00e9velopp\u00e9 des variantes heuristiques ou contraintes par bandes d&rsquo;exploration, \u00e0 l&rsquo;image de l&rsquo;algorithme d&rsquo;Ukkonen. Ce dernier restreint le parcours de la matrice \u00e0 une diagonale centrale d&rsquo;\u00e9paisseur k, ramenant la complexit\u00e9 temporelle \u00e0 O(k * min(m, n)), ce qui permet de rejeter tr\u00e8s pr\u00e9cocement les paires de s\u00e9quences dont la divergence exc\u00e8de un seuil critique d&rsquo;int\u00e9r\u00eat.<\/p>\n<h3>2.3 Propri\u00e9t\u00e9s topologiques et m\u00e9triques de l&rsquo;espace de Levenshtein<\/h3>\n<p>Pour qu&rsquo;une fonction de divergence math\u00e9matique soit reconnue formellement comme une v\u00e9ritable m\u00e9trique au sens de la topologie g\u00e9n\u00e9rale, elle doit satisfaire de mani\u00e8re inconditionnelle \u00e0 quatre axiomes fondamentaux. L&rsquo;ensemble des cha\u00eenes de caract\u00e8res finies construites sur un alphabet donn\u00e9, coupl\u00e9 \u00e0 la fonction de distance de Levenshtein d, forme un espace m\u00e9trique discret complet. La premi\u00e8re propri\u00e9t\u00e9 axiomatique est la non-n\u00e9gativit\u00e9 : pour toutes cha\u00eenes arbitraires x et y, la distance d(x, y) est strictement sup\u00e9rieure ou \u00e9gale \u00e0 0. L&rsquo;effort transformationnel n\u00e9cessaire pour passer d&rsquo;une s\u00e9quence \u00e0 une autre ne peut en aucun cas \u00eatre n\u00e9gatif, chaque op\u00e9ration unitaire ayant un co\u00fbt positif ou nul.<\/p>\n<p>La deuxi\u00e8me propri\u00e9t\u00e9 est l&rsquo;identit\u00e9 des indiscernables, qui postule que la distance d(x, y) est \u00e9gale \u00e0 0 si et seulement si les cha\u00eenes x et y sont rigoureusement identiques, caract\u00e8re par caract\u00e8re et dans un ordre parfaitement pr\u00e9serv\u00e9. R\u00e9ciproquement, si x diff\u00e8re de y par au moins une position ou une dimension, le co\u00fbt minimal d&rsquo;\u00e9dition sera obligatoirement sup\u00e9rieur ou \u00e9gal \u00e0 1. La troisi\u00e8me propri\u00e9t\u00e9 fondamentale est la sym\u00e9trie : la distance d(x, y) est \u00e9gale \u00e0 la distance d(y, x). En effet, toute op\u00e9ration d&rsquo;insertion permettant de progresser de x vers y poss\u00e8de pour image miroir une op\u00e9ration de suppression de co\u00fbt \u00e9quivalent pour r\u00e9gresser de y vers x, et toute substitution d&rsquo;un caract\u00e8re a par un caract\u00e8re b admet la substitution r\u00e9ciproque de b par a avec une pond\u00e9ration parfaitement isomorphe.<\/p>\n<p>Enfin, la fonction satisfait rigoureusement \u00e0 l&rsquo;in\u00e9galit\u00e9 triangulaire : pour toutes s\u00e9quences x, y et z, nous avons invariablement la relation d(x, z) inf\u00e9rieure ou \u00e9gale \u00e0 la somme de d(x, y) et de d(y, z). Cette propri\u00e9t\u00e9 math\u00e9matique est capitale d&rsquo;un point de vue algorithmique. Elle garantit qu&rsquo;il est impossible de r\u00e9duire le co\u00fbt d&rsquo;\u00e9dition global reliant deux cha\u00eenes en introduisant arbitrairement une cha\u00eene interm\u00e9diaire de transition. Sur le plan de la recherche informatique, le respect strict de l&rsquo;in\u00e9galit\u00e9 triangulaire autorise l&rsquo;indexation spatiale des dictionnaires lexicaux au sein de structures arborescentes sp\u00e9cialis\u00e9es, telles que les arbres de Burkhard-Keller (BK-trees) ou les Vantage-Point trees, permettant d&rsquo;effectuer des recherches de plus proches voisins sans devoir calculer la distance de mani\u00e8re exhaustive contre chaque \u00e9l\u00e9ment du corpus.<\/p>\n<h2>3. L&rsquo;environnement R et l&rsquo;\u00e9cosyst\u00e8me pour l&rsquo;analyse textuelle<\/h2>\n<h3>3.1 Limites des fonctions natives de manipulation de cha\u00eenes dans R<\/h3>\n<p>L&rsquo;environnement standard de R met \u00e0 disposition de l&rsquo;utilisateur un \u00e9ventail de fonctions primitives destin\u00e9es \u00e0 la manipulation s\u00e9quentielle des cha\u00eenes de caract\u00e8res. Des outils fondamentaux tels que nchar, qui renvoie le nombre de caract\u00e8res d&rsquo;une cha\u00eene, substr, qui permet l&rsquo;extraction ou la substitution de sous-cha\u00eenes d\u00e9limit\u00e9es par des indices fixes, ou encore chartr, qui applique des translations de symboles terme \u00e0 terme, constituent les briques de base de la syntaxe de manipulation textuelle. De m\u00eame, les fonctions de recherche par motifs r\u00e9guliers, incarn\u00e9es par grep, grepl et regmatches, offrent une grande flexibilit\u00e9 pour tester la pr\u00e9sence de structures syntaxiques formellement pr\u00e9visibles au sein de vecteurs atomiques.<\/p>\n<p>Cependant, d\u00e8s lors que l&rsquo;analyste se trouve confront\u00e9 \u00e0 des donn\u00e9es bruit\u00e9es, entach\u00e9es d&rsquo;erreurs d&rsquo;encodage ou n\u00e9cessitant une \u00e9valuation probabiliste d&rsquo;appariement flou, ce noyau natif r\u00e9v\u00e8le ses limites structurelles. Le moteur de R de base ne dispose d&rsquo;aucune impl\u00e9mentation optimis\u00e9e et vectoris\u00e9e de l&rsquo;algorithme d&rsquo;\u00e9dition de Levenshtein. Bien que la fonction native adist existe au sein du package utils fourni par d\u00e9faut avec la distribution de base de R, son architecture historique demeure restreinte sur le plan de la configurabilit\u00e9 des m\u00e9triques, de la gestion fine des encodages exotiques et de la flexibilit\u00e9 algorithmique globale face \u00e0 des charges massives.<\/p>\n<p>La tentation na\u00efve de compenser ces lacunes par l&rsquo;\u00e9criture manuelle d&rsquo;un algorithme de Wagner-Fischer au moyen de boucles imbriqu\u00e9es for en pur code interpr\u00e9t\u00e9 R se heurte imm\u00e9diatement au co\u00fbt computationnel prohibitif de l&rsquo;interpr\u00e9teur. En raison des m\u00e9canismes internes de gestion de la m\u00e9moire, de la v\u00e9rification dynamique des types et de la surcharge li\u00e9e \u00e0 l&rsquo;\u00e9valuation paresseuse des expressions, une boucle de programmation dynamique cod\u00e9e en R pur peut s&rsquo;av\u00e9rer plusieurs milliers de fois plus lente qu&rsquo;une routine compil\u00e9e. Pour des corpus comprenant des dizaines de milliers d&rsquo;occurrences textuelles, une telle approche artisanale paralyse irr\u00e9m\u00e9diablement les capacit\u00e9s de calcul de la machine h\u00f4te.<\/p>\n<h3>3.2 Architecture du package stringdist de Mark van der Loo<\/h3>\n<p>Afin de combler de mani\u00e8re d\u00e9finitive ce d\u00e9ficit de performance et d&rsquo;offrir \u00e0 la communaut\u00e9 scientifique une infrastructure de calcul m\u00e9trique de classe industrielle, le statisticien Mark van der Loo a con\u00e7u et d\u00e9velopp\u00e9 le package <a rel=\"noopener noreferrer\" href=\"https:\/\/cran.r-project.org\/package=stringdist\">stringdist<\/a>. Accessible librement via le Comprehensive R Archive Network (CRAN), cette biblioth\u00e8que logicielle s&rsquo;est impos\u00e9e comme la r\u00e9f\u00e9rence incontournable en mati\u00e8re d&rsquo;\u00e9valuation des distances textuelles dans l&rsquo;univers de programmation R. Son succ\u00e8s ph\u00e9nom\u00e9nal repose avant tout sur une scission architecturale \u00e9l\u00e9gante entre une interface utilisateur expressive en R et un c\u0153ur de calcul computationnel bas niveau int\u00e9gralement impl\u00e9ment\u00e9 en langage C ANSI compil\u00e9.<\/p>\n<p>L&rsquo;int\u00e9gration de routines C natives permet d&rsquo;ex\u00e9cuter les calculs de programmation dynamique directement au plus pr\u00e8s des registres du microprocesseur, \u00e9liminant int\u00e9gralement la surcharge interpr\u00e9tative de R. Les allocations de m\u00e9moire n\u00e9cessaires \u00e0 la construction des matrices de programmation dynamique sont optimis\u00e9es au niveau du tas syst\u00e8me, exploitant au maximum la r\u00e9duction spatiale \u00e0 deux lignes pour maintenir une empreinte m\u00e9moire microscopique lors des comparaisons scalaires ou vectorielles. De surcro\u00eet, le c\u0153ur algorithmique du package stringdist int\u00e8gre nativement la prise en charge du calcul parall\u00e8le multi-c\u0153urs gr\u00e2ce aux directives OpenMP, permettant d&rsquo;acc\u00e9l\u00e9rer de mani\u00e8re quasi lin\u00e9aire les op\u00e9rations matricielles massives sur les architectures informatiques modernes compos\u00e9es de multiples unit\u00e9s centrales.<\/p>\n<p>Au-del\u00e0 de ses performances brutes spectaculaires, la force du package stringdist r\u00e9side dans son unification conceptuelle. Plut\u00f4t que de disperser les m\u00e9triques au sein de fonctions disparates aux signatures incompatibles, l&rsquo;auteur a structur\u00e9 une interface de programmation (API) coh\u00e9rente et hautement modulaire. Au travers d&rsquo;une poign\u00e9e de fonctions m\u00e8res telles que stringdist et stringdistmatrix, l&rsquo;utilisateur a la possibilit\u00e9 de basculer instantan\u00e9ment de la m\u00e9trique de Levenshtein standard vers des dizaines d&rsquo;autres variantes algorithmiques, telles que les distances de Jaro-Winkler, de Damerau-Levenshtein, du q-gramme ou du cosinus, tout en maintenant un formalisme de param\u00e9trage parfaitement homog\u00e8ne.<\/p>\n<h3>3.3 Configuration rigoureuse de la session de travail<\/h3>\n<p>L&rsquo;ex\u00e9cution de travaux scientifiques impliquant la manipulation fine de donn\u00e9es textuelles exige une configuration m\u00e9thodologique rigoureuse de la session logicielle afin de garantir une reproductibilit\u00e9 absolue des r\u00e9sultats. Dans le cadre de l&rsquo;\u00e9cosyst\u00e8me R, la premi\u00e8re \u00e9tape consiste \u00e0 s&rsquo;assurer de la conformit\u00e9 de l&rsquo;environnement mat\u00e9riel et logiciel en contr\u00f4lant la version courante de R et en v\u00e9rifiant la disponibilit\u00e9 des compilateurs C n\u00e9cessaires \u00e0 l&rsquo;installation optimale des packages depuis les sources. L&rsquo;utilisation d&rsquo;outils d&rsquo;isolation d&rsquo;environnements, tels que le package renv, permet de figer l&rsquo;arbre des d\u00e9pendances et de consigner formellement les num\u00e9ros de version exacts de stringdist et des biblioth\u00e8ques associ\u00e9es.<\/p>\n<p>Un enjeu technique pr\u00e9pond\u00e9rant lors du calcul des distances d&rsquo;\u00e9dition r\u00e9side dans la gestion irr\u00e9prochable de l&rsquo;<a rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/UTF-8\">encodage des caract\u00e8res<\/a>. Les alphabets comprenant des signes diacritiques, des c\u00e9dilles, des ligatures ou des caract\u00e8res non latins sont particuli\u00e8rement vuln\u00e9rables aux corruptions de type mojibake lorsqu&rsquo;un fichier texte transite entre des syst\u00e8mes d&rsquo;exploitation aux configurations disparates (tels que Windows, macOS et les distributions GNU\/Linux). Dans le cadre de l&rsquo;analyse textuelle, une mauvaise interpr\u00e9tation d&rsquo;un caract\u00e8re accentu\u00e9 cod\u00e9 sur deux octets sous la norme UTF-8 peut conduire l&rsquo;algorithme \u00e0 quantifier artificiellement deux op\u00e9rations \u00e9l\u00e9mentaires d&rsquo;\u00e9dition l\u00e0 o\u00f9 une seule modification graphique \u00e9tait conceptuellement attendue. Il est donc imp\u00e9ratif de contraindre la locale syst\u00e8me et de forcer la conversion des vecteurs de cha\u00eenes en repr\u00e9sentation UTF-8 normalis\u00e9e d\u00e8s l&rsquo;importation initiale.<\/p>\n<p>Enfin, la configurabilit\u00e9 de la session doit int\u00e9grer la fixation d\u00e9terministe des options globales r\u00e9gissant la gestion des cha\u00eenes de caract\u00e8res. Depuis la version 4.0.0 de R, le param\u00e8tre stringsAsFactors est d\u00e9sactiv\u00e9 par d\u00e9faut lors de la cr\u00e9ation de structures de donn\u00e9es tabulaires, \u00e9liminant ainsi les conversions implicites et pernicieuses de colonnes textuelles en variables qualitatives factorielles. L&rsquo;analyste veillera \u00e0 maintenir cette convention afin que les arguments transmis aux routines de calcul m\u00e9trique conservent leur nature stricte de vecteurs de caract\u00e8res atomiques, \u00e9vitant les erreurs de conversion de types ou les comportements ind\u00e9termin\u00e9s au sein des flux de traitement analytique.<\/p>\n<h2>4. Prise en main du package stringdist : installation et syntaxe de base<\/h2>\n<h3>4.1 Installation et chargement de la biblioth\u00e8que<\/h3>\n<p>La proc\u00e9dure de d\u00e9ploiement du package stringdist s&rsquo;inscrit dans le flux de travail standardis\u00e9 de l&rsquo;\u00e9cosyst\u00e8me CRAN. L&rsquo;analyste proc\u00e8de \u00e0 l&rsquo;installation initiale du module en sollicitant la commande install.packages(\u00ab\u00a0stringdist\u00a0\u00bb) au sein de la console R. Cette instruction t\u00e9l\u00e9charge les archives binaires pr\u00e9compil\u00e9es adapt\u00e9es au syst\u00e8me d&rsquo;exploitation cible ou proc\u00e8de \u00e0 la compilation locale du code source C si l&rsquo;environnement dispose de la suite d&rsquo;outils de compilation appropri\u00e9e. Une fois l&rsquo;installation men\u00e9e \u00e0 son terme sans avertissement critique, le chargement de la biblioth\u00e8que au sein de la session active s&rsquo;effectue via l&rsquo;instruction library(stringdist).<\/p>\n<p>Il est scientifiquement recommand\u00e9 d&rsquo;inspecter syst\u00e9matiquement la version du package ainsi d\u00e9ploy\u00e9 en invoquant packageVersion(\u00ab\u00a0stringdist\u00a0\u00bb). Cette pr\u00e9caution garantit que les fonctionnalit\u00e9s r\u00e9centes d&rsquo;optimisation multi-thread\u00e9es et les correctifs algorithmiques sont effectivement op\u00e9rationnels sur la machine d&rsquo;analyse. La documentation interne de l&rsquo;ensemble des routines peut \u00eatre consult\u00e9e de mani\u00e8re exhaustive en ex\u00e9cutant help(package = \u00ab\u00a0stringdist\u00a0\u00bb), ce qui permet d&rsquo;acc\u00e9der au catalogue formel des arguments, aux sp\u00e9cifications math\u00e9matiques des fonctions d&rsquo;\u00e9valuation et aux r\u00e9f\u00e9rences bibliographiques associ\u00e9es aux algorithmes impl\u00e9ment\u00e9s.<\/p>\n<p>Dans un contexte d&rsquo;ing\u00e9nierie de donn\u00e9es robuste, l&rsquo;analyste combinera fr\u00e9quemment le chargement de stringdist avec des utilitaires de diagnostic syst\u00e8me. Il s&rsquo;assurera notamment de la bonne d\u00e9tection du nombre de c\u0153urs de calcul accessibles pour OpenMP en interrogeant les fonctions de d\u00e9tection mat\u00e9rielle, assurant ainsi que les param\u00e8tres d&rsquo;ex\u00e9cution parall\u00e8le seront dimensionn\u00e9s de mani\u00e8re idoine en fonction des capacit\u00e9s physiques de la station de travail ou du cluster de calcul haute performance mobilis\u00e9.<\/p>\n<h3>4.2 Param\u00e9trage fondamental de la fonction stringdist()<\/h3>\n<p>La fonction ma\u00eetresse du package pour la comparaison vectorielle simple s&rsquo;intitule stringdist(). Sa signature g\u00e9n\u00e9rale pr\u00e9sente une architecture intuitive tout en offrant un contr\u00f4le param\u00e9trique extr\u00eamement pouss\u00e9. Les deux premiers arguments obligatoires, traditionnellement nomm\u00e9s a et b, acceptent des vecteurs de cha\u00eenes de caract\u00e8res de longueurs arbitraires. Lorsque deux cha\u00eenes scalaires unitaires sont transmises, la fonction proc\u00e8de \u00e0 l&rsquo;\u00e9valuation directe de leur divergence d&rsquo;\u00e9dition. Si des vecteurs de dimensions distinctes sont fournis, la fonction applique rigoureusement les r\u00e8gles classiques de recyclage vectoriel de R, permettant d&rsquo;effectuer des comparaisons s\u00e9rielles continues avec une concision syntaxique absolue.<\/p>\n<p>L&rsquo;argument cl\u00e9 d\u00e9terminant le comportement math\u00e9matique de la routine est le param\u00e8tre method. Pour forcer l&rsquo;utilisation de la m\u00e9trique de Levenshtein classique telle que th\u00e9oris\u00e9e en 1965, l&rsquo;utilisateur doit obligatoirement sp\u00e9cifier method = \u00ab\u00a0lv\u00a0\u00bb. Si ce param\u00e8tre est omis, la fonction applique par d\u00e9faut la m\u00e9thode \u00ab\u00a0osa\u00a0\u00bb (Optimal String Alignment), qui int\u00e8gre la transposition de caract\u00e8res adjacents et s&rsquo;\u00e9carte par cons\u00e9quent de la d\u00e9finition formelle de Levenshtein pure. Le choix explicite et rigoureux de la cha\u00eene d&rsquo;identification method = \u00ab\u00a0lv\u00a0\u00bb constitue donc le garant de l&rsquo;int\u00e9grit\u00e9 th\u00e9orique de l&rsquo;analyse.<\/p>\n<p>Le type de retour produit par la fonction stringdist() est syst\u00e9matiquement un vecteur num\u00e9rique de nombres r\u00e9els ou d&rsquo;entiers repr\u00e9sentant la distance quantifi\u00e9e entre chaque paire d&rsquo;\u00e9l\u00e9ments compar\u00e9s. Ce vecteur conserve une structure dimensionnelle rigoureusement index\u00e9e sur la longueur maximale r\u00e9sultant du recyclage des vecteurs d&rsquo;entr\u00e9e, ce qui facilite son int\u00e9gration transparente et imm\u00e9diate au sein de structures de donn\u00e9es tabulaires plus vastes, telles que les data.frames de base ou les tibbles modernes.<\/p>\n<h3>4.3 Gestion des cas limites et valeurs particuli\u00e8res<\/h3>\n<p>L&rsquo;analyse empirique des donn\u00e9es textuelles confronte in\u00e9vitablement les algorithmes \u00e0 des situations limites susceptibles d&rsquo;induire des comportements ind\u00e9termin\u00e9s ou des plantages applicatifs si elles ne sont pas anticip\u00e9es avec rigueur. Le premier cas limite classique concerne la comparaison impliquant une cha\u00eene vide, not\u00e9e \u00ab\u00a0\u00a0\u00bb en syntaxe R, pr\u00e9sentant une longueur \u00e9gale \u00e0 0 caract\u00e8re. Conform\u00e9ment aux axiomes de la m\u00e9trique d&rsquo;\u00e9dition, la distance s\u00e9parant une cha\u00eene vide d&rsquo;une cha\u00eene textuelle quelconque de longueur n correspond rigoureusement \u00e0 la valeur n, traduisant le fait que n op\u00e9rations d&rsquo;insertion unitaire sont requises pour forger la s\u00e9quence compl\u00e8te \u00e0 partir du n\u00e9ant symbolique. Lorsque deux cha\u00eenes vides sont mutuellement compar\u00e9es, la fonction stringdist(a = \u00ab\u00a0\u00a0\u00bb, b = \u00ab\u00a0\u00a0\u00bb, method = \u00ab\u00a0lv\u00a0\u00bb) renvoie logiquement et sans ambigu\u00eft\u00e9 la valeur 0.<\/p>\n<p>Le second enjeu majeur a trait au traitement syst\u00e9matique des valeurs manquantes, d\u00e9sign\u00e9es conventionnellement par le symbole NA (Not Available) au sein de l&rsquo;environnement R. Par conception, le package stringdist applique le principe de propagation logique des valeurs inconnues : toute comparaison d&rsquo;\u00e9dition impliquant au moins une op\u00e9rande d\u00e9finie \u00e0 NA produira invariablement la valeur NA_real_ comme r\u00e9sultat de sortie. Il convient toutefois de souligner l&rsquo;existence de param\u00e8tres avanc\u00e9s permettant de modifier cette politique de propagation si des protocoles sp\u00e9cifiques l&rsquo;exigent, bien que le maintien du statut manquant constitue la norme m\u00e9thodologique la plus prudente sur le plan de l&rsquo;int\u00e9grit\u00e9 inf\u00e9rentielle.<\/p>\n<p>Enfin, la sensibilit\u00e9 \u00e0 la casse (distinction imp\u00e9rative entre les lettres minuscules et les majuscules) constitue un facteur d\u00e9terminant du r\u00e9sultat m\u00e9trique. Dans son fonctionnement par d\u00e9faut, la m\u00e9thode de Levenshtein au sein de stringdist traite le caract\u00e8re minuscule \u00ab\u00a0a\u00a0\u00bb et le caract\u00e8re majuscule \u00ab\u00a0A\u00a0\u00bb comme deux symboles totalement distincts issus de l&rsquo;alphabet machine, imposant ainsi un co\u00fbt de substitution unitaire \u00e9gal \u00e0 1 pour les aligner. L&rsquo;analyste doit \u00eatre pleinement conscient de cette s\u00e9paration binaire : \u00e0 d\u00e9faut d&rsquo;une \u00e9tape de normalisation orthographique pr\u00e9alable, des variations typographiques purement superficielles peuvent \u00eatre comptabilis\u00e9es \u00e0 tort comme des divergences morphologiques substantielles.<\/p>\n<h2>5. Exemple pratique 1 : Calcul de la distance de Levenshtein entre deux cha\u00eenes simples<\/h2>\n<h3>5.1 Cas d&rsquo;\u00e9cole : transition orthographique de &lsquo;party&rsquo; \u00e0 &lsquo;park&rsquo;<\/h3>\n<p>Pour appr\u00e9hender concr\u00e8tement le d\u00e9ploiement algorithmique de la m\u00e9trique et saisir les transformations \u00e9l\u00e9mentaires qui s&rsquo;op\u00e8rent lors de la r\u00e9solution de la r\u00e9currence de Bellman, il est p\u00e9dagogique d&rsquo;\u00e9tudier un cas d&rsquo;\u00e9cole embl\u00e9matique. Analysons la transition orthographique n\u00e9cessaire pour transformer la cha\u00eene source \u00ab\u00a0party\u00a0\u00bb en la cha\u00eene cible \u00ab\u00a0park\u00a0\u00bb. La cha\u00eene initiale se compose de cinq symboles cons\u00e9cutifs (p, a, r, t, y), tandis que la s\u00e9quence terminale est constitu\u00e9e de quatre symboles (p, a, r, k). Une observation visuelle imm\u00e9diate r\u00e9v\u00e8le une conservation parfaite du pr\u00e9fixe commun trilit\u00e8re form\u00e9 par les caract\u00e8res \u00ab\u00a0par\u00a0\u00bb.<\/p>\n<figure class=\"wpt-preserved-image\"><img fetchpriority=\"high\" decoding=\"async\" src=\"http:\/\/french.arabpsychology.com\/wp-content\/uploads\/2026\/09\/levenshtein1.png\" alt=\"Levenshtein distance example\" \/><figcaption>Levenshtein distance example<\/figcaption><\/figure>\n<p>L&rsquo;effort transformationnel se concentre exclusivement sur les segments terminaux des deux unit\u00e9s lexicales. Pour op\u00e9rer la mutation de la quatri\u00e8me position, le caract\u00e8re \u00ab\u00a0t\u00a0\u00bb de la cha\u00eene source doit \u00eatre remplac\u00e9 par le caract\u00e8re \u00ab\u00a0k\u00a0\u00bb de la cha\u00eene cible. Cette premi\u00e8re intervention mat\u00e9rialise une op\u00e9ration de substitution unitaire, dont le co\u00fbt conventionnel est fix\u00e9 \u00e0 1. \u00c0 ce stade interm\u00e9diaire de l&rsquo;\u00e9dition, la cha\u00eene transform\u00e9e prend la forme hypoth\u00e9tique \u00ab\u00a0parky\u00a0\u00bb. Il subsiste d\u00e8s lors un symbole exc\u00e9dentaire en cinqui\u00e8me position, \u00e0 savoir le caract\u00e8re \u00ab\u00a0y\u00a0\u00bb, qui ne trouve aucun homologue au sein du mot cible. La seconde \u00e9tape requiert par cons\u00e9quent une op\u00e9ration de suppression unitaire portant sur ce caract\u00e8re final, consommant une seconde unit\u00e9 de co\u00fbt d&rsquo;\u00e9dition.<\/p>\n<p>La cha\u00eene r\u00e9sultante correspond alors fid\u00e8lement au mot \u00ab\u00a0park\u00a0\u00bb. Aucune autre trajectoire de transformation ne permet d&rsquo;accomplir ce passage en consommant un nombre inf\u00e9rieur d&rsquo;op\u00e9rations \u00e9l\u00e9mentaires. La sommation arithm\u00e9tique des co\u00fbts associ\u00e9s aux modifications irr\u00e9ductibles identifi\u00e9es (une substitution unitaire et une suppression unitaire) \u00e9tablit formellement que la distance de Levenshtein minimale s\u00e9parant \u00ab\u00a0party\u00a0\u00bb de \u00ab\u00a0park\u00a0\u00bb est rigoureusement \u00e9gale \u00e0 2. Ce r\u00e9sultat g\u00e9om\u00e9trique quantifie sans \u00e9quivoque la proximit\u00e9 morphologique de ces deux unit\u00e9s lexicales au sein de l&rsquo;espace d&rsquo;\u00e9dition discret.<\/p>\n<h3>5.2 Code comment\u00e9 et ex\u00e9cution pas \u00e0 pas dans RStudio<\/h3>\n<p>La transcription de cette d\u00e9monstration formelle au sein de l&rsquo;environnement RStudio se caract\u00e9rise par une simplicit\u00e9 syntaxique exemplaire. L&rsquo;analyste proc\u00e8de dans un premier temps \u00e0 l&rsquo;affectation formelle des cha\u00eenes d&rsquo;int\u00e9r\u00eat au sein de deux variables scalaires distinctes \u00e0 l&rsquo;aide de l&rsquo;op\u00e9rateur d&rsquo;assignation standard. Nous d\u00e9clarons la variable mot_source recevant la valeur textuelle \u00ab\u00a0party\u00a0\u00bb et la variable mot_cible recevant la cha\u00eene \u00ab\u00a0park\u00a0\u00bb. Cette pratique consistant \u00e0 encapsuler les termes dans des identifiants explicites renforce la clart\u00e9 et la maintenabilit\u00e9 des scripts d&rsquo;analyse.<\/p>\n<p>Dans un second temps, nous invoquons directement la routine principale du package en renseignant minutieusement l&rsquo;ensemble des arguments requis : resultat_distance &lt;- stringdist(a = mot_source, b = mot_cible, method = \u00ab\u00a0lv\u00a0\u00bb). L&rsquo;ex\u00e9cution de cette ligne de commande commande au compilateur C sous-jacent d&rsquo;allouer la matrice de Wagner-Fischer, de renseigner les conditions initiales aux fronti\u00e8res, et de faire converger le processus dynamique vers la cellule de co\u00fbt minimal. L&rsquo;inspection imm\u00e9diate de l&rsquo;objet resultat_distance via la console de R affiche sans surprise l&rsquo;entier num\u00e9rique 2.<\/p>\n<p>Il est particuli\u00e8rement instructif de valider la propri\u00e9t\u00e9 fondamentale de sym\u00e9trie topologique en ex\u00e9cutant la commande inverse, \u00e0 savoir stringdist(a = mot_cible, b = mot_source, method = \u00ab\u00a0lv\u00a0\u00bb). La console renvoie \u00e0 nouveau rigoureusement la valeur 2. Dans cette configuration r\u00e9trospective, le chemin d&rsquo;\u00e9dition optimal consiste d&rsquo;abord \u00e0 ins\u00e9rer le caract\u00e8re \u00ab\u00a0y\u00a0\u00bb en fin de mot, puis \u00e0 substituer le caract\u00e8re \u00ab\u00a0k\u00a0\u00bb par le caract\u00e8re \u00ab\u00a0t\u00a0\u00bb. Bien que la nature des op\u00e9rations individuelles soit invers\u00e9e (l&rsquo;insertion succ\u00e9dant \u00e0 la suppression), la m\u00e9trique globale conserve une invariance absolue, d\u00e9montrant ainsi la conformit\u00e9 de l&rsquo;impl\u00e9mentation de stringdist avec les propri\u00e9t\u00e9s de sym\u00e9trie de l&rsquo;espace m\u00e9trique.<\/p>\n<h3>5.3 Pond\u00e9ration personnalis\u00e9e des co\u00fbts d&rsquo;\u00e9dition<\/h3>\n<p>L&rsquo;hypoth\u00e8se classique d&rsquo;une \u00e9quipond\u00e9ration stricte des op\u00e9rations \u00e9l\u00e9mentaires d&rsquo;\u00e9dition, o\u00f9 chaque modification se voit affecter une p\u00e9nalit\u00e9 identique fix\u00e9e \u00e0 1, constitue une simplification th\u00e9orique commode mais parfois inadapt\u00e9e \u00e0 la r\u00e9alit\u00e9 empirique de certains domaines de recherche. En linguistique appliqu\u00e9e, par exemple, la substitution d&rsquo;une voyelle par une autre au sein d&rsquo;une racine morphologique peut \u00eatre per\u00e7ue comme une alt\u00e9ration phon\u00e9tique beaucoup plus l\u00e9g\u00e8re et probable que la suppression radicale d&rsquo;une consonne fondamentale. De m\u00eame, en bio-informatique, les taux de mutation par d\u00e9l\u00e9tion ou insertion ne s&rsquo;alignent pas n\u00e9cessairement sur les fr\u00e9quences de transition nucl\u00e9otidique.<\/p>\n<p>Pour r\u00e9pondre \u00e0 cette exigence de personnalisation analytique, la fonction stringdist() int\u00e8gre le param\u00e8tre avanc\u00e9 weight. Ce param\u00e8tre attend un vecteur num\u00e9rique de trois valeurs r\u00e9elles positives sp\u00e9cifiant respectivement et successivement les p\u00e9nalit\u00e9s associ\u00e9es aux op\u00e9rations d&rsquo;insertion, de suppression et de substitution. Par d\u00e9faut, ce triplet de pond\u00e9ration est initialis\u00e9 \u00e0 c(1, 1, 1). Si un chercheur souhaite concevoir un protocole o\u00f9 l&rsquo;alt\u00e9ration de substitution est lourdement p\u00e9nalis\u00e9e par rapport aux ajustements de longueur, il peut assigner un vecteur asym\u00e9trique tel que weight = c(1, 1, 2.5).<\/p>\n<p>Reprenons notre cas d&rsquo;\u00e9cole reliant \u00ab\u00a0party\u00a0\u00bb \u00e0 \u00ab\u00a0park\u00a0\u00bb sous cette nouvelle contrainte pond\u00e9r\u00e9e. Le chemin d&rsquo;\u00e9dition optimal identifi\u00e9 pr\u00e9c\u00e9demment comprend une suppression (co\u00fbt unitaire 1) et une substitution (d\u00e9sormais p\u00e9nalis\u00e9e \u00e0 hauteur de 2.5). L&rsquo;ex\u00e9cution de la commande stringdist(\u00ab\u00a0party\u00a0\u00bb, \u00ab\u00a0park\u00a0\u00bb, method = \u00ab\u00a0lv\u00a0\u00bb, weight = c(1, 1, 2.5)) engendre une r\u00e9\u00e9valuation instantan\u00e9e de la m\u00e9trique, laquelle produit d\u00e9sormais un score de distance composite de 3.5. La flexibilit\u00e9 de cette param\u00e9trisation conf\u00e8re \u00e0 l&rsquo;analyste un pouvoir de mod\u00e9lisation consid\u00e9rable, lui permettant d&rsquo;ajuster l&rsquo;espace m\u00e9trique aux propri\u00e9t\u00e9s distributionnelles et morphologiques pr\u00e9cises de son objet d&rsquo;investigation.<\/p>\n<h2>6. Exemple pratique 2 : Comparaison vectorielle et traitement par lots dans R<\/h2>\n<h3>6.1 Vectorisation native et comparaison d&rsquo;un terme \u00e0 une liste<\/h3>\n<p>L&rsquo;un des atouts architecturaux les plus puissants du langage R r\u00e9side dans son paradigme de vectorisation native. Contrairement aux environnements de d\u00e9veloppement imp\u00e9ratifs traditionnels qui contraignent le programmeur \u00e0 formaliser des boucles it\u00e9ratives s\u00e9quentielles pour parcourir les collections de donn\u00e9es, R traite intrins\u00e8quement les vecteurs comme des entit\u00e9s globales. Le package stringdist exploite int\u00e9gralement cette philosophie computationnelle : ses fonctions sont nativement con\u00e7ues pour accepter des collections vectorielles \u00e9tendues en lieu et place de simples scalaires isol\u00e9s, op\u00e9rant ainsi une transition fluide vers le traitement par lots \u00e0 haute performance.<\/p>\n<p>Consid\u00e9rons la situation concr\u00e8te o\u00f9 l&rsquo;analyste souhaite mesurer le degr\u00e9 de divergence d&rsquo;un lemme fautif ou suspect, par exemple le mot cible \u00ab\u00a0chovalle\u00a0\u00bb, en le comparant simultan\u00e9ment \u00e0 une liste normative de termes zoologiques comprenant \u00ab\u00a0cheval\u00a0\u00bb, \u00ab\u00a0chameau\u00a0\u00bb, \u00ab\u00a0chouette\u00a0\u00bb, \u00ab\u00a0chien\u00a0\u00bb et \u00ab\u00a0chevreuil\u00a0\u00bb. L&rsquo;ex\u00e9cution de la commande vectorielle stringdist(a = \u00ab\u00a0chovalle\u00a0\u00bb, b = c(\u00ab\u00a0cheval\u00a0\u00bb, \u00ab\u00a0chameau\u00a0\u00bb, \u00ab\u00a0chouette\u00a0\u00bb, \u00ab\u00a0chien\u00a0\u00bb, \u00ab\u00a0chevreuil\u00a0\u00bb), method = \u00ab\u00a0lv\u00a0\u00bb) ne requiert aucune boucle explicite. En coulisses, le moteur compil\u00e9 en C proc\u00e8de au recyclage de l&rsquo;op\u00e9rande scalaire pour \u00e9valuer de fa\u00e7on s\u00e9quentielle et optimis\u00e9e l&rsquo;ensemble des distances d&rsquo;\u00e9dition associ\u00e9es.<\/p>\n<p>La sortie g\u00e9n\u00e9r\u00e9e par cette instruction est imm\u00e9diatement mat\u00e9rialis\u00e9e sous la forme d&rsquo;un vecteur num\u00e9rique complet, o\u00f9 chaque position correspond rigoureusement \u00e0 l&rsquo;indice du mot homologue dans le vocabulaire cible. L&rsquo;\u00e9limination radicale des boucles de haut niveau en R garantit non seulement une clart\u00e9 syntaxique remarquable, mais permet \u00e9galement d&rsquo;atteindre des vitesses d&rsquo;ex\u00e9cution maximales, les it\u00e9rations \u00e9tant d\u00e9port\u00e9es au niveau mat\u00e9riel par le code binaire compil\u00e9.<\/p>\n<h3>6.2 Identification du voisin le plus proche au sein d&rsquo;un dictionnaire<\/h3>\n<p>L&rsquo;\u00e9tape succ\u00e9dant imm\u00e9diatement au calcul des distances vectorielles consiste fr\u00e9quemment \u00e0 identifier l&rsquo;\u00e9l\u00e9ment du vocabulaire qui minimise la divergence textuelle, mat\u00e9rialisant ainsi la recherche du plus proche voisin orthographique. Pour automatiser cette extraction avec \u00e9l\u00e9gance au sein de R, nous combinons la sortie m\u00e9trique de stringdist() avec les fonctions d&rsquo;indexation conditionnelle de base, principalement which.min(). Cette fonction utilitaire inspecte le vecteur num\u00e9rique r\u00e9sultant et retourne l&rsquo;indice spatial correspondant \u00e0 la premi\u00e8re occurrence de la valeur minimale observ\u00e9e.<\/p>\n<p>Appliqu\u00e9e \u00e0 notre ensemble zoologique, l&rsquo;instruction indice_optimal &lt;- which.min(distances_calculees) isole pr\u00e9cis\u00e9ment l&rsquo;index positionnel du terme pr\u00e9sentant la divergence d&rsquo;\u00e9dition la plus faible. En utilisant cet indice pour sous-\u00e9chantillonner le vecteur de r\u00e9f\u00e9rence original dictionnaire[indice_optimal], l&rsquo;analyste extrait instantan\u00e9ment le mot \u00ab\u00a0cheval\u00a0\u00bb, dont la distance minimale est de 2 (r\u00e9sultant de la substitution de la lettre \u00ab\u00a0o\u00a0\u00bb par \u00ab\u00a0e\u00a0\u00bb et de la suppression du caract\u00e8re \u00ab\u00a0l\u00a0\u00bb redondant). Cette routine constitue le noyau algorithmique de tout syst\u00e8me \u00e9l\u00e9mentaire de correction orthographique automatis\u00e9e.<\/p>\n<p>Toutefois, une m\u00e9thodologie analytique rigoureuse exige d&rsquo;anticiper la pr\u00e9sence potentielle d&rsquo;ex \u00e6quo, c&rsquo;est-\u00e0-dire de multiples termes \u00e9quidistants de la cha\u00eene cible au sein du dictionnaire. Dans ce cas de figure, la fonction which.min() pr\u00e9sente la limitation de ne renvoyer arbitrairement que la premi\u00e8re occurrence rencontr\u00e9e. Pour lever cette incertitude et pr\u00e9server l&rsquo;int\u00e9grit\u00e9 de l&rsquo;exploration lexicale, il est pr\u00e9f\u00e9rable de mobiliser l&rsquo;expression logique dictionnaire[distances_calculees == min(distances_calculees)]. Cette formulation retourne l&rsquo;ensemble exhaustif des candidats partageant la proximit\u00e9 minimale, permettant au chercheur d&rsquo;appliquer ult\u00e9rieurement des crit\u00e8res de d\u00e9partage plus subtils, tels que la fr\u00e9quence d&rsquo;usage lexicale ou le contexte syntaxique imm\u00e9diat.<\/p>\n<h3>6.3 Int\u00e9gration dans un flux de travail moderne avec dplyr<\/h3>\n<p>Dans l&rsquo;ing\u00e9nierie de donn\u00e9es contemporaine sous R, les op\u00e9rations d&rsquo;analyse textuelle ne s&rsquo;effectuent que rarement sur des vecteurs orphelins d\u00e9connect\u00e9s de leur contexte d&rsquo;observation. Elles s&rsquo;ins\u00e8rent le plus souvent au c\u0153ur de pipelines de manipulation \u00e9labor\u00e9s s&rsquo;appuyant sur l&rsquo;\u00e9cosyst\u00e8me Tidyverse, et plus sp\u00e9cifiquement sur le package <a rel=\"noopener noreferrer\" href=\"https:\/\/dplyr.tidyverse.org\/\">dplyr<\/a>. Gr\u00e2ce \u00e0 sa vectorisation irr\u00e9prochable, la fonction stringdist() s&rsquo;int\u00e8gre harmonieusement au sein des verbes de transformation tabulaire standard sans n\u00e9cessiter d&rsquo;adaptateurs complexes.<\/p>\n<p>Imaginons un jeu de donn\u00e9es exp\u00e9rimental stock\u00e9 sous la forme d&rsquo;un tibble, documentant les r\u00e9ponses fournies par des participants lors d&rsquo;une t\u00e2che de d\u00e9nomination rapide d&rsquo;images. Ce tableau comporte une colonne identifiant le participant, une colonne transcription_produite contenant la saisie brute, et une colonne cible_attendue contenant la r\u00e9ponse canonique correcte. L&rsquo;analyste peut quantifier instantan\u00e9ment l&rsquo;exactitude de la restitution lexicale pour l&rsquo;ensemble des observations en mobilisant la fonction mutate() : donnees_analysees &lt;- donnees_brutes %&gt;% mutate(ecart_levenshtein = stringdist(transcription_produite, cible_attendue, method = \u00ab\u00a0lv\u00a0\u00bb)).<\/p>\n<p>Cette syntaxe d\u00e9clarative permet ensuite de cha\u00eener imm\u00e9diatement des op\u00e9rations d&rsquo;agr\u00e9gation statistique ou de filtrage conditionnel. Il devient par exemple trivial d&rsquo;isoler les productions textuelles mod\u00e9r\u00e9ment alt\u00e9r\u00e9es pour une inspection qualitative approfondie en appliquant un filtre s\u00e9lectif : filter(ecart_levenshtein &gt; 0 &amp; ecart_levenshtein &lt;= 2). De m\u00eame, l&rsquo;adjonction d&rsquo;un tri hi\u00e9rarchique via arrange(desc(ecart_levenshtein)) permet de r\u00e9ordonner l&rsquo;ensemble du corpus pour identifier imm\u00e9diatement les cas de d\u00e9viance extr\u00eame ou les anomalies de transcription les plus s\u00e9v\u00e8res, garantissant ainsi un contr\u00f4le qualit\u00e9 d&rsquo;une efficacit\u00e9 chirurgicale.<\/p>\n<h2>7. Exemple pratique 3 : Calcul de matrices de distance pour l&rsquo;analyse lexicale<\/h2>\n<h3>7.1 G\u00e9n\u00e9ration de matrices compl\u00e8tes avec stringdistmatrix()<\/h3>\n<p>Tandis que la fonction stringdist() r\u00e9alise des comparaisons terme \u00e0 terme en appliquant les r\u00e8gles de recyclage vectoriel, certaines investigations structurales exigent la comparaison crois\u00e9e et exhaustive de chaque \u00e9l\u00e9ment d&rsquo;un vocabulaire contre tous les autres membres d&rsquo;un ensemble textuel. Pour satisfaire ce besoin analytique fondamental sans contraindre l&rsquo;utilisateur \u00e0 impl\u00e9menter des produits cart\u00e9siens fastidieux, le package met \u00e0 disposition la fonction d\u00e9di\u00e9e stringdistmatrix(). Cette derni\u00e8re produit en sortie une v\u00e9ritable matrice bidimensionnelle regroupant l&rsquo;ensemble des distances d&rsquo;\u00e9dition possibles.<\/p>\n<p>Lorsque la fonction stringdistmatrix(a, method = \u00ab\u00a0lv\u00a0\u00bb) est invoqu\u00e9e en lui passant un unique vecteur textuel de longueur p, elle g\u00e9n\u00e8re une matrice carr\u00e9e de dimensions p par p. Chaque cellule matricielle M(i, j) contient alors la distance de Levenshtein s\u00e9parant le i-\u00e8me mot du j-\u00e8me mot du vecteur d&rsquo;entr\u00e9e. Par construction math\u00e9matique, la diagonale principale d&rsquo;une telle matrice ne contient que des z\u00e9ros stricts, mat\u00e9rialisant l&rsquo;identit\u00e9 des indiscernables, tandis que les triangles sup\u00e9rieur et inf\u00e9rieur s&rsquo;organisent en parfaite sym\u00e9trie miroir conform\u00e9ment aux propri\u00e9t\u00e9s m\u00e9triques pr\u00e9c\u00e9demment d\u00e9montr\u00e9es.<\/p>\n<p>De surcro\u00eet, la fonction permet de transmettre deux ensembles lexicaux distincts a et b pr\u00e9sentant respectivement des longueurs p et q. Dans cette configuration, stringdistmatrix(a, b, method = \u00ab\u00a0lv\u00a0\u00bb) engendre une matrice rectangulaire de dimensions p par q. Ce cas d&rsquo;usage s&rsquo;av\u00e8re particuli\u00e8rement f\u00e9cond lorsque l&rsquo;analyste cherche \u00e0 projeter un vocabulaire exp\u00e9rimental nouveau sur un lexique de r\u00e9f\u00e9rence normatif \u00e9tabli au pr\u00e9alable, offrant ainsi une vision globale et tabul\u00e9e de l&rsquo;ensemble des appariements potentiels au sein d&rsquo;une structure de donn\u00e9es math\u00e9matiquement optimis\u00e9e.<\/p>\n<h3>7.2 Conversion de la matrice au format objet &lsquo;dist&rsquo;<\/h3>\n<p>Bien que les matrices carr\u00e9es standard issues de stringdistmatrix() fournissent une repr\u00e9sentation explicite et intuitive de l&rsquo;espace m\u00e9trique, leur structure redondante pose des limites \u00e9videntes en termes de consommation de m\u00e9moire vive. En effet, stocker simultan\u00e9ment la diagonale nulle et les deux triangles sym\u00e9triques \u00e9quivaut \u00e0 dupliquer inutilement l&rsquo;information g\u00e9om\u00e9trique. Dans l&rsquo;\u00e9cosyst\u00e8me R, la classe d&rsquo;objets standard d\u00e9di\u00e9e \u00e0 la repr\u00e9sentation formelle des dissimilarit\u00e9s triangulaires est la classe \u00ab\u00a0dist\u00a0\u00bb.<\/p>\n<p>Pour convertir une matrice de distance de Levenshtein carr\u00e9e en une structure d&rsquo;analyse spatiale canonique, il convient d&rsquo;appliquer la fonction de conversion as.dist(). L&rsquo;instruction matrice_compacte &lt;- as.dist(matrice_brute) \u00e9lague instantan\u00e9ment les redondances diagonales et sup\u00e9rieures, ne conservant en m\u00e9moire que le vecteur condens\u00e9 repr\u00e9sentant le triangle inf\u00e9rieur strict. Cette transformation all\u00e8ge l&#8217;empreinte m\u00e9moire d&rsquo;environ la moiti\u00e9 du volume matriciel initial, ce qui s&rsquo;av\u00e8re crucial lorsque l&rsquo;analyse porte sur des lexiques comprenant plusieurs milliers d&rsquo;unit\u00e9s lexicales distinctes.<\/p>\n<p>Au-del\u00e0 du gain spatial ind\u00e9niable, la conversion au format \u00ab\u00a0dist\u00a0\u00bb conf\u00e8re \u00e0 l&rsquo;objet r\u00e9sultant une interop\u00e9rabilit\u00e9 absolue avec l&rsquo;ensemble des algorithmes de statistique multivari\u00e9e et de classification non supervis\u00e9e int\u00e9gr\u00e9s au socle de base de R. Les fonctions d&rsquo;ordination multidimensionnelle (telles que cmdscale pour le positionnement multidimensionnel classique) et les moteurs de segmentation hi\u00e9rarchique reconnaissent nativement cette classe d&rsquo;objets, assurant une passerelle technique transparente entre le calcul d&rsquo;\u00e9dition textuelle et l&rsquo;exploration g\u00e9om\u00e9trique avanc\u00e9e.<\/p>\n<h3>7.3 Exploration visuelle par classification hi\u00e9rarchique (dendrogramme)<\/h3>\n<p>L&rsquo;une des exploitations analytiques les plus stimulantes d&rsquo;une matrice de Levenshtein condens\u00e9e r\u00e9side dans la classification ascendante hi\u00e9rarchique des formes lexicales. L&rsquo;objectif consiste \u00e0 agr\u00e9ger progressivement les mots pr\u00e9sentant les plus faibles co\u00fbts d&rsquo;\u00e9dition mutuels afin de r\u00e9v\u00e9ler l&rsquo;architecture taxinomique sous-jacente du corpus \u00e9tudi\u00e9. Pour concr\u00e9tiser cette mod\u00e9lisation, l&rsquo;analyste mobilise la fonction fondamentale hclust() en lui injectant directement l&rsquo;objet de dissimilarit\u00e9 converti : classification_orthographique &lt;- hclust(matrice_compacte, method = \u00ab\u00a0ward.D2\u00a0\u00bb).<\/p>\n<p>Le choix de la m\u00e9thode d&rsquo;agr\u00e9gation conditionne la topologie de la classification. Si le crit\u00e8re du lien complet privil\u00e9gie des grappes compactes aux diam\u00e8tres m\u00e9triques restreints, le crit\u00e8re d&rsquo;inertie minimale de Ward (ward.D2) tend \u00e0 structurer des partitions \u00e9quilibr\u00e9es et particuli\u00e8rement lisibles en minimisant la variance intra-groupe \u00e0 chaque \u00e9tape de fusion. Le passage de cette mod\u00e9lisation statistique \u00e0 sa restitution graphique s&rsquo;effectue simplement via l&rsquo;instruction g\u00e9n\u00e9rique plot(classification_orthographique), qui projette instantan\u00e9ment le dendrogramme associ\u00e9 sur le p\u00e9riph\u00e9rique visuel de R.<\/p>\n<p>L&rsquo;observation du dendrogramme r\u00e9sultant permet de visualiser avec une clart\u00e9 remarquable les proximit\u00e9s g\u00e9n\u00e9alogiques et d\u00e9rivationnelles des mots. Les lex\u00e8mes partageant des racines \u00e9tymologiques communes, des flexions grammaticales similaires ou des compositions morphologiques apparent\u00e9es s&rsquo;associent spontan\u00e9ment au sein des branches inf\u00e9rieures de l&rsquo;arbre avant de se fondre dans des macro-structures plus h\u00e9t\u00e9rog\u00e8nes. Cette m\u00e9thodologie d&rsquo;exploration visuelle fournit aux linguistes et aux humanistes num\u00e9riques un outil de synth\u00e8se quantitatif exceptionnel pour cartographier le paysage morphologique de corpus textuels volumineux.<\/p>\n<h2>8. Applications en psycholinguistique et sciences cognitives computationnelles<\/h2>\n<h3>8.1 Mod\u00e9lisation du voisinage orthographique et acc\u00e8s au lexique mental<\/h3>\n<p>En psycholinguistique cognitive, la question de l&rsquo;acc\u00e8s au lexique mental constitue un domaine d&rsquo;investigation central depuis plusieurs d\u00e9cennies. Comment le syst\u00e8me visuel et c\u00e9r\u00e9bral humain parvient-il, en quelques centaines de millisecondes, \u00e0 reconna\u00eetre un mot \u00e9crit parmi des dizaines de milliers de repr\u00e9sentations stock\u00e9es en m\u00e9moire \u00e0 long terme ? Les mod\u00e8les th\u00e9oriques de l&rsquo;activation interactive postulent que la pr\u00e9sentation visuelle d&rsquo;un stimulus d\u00e9clenche l&rsquo;activation parall\u00e8le non seulement du mot cible, mais \u00e9galement d&rsquo;un ensemble de candidats lexicaux structurellement similaires, d\u00e9sign\u00e9s sous le concept de \u00ab voisins orthographiques \u00bb.<\/p>\n<p>Historiquement, Max Coltheart et ses collaborateurs ont formalis\u00e9 la mesure du voisinage orthographique (connue sous l&rsquo;appellation de N de Coltheart) comme le nombre total de mots de m\u00eame longueur pouvant \u00eatre form\u00e9s en substituant une seule lettre au stimulus de r\u00e9f\u00e9rence. Si cette m\u00e9trique a permis des avanc\u00e9es notables, elle souffre d&rsquo;une limitation th\u00e9orique majeure : son incapacit\u00e9 intrins\u00e8que \u00e0 int\u00e9grer des mots de longueurs diff\u00e9rentes r\u00e9sultant d&rsquo;une simple insertion ou d\u00e9l\u00e9tion. L&rsquo;adoption de la distance de Levenshtein par les sciences cognitives computationnelles a permis de d\u00e9passer ce carcan rigide gr\u00e2ce au formalisme du \u00ab Levenshtein Distance 20 \u00bb (OLD20). D\u00e9velopp\u00e9 initialement par Emmanuel Keuleers et ses pairs, le score OLD20 calcule pour un mot cible donn\u00e9 la distance moyenne de Levenshtein qui le s\u00e9pare de ses 20 voisins les plus proches au sein d&rsquo;un lexique norm\u00e9.<\/p>\n<p>Les investigations chronom\u00e9triques d\u00e9montrent une corr\u00e9lation robuste entre la densit\u00e9 du voisinage mesur\u00e9e par la m\u00e9trique d&rsquo;\u00e9dition et le temps de d\u00e9cision lexicale mesur\u00e9 chez des participants humains. Un mot isol\u00e9 au sein d&rsquo;un d\u00e9sert orthographique (pr\u00e9sentant un indice de divergence moyen \u00e9lev\u00e9 par rapport au reste du dictionnaire) fait l&rsquo;objet d&rsquo;un traitement perceptif significativement plus rapide qu&rsquo;un mot immerg\u00e9 au c\u0153ur d&rsquo;un voisinage dense, ce dernier provoquant une intense comp\u00e9tition inhibitrice entre repr\u00e9sentations candidates. En automatisant le calcul de ces indices m\u00e9triques continus au travers de R, les chercheurs peuvent ainsi calibrer avec une rigueur param\u00e9trique in\u00e9dite leurs stimuli exp\u00e9rimentaux et tester des mod\u00e8les computationnels de lecture de haute pr\u00e9cision.<\/p>\n<h3>8.2 Quantification des distorsions dans les \u00e9preuves de rappel verbal<\/h3>\n<p>L&rsquo;\u00e9valuation quantitative des performances de la m\u00e9moire \u00e9pisodique et de la m\u00e9moire de travail mobilise fr\u00e9quemment des protocoles de rappel libre ou indic\u00e9 au cours desquels les sujets sont invit\u00e9s \u00e0 restituer oralement ou par \u00e9crit une liste de lemmes pr\u00e9alablement m\u00e9moris\u00e9s. Dans les contextes cliniques de neuropsychologie (notamment dans l&rsquo;\u00e9valuation des d\u00e9mences de type Alzheimer, des aphasies progressives ou des traumatismes cr\u00e2niens), les d\u00e9faillances mn\u00e9siques ne se traduisent pas uniquement par des omissions franches, mais \u00e9galement par la production d&rsquo;intrusions, de n\u00e9ologismes ou de paraphasies phon\u00e9miques complexes.<\/p>\n<p>L&rsquo;analyse manuelle et discr\u00e9tionnaire de ces distorsions verbales pr\u00e9sente des risques manifestes d&rsquo;inconsistance et de biais inter-\u00e9valuateurs. L&rsquo;application syst\u00e9matique de la distance de Levenshtein permet de transformer une \u00e9valuation qualitative subjective en une mesure biom\u00e9trique continue et hautement standardis\u00e9e. En calculant la distance d&rsquo;\u00e9dition s\u00e9parant chaque production erron\u00e9e du stimulus originellement pr\u00e9sent\u00e9, le chercheur quantifie avec pr\u00e9cision l&rsquo;amplitude de la d\u00e9gradation de la trace mn\u00e9sique. Un patient produisant des formes situ\u00e9es \u00e0 une distance de Levenshtein de 1 ou 2 manifeste une pr\u00e9servation partielle de la structure phonologique du mot cible, tandis qu&rsquo;une divergence sup\u00e9rieure ou \u00e9gale \u00e0 4 traduit une d\u00e9structuration lexicale profonde ou l&rsquo;\u00e9mergence d&rsquo;une intrusion s\u00e9mantique non apparent\u00e9e.<\/p>\n<p>Cette approche algorithmique autorise l&rsquo;automatisation int\u00e9grale du calcul des scores de fid\u00e9lit\u00e9 m\u00e9morielle sur des cohortes cliniques massives. Au sein de R, des scripts d\u00e9di\u00e9s peuvent ing\u00e9rer des milliers de protocoles de rappel transcrits, calculer les matrices de d\u00e9viation d&rsquo;\u00e9dition par rapport aux r\u00e9f\u00e9rentiels normatifs, et mod\u00e9liser ces trajectoires d&rsquo;alt\u00e9ration au moyen de r\u00e9gressions lin\u00e9aires \u00e0 effets mixtes, ouvrant ainsi la voie \u00e0 un ph\u00e9notypage cognitif d&rsquo;une finesse diagnostique sans pr\u00e9c\u00e9dent.<\/p>\n<h3>8.3 Nettoyage automatique des r\u00e9ponses libres dans les questionnaires psychom\u00e9triques<\/h3>\n<p>La collecte de donn\u00e9es psychom\u00e9triques ou \u00e9pid\u00e9miologiques au moyen de questionnaires num\u00e9riques auto-administr\u00e9s sur Internet s&rsquo;est impos\u00e9e comme une pratique m\u00e9thodologique incontournable pour atteindre de larges \u00e9chantillons de participants. N\u00e9anmoins, l&rsquo;inclusion de questions ouvertes appelant des r\u00e9ponses textuelles courtes (telles que le nom de la profession exerc\u00e9e, la localisation g\u00e9ographique de r\u00e9sidence ou la d\u00e9nomination d&rsquo;une substance consomm\u00e9e) se heurte in\u00e9vitablement \u00e0 la prolificit\u00e9 des coquilles typographiques, des erreurs d&rsquo;orthographe et des variations dialectales introduites par les sond\u00e9s lors de la frappe au clavier.<\/p>\n<p>Le traitement manuel de ces incoh\u00e9rences lexicales mobilise des ressources humaines consid\u00e9rables et introduit des d\u00e9cisions d&rsquo;arbitrage difficilement reproductibles. Gr\u00e2ce \u00e0 l&rsquo;algorithme de Levenshtein d\u00e9ploy\u00e9 sous stringdist, il devient possible de concevoir une cha\u00eene de traitement automatis\u00e9e et parfaitement document\u00e9e de standardisation des r\u00e9ponses ouvertes. Le protocole consiste \u00e0 confronter chaque saisie brute non reconnue \u00e0 une nomenclature normative officielle (par exemple, le r\u00e9pertoire des m\u00e9tiers ou le dictionnaire des communes) et \u00e0 \u00e9valuer la distance m\u00e9trique minimale.<\/p>\n<p>En \u00e9tablissant un seuil de d\u00e9cision prudent \u2014 par exemple en n&rsquo;autorisant la correction automatique que pour des r\u00e9ponses pr\u00e9sentant une distance d&rsquo;\u00e9dition strictement \u00e9gale \u00e0 1 par rapport \u00e0 un unique candidat de r\u00e9f\u00e9rence \u2014, le chercheur pr\u00e9serve l&rsquo;int\u00e9grit\u00e9 de ses donn\u00e9es qualitatives tout en r\u00e9duisant le bruit d&rsquo;\u00e9chantillonnage de mani\u00e8re spectaculaire. Les cas plus ambigus ou pr\u00e9sentant des distances sup\u00e9rieures peuvent \u00eatre isol\u00e9s algorithmiquement pour un examen cibl\u00e9, optimisant ainsi le temps d&rsquo;intervention humaine et garantissant la tra\u00e7abilit\u00e9 int\u00e9grale de chaque modification appliqu\u00e9e au corpus empirique.<\/p>\n<h2>9. Variantes m\u00e9triques et distinctions algorithmiques dans stringdist<\/h2>\n<h3>9.1 La distance de Damerau-Levenshtein (m\u00e9thode &lsquo;dl&rsquo;)<\/h3>\n<p>Si la m\u00e9trique de Levenshtein classique fournit un mod\u00e8le math\u00e9matique \u00e9l\u00e9gant, elle pr\u00e9sente une lacune notable d\u00e8s lors qu&rsquo;il s&rsquo;agit d&rsquo;\u00e9tudier les erreurs motrices r\u00e9sultant de la saisie sur un clavier dactylographique. L&rsquo;accident de frappe le plus r\u00e9pandu chez l&rsquo;op\u00e9rateur humain consiste en effet en une inversion rapide de deux lettres cons\u00e9cutives, d\u00e9sign\u00e9e sous le terme technique de transposition de caract\u00e8res adjacents (par exemple, saisir par inadvertance \u00ab\u00a0tehcno\u00a0\u00bb au lieu de \u00ab\u00a0techno\u00a0\u00bb). Dans le cadre strict de Levenshtein, une telle transposition requiert obligatoirement deux op\u00e9rations distinctes : la suppression d&rsquo;un caract\u00e8re suivie de sa r\u00e9insertion ult\u00e9rieure, ou une double substitution crois\u00e9e, portant le co\u00fbt m\u00e9trique total \u00e0 2.<\/p>\n<p>Pour rem\u00e9dier \u00e0 cette anomalie descriptive, Fred Damerau a propos\u00e9 d&rsquo;enrichir le jeu des op\u00e9rations \u00e9l\u00e9mentaires en \u00e9levant la transposition de deux symboles imm\u00e9diatement adjacents au rang d&rsquo;op\u00e9ration atomique recevant un co\u00fbt unitaire fix\u00e9 \u00e0 1. Dans le package stringdist, cette variante algorithmique est invoqu\u00e9e en sp\u00e9cifiant method = \u00ab\u00a0dl\u00a0\u00bb. L&rsquo;algorithme de Damerau-Levenshtein complet mod\u00e9lise fid\u00e8lement cette dynamique, autorisant l&rsquo;application de transpositions r\u00e9p\u00e9t\u00e9es m\u00eame sur des sous-cha\u00eenes ayant d\u00e9j\u00e0 fait l&rsquo;objet d&rsquo;\u00e9ditions ant\u00e9rieures.<\/p>\n<p>La distance de Damerau-Levenshtein pr\u00e9sente une pertinence ph\u00e9nom\u00e9nologique sup\u00e9rieure d\u00e8s lors que l&rsquo;on analyse des corpus issus de la communication m\u00e9di\u00e9e par ordinateur, des messages de r\u00e9seaux sociaux ou des protocoles exp\u00e9rimentaux chronom\u00e9tr\u00e9s o\u00f9 les participants tapent sous contrainte temporelle. Dans ces contextes, traiter une transposition comme une d\u00e9formation simple de co\u00fbt 1 refl\u00e8te fid\u00e8lement la r\u00e9alit\u00e9 biom\u00e9canique du geste de frappe, \u00e9vitant ainsi de sur\u00e9valuer artificiellement la divergence cognitive s\u00e9parant la saisie de son mod\u00e8le orthographique.<\/p>\n<h3>9.2 La distance d&rsquo;alignement optimal (m\u00e9thode &lsquo;osa&rsquo;)<\/h3>\n<p>Une subtilit\u00e9 algorithmique fondamentale, trop souvent ignor\u00e9e des praticiens, r\u00e9side dans la distinction entre la v\u00e9ritable distance de Damerau-Levenshtein et la distance dite d&rsquo;alignement optimal des cha\u00eenes, d\u00e9sign\u00e9e sous l&rsquo;acronyme anglais <a rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Damerau%E2%80%93Levenshtein_distance\">Optimal String Alignment<\/a> (OSA). Au sein du package stringdist, cette derni\u00e8re correspond \u00e0 l&rsquo;identifiant method = \u00ab\u00a0osa\u00a0\u00bb, qui constitue d&rsquo;ailleurs la valeur par d\u00e9faut appliqu\u00e9e par la fonction lorsque l&rsquo;argument de m\u00e9thode n&rsquo;est pas explicit\u00e9 par l&rsquo;utilisateur.<\/p>\n<p>L&rsquo;algorithme OSA, parfois d\u00e9nomm\u00e9 distance de Levenshtein restreinte, autorise la transposition de deux caract\u00e8res adjacents avec un co\u00fbt unitaire de 1, mais impose une contrainte algorithmique stricte : aucune sous-cha\u00eene individuelle ne peut subir plus d&rsquo;une op\u00e9ration d&rsquo;\u00e9dition unitaire au cours du processus global de transformation. Cette limitation structurelle simplifie la mise en \u0153uvre de la programmation dynamique en interdisant le retour arri\u00e8re complexe sur des segments d\u00e9j\u00e0 modifi\u00e9s, ce qui garantit des performances computationnelles optimales.<\/p>\n<p>Cependant, cette restriction brise une propri\u00e9t\u00e9 math\u00e9matique capitale : la m\u00e9trique OSA ne respecte pas inconditionnellement l&rsquo;in\u00e9galit\u00e9 triangulaire, ce qui l&rsquo;exclut au sens strict de la cat\u00e9gorie des v\u00e9ritables m\u00e9triques topologiques. Consid\u00e9rons \u00e0 titre d&rsquo;illustration la transformation reliant la cha\u00eene \u00ab\u00a0ca\u00a0\u00bb \u00e0 la cha\u00eene \u00ab\u00a0abc\u00a0\u00bb. Selon l&rsquo;algorithme complet de Damerau-Levenshtein (m\u00e9thode \u00ab\u00a0dl\u00a0\u00bb), nous pouvons ins\u00e9rer un \u00ab\u00a0b\u00a0\u00bb initial pour former \u00ab\u00a0bca\u00a0\u00bb, puis transposer \u00ab\u00a0bc\u00a0\u00bb en \u00ab\u00a0cb\u00a0\u00bb pour obtenir \u00ab\u00a0cba\u00a0\u00bb, et ainsi de suite. Selon l&rsquo;algorithme \u00ab\u00a0osa\u00a0\u00bb, l&rsquo;impossibilit\u00e9 de r\u00e9\u00e9diter la m\u00eame sous-cha\u00eene interdit l&rsquo;exploitation optimale de cette transposition combin\u00e9e, for\u00e7ant l&rsquo;application d&rsquo;une s\u00e9quence plus co\u00fbteuse de suppressions et d&rsquo;insertions pures (produisant un co\u00fbt m\u00e9trique de 3 au lieu de 2). L&rsquo;analyste se doit d&rsquo;\u00eatre conscient de ces nuances formelles afin de s\u00e9lectionner l&rsquo;algorithme en parfaite ad\u00e9quation avec ses imp\u00e9ratifs math\u00e9matiques.<\/p>\n<h3>9.3 La distance de Hamming (m\u00e9thode &lsquo;hamming&rsquo;)<\/h3>\n<p>Parmi les m\u00e9triques alternatives impl\u00e9ment\u00e9es au sein de l&rsquo;architecture de stringdist, la distance de Hamming, s\u00e9lectionnable via method = \u00ab\u00a0hamming\u00a0\u00bb, repr\u00e9sente le cas limite le plus contraignant et le plus \u00e9l\u00e9mentaire de l&rsquo;analyse d&rsquo;\u00e9dition. \u00c9labor\u00e9e par Richard Hamming en 1950 dans le cadre de la th\u00e9orie des codes et des circuits num\u00e9riques, cette mesure se focalise exclusivement sur la d\u00e9tection des inversions de symboles position par position au sein de s\u00e9quences dimensionnellement fixes.<\/p>\n<p>La contrainte structurelle inh\u00e9rente \u00e0 la m\u00e9thode de Hamming r\u00e9side dans l&rsquo;obligation stricte d&rsquo;\u00e9galit\u00e9 des longueurs des cha\u00eenes compar\u00e9es. La m\u00e9trique exclut cat\u00e9goriquement toute op\u00e9ration d&rsquo;insertion ou de suppression de caract\u00e8res. Le calcul de la distance consiste simplement \u00e0 \u00e9num\u00e9rer le nombre d&rsquo;indices positionnels i pour lesquels le caract\u00e8re a[i] diff\u00e8re formellement du caract\u00e8re b[i]. Si l&rsquo;utilisateur tente de soumettre \u00e0 stringdist(a, b, method = \u00ab\u00a0hamming\u00a0\u00bb) deux vecteurs de cha\u00eenes pr\u00e9sentant des nombres de caract\u00e8res in\u00e9gaux, la routine interrompt le traitement et renvoie syst\u00e9matiquement la valeur infinie (Inf) assortie d&rsquo;un message d&rsquo;avertissement formel.<\/p>\n<p>En cons\u00e9quence, les cas d&rsquo;usage de la distance de Hamming demeurent circonscrits \u00e0 des contextes exp\u00e9rimentaux tr\u00e8s particuliers o\u00f9 la taille des s\u00e9quences est rigoureusement invariante par construction. On la retrouve fr\u00e9quemment en bio-informatique lors de la comparaison d&rsquo;alignements multiples de g\u00e8nes pr\u00e9alablement recal\u00e9s et compl\u00e9t\u00e9s par des tirets d&rsquo;espacement, ou en morphom\u00e9trie exp\u00e9rimentale pour l&rsquo;analyse de motifs combinatoires cod\u00e9s sous forme de vecteurs binaires ou d&rsquo;acronymes standardis\u00e9s de longueur fixe. Pour toute probl\u00e9matique g\u00e9n\u00e9rale d&rsquo;analyse textuelle ouverte, la distance de Levenshtein demeure la r\u00e9f\u00e9rence indiscutable par sa tol\u00e9rance aux fluctuations de longueur.<\/p>\n<h2>10. Pr\u00e9traitement textuel et normalisation avant le calcul de distance<\/h2>\n<h3>10.1 Harmonisation de la casse et suppression des diacritiques<\/h3>\n<p>La mise en \u0153uvre efficiente et s\u00e9mantiquement pertinente de la distance de Levenshtein d\u00e9pend au premier chef de la qualit\u00e9 du pipeline de nettoyage textuel ex\u00e9cut\u00e9 en amont des calculs algorithmiques. En effet, les fonctions d&rsquo;\u00e9dition op\u00e8rent au niveau de la forme de surface des cha\u00eenes de caract\u00e8res et demeurent rigoureusement aveugles \u00e0 la signification des symboles manipul\u00e9s. L&rsquo;absence d&rsquo;une harmonisation syst\u00e9matique de la typographie peut induire des distorsions m\u00e9triques majeures qui faussent l&rsquo;interpr\u00e9tation des r\u00e9sultats empiriques.<\/p>\n<p>La premi\u00e8re phase incontournable de ce pr\u00e9traitement consiste en l&rsquo;harmonisation int\u00e9grale de la casse typographique, g\u00e9n\u00e9ralement r\u00e9alis\u00e9e en convertissant l&rsquo;int\u00e9gralit\u00e9 des corpus textuels en lettres minuscules au moyen de la fonction tolower() du socle de base de R. Cette op\u00e9ration simple \u00e9limine instantan\u00e9ment les variations dues \u00e0 l&#8217;emploi de majuscules de position en d\u00e9but de phrase ou \u00e0 l&rsquo;utilisation expressive de majuscules int\u00e9grales, \u00e9vitant ainsi que chaque divergence de casse ne soit comptabilis\u00e9e \u00e0 tort comme une substitution orthographique de co\u00fbt unitaire.<\/p>\n<p>La seconde phase, particuli\u00e8rement cruciale pour le traitement de la langue fran\u00e7aise et d&rsquo;autres idiomes \u00e0 forte charge orthographique, concerne le traitement des accents et signes diacritiques (accents aigus, graves, circonflexes, tr\u00e9mas et c\u00e9dilles). Si le protocole exp\u00e9rimental vise \u00e0 \u00e9valuer la structure morphologique abstraite plut\u00f4t que l&rsquo;exactitude typographique absolue, il est hautement recommand\u00e9 de proc\u00e9der \u00e0 la d\u00e9saccentuation des cha\u00eenes. L&rsquo;outil le plus robuste pour mener \u00e0 bien cette op\u00e9ration sans risque de corruption d&rsquo;encodage est la fonction stri_trans_general() issue du package <a rel=\"noopener noreferrer\" href=\"https:\/\/cran.r-project.org\/package=stringi\">stringi<\/a>, en lui appliquant la transformation translitt\u00e9rative \u00ab\u00a0Latin-ASCII\u00a0\u00bb. Ce traitement dissout \u00e9l\u00e9gamment les diacritiques en transformant un \u00ab\u00a0\u00e9\u00a0\u00bb ou un \u00ab\u00a0\u00e8\u00a0\u00bb en simple \u00ab\u00a0e\u00a0\u00bb, harmonisant ainsi l&rsquo;espace symbolique d&rsquo;entr\u00e9e.<\/p>\n<h3>10.2 Nettoyage des espaces et des caract\u00e8res de ponctuation<\/h3>\n<p>Les espaces blancs, qu&rsquo;ils se mat\u00e9rialisent sous la forme de pressions sur la barre d&rsquo;espace, de tabulations horizontales ou de retours \u00e0 la ligne, constituent des caract\u00e8res \u00e0 part enti\u00e8re du point de vue de l&rsquo;ordinateur. Dans les corpus issus de saisies exp\u00e9rimentales ou de formulaires num\u00e9riques, il est extr\u00eamement fr\u00e9quent que des espaces parasites s&rsquo;ins\u00e8rent involontairement au d\u00e9but ou \u00e0 la fin des r\u00e9ponses formul\u00e9es par les sujets. La pr\u00e9sence d&rsquo;un espace final surnum\u00e9raire dans la cha\u00eene \u00ab\u00a0maison \u00a0\u00bb compar\u00e9e \u00e0 \u00ab\u00a0maison\u00a0\u00bb engendre m\u00e9caniquement une distance de Levenshtein \u00e9gale \u00e0 1, refl\u00e9tant l&rsquo;insertion d&rsquo;un caract\u00e8re d&rsquo;espacement invisible \u00e0 l&rsquo;\u0153il nu.<\/p>\n<p>Pour immuniser les calculs contre ces art\u00e9facts g\u00e9om\u00e9triques, l&rsquo;analyste applique syst\u00e9matiquement la fonction native trimws() \u00e0 l&rsquo;ensemble de ses vecteurs textuels, ce qui assure la suppression imm\u00e9diate de tous les blancs de t\u00eate et de queue. Par ailleurs, lorsque les r\u00e9ponses libres comportent plusieurs mots successifs s\u00e9par\u00e9s de mani\u00e8re anarchique par des espaces multiples, l&rsquo;utilisation conjointe d&rsquo;expressions r\u00e9guli\u00e8res via gsub(\u00ab\u00a0s+\u00a0\u00bb, \u00a0\u00bb \u00ab\u00a0, texte) permet d&rsquo;\u00e9craser toute s\u00e9quence continue d&rsquo;espacements en un blanc typographique unique et canonique.<\/p>\n<p>Enfin, la gestion de la ponctuation et des symboles non alphab\u00e9tiques doit faire l&rsquo;objet d&rsquo;un arbitrage m\u00e9thodologique explicite. Dans la majorit\u00e9 des contextes de classification lexicale, les apostrophes, tirets, points et virgules ne participent pas de la variabilit\u00e9 morphologique fondamentale et doivent \u00eatre \u00e9limin\u00e9s ou standardis\u00e9s. L&rsquo;application d&rsquo;un filtre r\u00e9gulier cibl\u00e9, tel que gsub(\u00ab\u00a0[[:punct:]]\u00a0\u00bb, \u00ab\u00a0\u00a0\u00bb, texte), permet de purger les cha\u00eenes de tout r\u00e9sidu s\u00e9miotique parasite, garantissant que la distance de Levenshtein calcul\u00e9e ult\u00e9rieurement refl\u00e9tera exclusivement la dynamique transformationnelle des structures alphab\u00e9tiques sous-jacentes.<\/p>\n<h3>10.3 R\u00e9solution des probl\u00e8mes d&rsquo;encodage multilingue<\/h3>\n<p>L&rsquo;une des sources d&rsquo;erreurs les plus pernicieuses en informatique linguistique r\u00e9side dans l&rsquo;h\u00e9t\u00e9rog\u00e9n\u00e9it\u00e9 des syst\u00e8mes d&rsquo;encodage de caract\u00e8res. Un fichier textuel ancien encod\u00e9 sous la norme ISO-8859-1 (Latin-1) interpr\u00e9t\u00e9 par une session logicielle moderne configur\u00e9e nativement sous le standard universel UTF-8 peut voir ses caract\u00e8res \u00e9tendus alt\u00e9r\u00e9s ou d\u00e9doubl\u00e9s au niveau de la couche d&rsquo;octets machine. D\u00e8s lors qu&rsquo;un caract\u00e8re accentu\u00e9 est malencontreusement repr\u00e9sent\u00e9 par une s\u00e9quence de deux octets distincts non d\u00e9cod\u00e9s, la fonction d&rsquo;\u00e9dition calculera les distances sur la base de ces fragments octaux d\u00e9grad\u00e9s plut\u00f4t que sur l&rsquo;entit\u00e9 graph\u00e9mique r\u00e9elle.<\/p>\n<p>Pour pr\u00e9venir ces d\u00e9rives critiques, il est imp\u00e9ratif d&rsquo;int\u00e9grer une \u00e9tape de validation et de conversion d&rsquo;encodage en t\u00eate de tout script d&rsquo;analyse textuelle dans R. La fonction stringi::stri_enc_isutf8() permet de v\u00e9rifier imm\u00e9diatement la conformit\u00e9 de l&rsquo;ensemble des \u00e9l\u00e9ments d&rsquo;un vecteur avec le standard UTF-8. En cas de non-conformit\u00e9 av\u00e9r\u00e9e ou de doute structurel sur l&rsquo;origine des fichiers sources, l&rsquo;instruction iconv(texte, from = \u00ab\u00a0\u00a0\u00bb, to = \u00ab\u00a0UTF-8\u00a0\u00bb) force une r\u00e9encapsulation rigoureuse des cha\u00eenes de caract\u00e8res au sein de la table d&rsquo;encodage de r\u00e9f\u00e9rence de la session.<\/p>\n<p>De surcro\u00eet, le standard Unicode admet parfois plusieurs repr\u00e9sentations binaires formellement distinctes pour un m\u00eame caract\u00e8re graphique per\u00e7u \u00e0 l&rsquo;\u00e9cran (ph\u00e9nom\u00e8ne connu sous le nom de formes de normalisation NFC et NFD, o\u00f9 un caract\u00e8re accentu\u00e9 peut \u00eatre cod\u00e9 sous forme de point de code pr\u00e9compos\u00e9 unique ou par la d\u00e9composition d&rsquo;une lettre de base suivie d&rsquo;un diacritique combinatoire ind\u00e9pendant). Pour neutraliser cette variabilit\u00e9 sous-jacente, il est fortement conseill\u00e9 d&rsquo;invoquer stringi::stri_trans_nfc(texte). Cette normalisation canonique garantit une uniformit\u00e9 totale de la structure binaire des symboles avant leur injection dans les matrices de programmation dynamique de stringdist, pr\u00e9servant ainsi l&rsquo;exactitude des calculs m\u00e9triques.<\/p>\n<h2>11. Optimisation des performances et passage \u00e0 l&rsquo;\u00e9chelle sur de volumineux corpus<\/h2>\n<h3>11.1 Exploitation du multithreading avec le param\u00e8tre nthread<\/h3>\n<p>Lorsque la taille des corpus textuels franchit le cap de plusieurs centaines de milliers d&rsquo;occurrences, le volume combinatoire des calculs de programmation dynamique peut rapidement saturer les capacit\u00e9s d&rsquo;un c\u0153ur de processeur unique. Consciente de ces imp\u00e9ratifs de passage \u00e0 l&rsquo;\u00e9chelle industrielle, l&rsquo;architecture du package stringdist int\u00e8gre une prise en charge native du parall\u00e9lisme \u00e0 m\u00e9moire partag\u00e9e via l&rsquo;interface de programmation OpenMP, directement impl\u00e9ment\u00e9e au niveau des boucles de bas niveau en langage C.<\/p>\n<p>Cette fonctionnalit\u00e9 d&rsquo;acc\u00e9l\u00e9ration s&rsquo;active et se calibre ais\u00e9ment au travers du param\u00e8tre optionnel nthread pr\u00e9sent au sein des fonctions stringdist() et stringdistmatrix(). Par d\u00e9faut, le package interroge le syst\u00e8me d&rsquo;exploitation pour d\u00e9terminer le nombre de threads logiques allouables sans d\u00e9stabiliser l&rsquo;environnement de travail. Toutefois, dans le cadre de serveurs de calcul haute performance ou de stations de travail multi-processeurs, l&rsquo;analyste peut assigner explicitement une puissance de feu d\u00e9di\u00e9e, par exemple via nthread = 8 ou nthread = parallel::detectCores() &#8211; 1, afin de mobiliser l&rsquo;ensemble des ressources physiques disponibles.<\/p>\n<p>Les gains de temps de calcul observ\u00e9s lors de l&rsquo;activation du multithreading sont spectaculaires et s&rsquo;approchent fr\u00e9quemment d&rsquo;une scalabilit\u00e9 lin\u00e9aire sur des matrices de comparaison \u00e9tendues. La distribution des paires de cha\u00eenes entre les diff\u00e9rents threads s&rsquo;effectue avec une empreinte m\u00e9moire globale ma\u00eetris\u00e9e, \u00e9vitant la copie redondante des structures de donn\u00e9es volumineuses inh\u00e9rente aux architectures de parall\u00e9lisme par sockets r\u00e9seau. Cette efficacit\u00e9 permet d&rsquo;aborder sereinement des chantiers de fouille de donn\u00e9es textuelles massives qui auraient n\u00e9cessit\u00e9 des heures de traitement sous une ex\u00e9cution mono-thread\u00e9e s\u00e9quentielle.<\/p>\n<h3>11.2 Filtrage pr\u00e9coce par seuil avec le param\u00e8tre maxDist<\/h3>\n<p>Dans un nombre consid\u00e9rable de sc\u00e9narios analytiques, tels que la recherche de doublons lexicaux ou la d\u00e9tection d&rsquo;erreurs de frappe l\u00e9g\u00e8res, l&rsquo;analyste ne s&rsquo;int\u00e9resse en r\u00e9alit\u00e9 qu&rsquo;aux paires de mots pr\u00e9sentant une proximit\u00e9 orthographique tr\u00e8s \u00e9troite (par exemple, une distance de Levenshtein inf\u00e9rieure ou \u00e9gale \u00e0 1 ou 2). Calculer l&rsquo;int\u00e9gralit\u00e9 des co\u00fbts d&rsquo;\u00e9dition pour des paires de mots totalement disparates dont la distance r\u00e9elle s&rsquo;\u00e9l\u00e8ve \u00e0 10 ou 15 repr\u00e9sente un gaspillage massif de cycles processeur.<\/p>\n<p>Pour r\u00e9pondre \u00e0 cette probl\u00e9matique d&rsquo;optimisation s\u00e9lective, stringdist propose le param\u00e8tre strat\u00e9gique maxDist. En assignant \u00e0 cet argument un seuil num\u00e9rique plafond, par exemple maxDist = 2, l&rsquo;utilisateur active un m\u00e9canisme d&rsquo;interruption algorithmique pr\u00e9coce. En interne, l&rsquo;algorithme C surveille en permanence la progression des co\u00fbts au sein de la matrice d&rsquo;\u00e9dition. D\u00e8s qu&rsquo;il est math\u00e9matiquement d\u00e9montr\u00e9, sur la base des longueurs de pr\u00e9fixes et de la diagonale courante, que la distance finale exc\u00e9dera in\u00e9luctablement le seuil de 2, le calcul de la cellule est instantan\u00e9ment avort\u00e9.<\/p>\n<p>Pour les paires de s\u00e9quences dont la divergence d\u00e9passe la limite sp\u00e9cifi\u00e9e, la fonction retourne imm\u00e9diatement la valeur sp\u00e9ciale Inf (l&rsquo;infini math\u00e9matique) sans gaspiller de ressources de calcul suppl\u00e9mentaires. Cette heuristique permet d&rsquo;acc\u00e9l\u00e9rer les temps de traitement d&rsquo;un ou deux ordres de grandeur sur des vocabulaires h\u00e9t\u00e9rog\u00e8nes, r\u00e9duisant des op\u00e9rations massives \u00e0 quelques secondes d&rsquo;ex\u00e9cution tout en fournissant l&rsquo;exacte information d&rsquo;appariement recherch\u00e9e par le chercheur pour les sous-ensembles pertinents.<\/p>\n<h3>11.3 Benchmarking et comparaison de performances<\/h3>\n<p>Pour \u00e9valuer de mani\u00e8re scientifique et objective l&rsquo;efficacit\u00e9 des diff\u00e9rentes solutions computationnelles disponibles dans l&rsquo;environnement R, il est essentiel de d\u00e9ployer des protocoles de m\u00e9trologie chronom\u00e9trique rigoureux. L&rsquo;outil de r\u00e9f\u00e9rence pour mener \u00e0 bien ces \u00e9valuations de performance est le package <a rel=\"noopener noreferrer\" href=\"https:\/\/cran.r-project.org\/package=microbenchmark\">microbenchmark<\/a>, qui ex\u00e9cute de mani\u00e8re r\u00e9p\u00e9t\u00e9e et contr\u00f4l\u00e9e les instructions cibles tout en neutralisant les art\u00e9facts li\u00e9s \u00e0 l&rsquo;activit\u00e9 asynchrone du syst\u00e8me d&rsquo;exploitation et aux cycles du ramasse-miettes (garbage collector) de R.<\/p>\n<p>Une comparaison exp\u00e9rimentale classique oppose l&rsquo;impl\u00e9mentation artisanale d&rsquo;une boucle de Wagner-Fischer en code R pur, la fonction native adist() de la biblioth\u00e8que de base utils, et la fonction stringdist() param\u00e9tr\u00e9e avec method = \u00ab\u00a0lv\u00a0\u00bb. Les r\u00e9sultats obtenus sur un \u00e9chantillon repr\u00e9sentatif de plusieurs milliers de comparaisons textuelles sont sans appel : l&rsquo;algorithme cod\u00e9 en R interpr\u00e9t\u00e9 accuse un retard r\u00e9dhibitoire, se montrant couramment 500 \u00e0 1 500 fois plus lent que les routines optimis\u00e9es. La fonction native adist() offre un comportement interm\u00e9diaire honorable, mais reste largement distanc\u00e9e par stringdist(), qui se r\u00e9v\u00e8le entre 5 et 15 fois plus rapide gr\u00e2ce \u00e0 la compilation C ANSI et \u00e0 l&rsquo;optimisation des vecteurs de cache.<\/p>\n<p>Au-del\u00e0 de 100 000 paires de donn\u00e9es \u00e0 traiter, l&rsquo;adoption combin\u00e9e de stringdist(), du multithreading OpenMP et du seuillage par maxDist s&rsquo;impose comme l&rsquo;unique strat\u00e9gie viable pour maintenir des temps de traitement compatibles avec les exigences de la recherche computationnelle moderne. Ces benchmarks d\u00e9montrent avec force que le choix de la biblioth\u00e8que logicielle et la compr\u00e9hension fine de ses m\u00e9canismes sous-jacents conditionnent directement la faisabilit\u00e9 technique d&rsquo;un projet de recherche textuelle \u00e0 grande \u00e9chelle.<\/p>\n<h2>12. Cas d&rsquo;usage avanc\u00e9 : Jointures floues et correction automatis\u00e9e dans les protocoles de recherche<\/h2>\n<h3>12.1 Appariement flou de tables de donn\u00e9es avec le package fuzzyjoin<\/h3>\n<p>Dans la pratique quotidienne des sciences exp\u00e9rimentales et de la gestion de donn\u00e9es de cohortes longitudinales, l&rsquo;un des obstacles les plus r\u00e9currents r\u00e9side dans la r\u00e9conciliation de bases de donn\u00e9es h\u00e9t\u00e9rog\u00e8nes d\u00e9pourvues de cl\u00e9s primaires d&rsquo;identification strictes. Les identifiants textuels (tels que les noms de famille des participants, les intitul\u00e9s de sp\u00e9cialit\u00e9s m\u00e9dicales ou les adresses g\u00e9ographiques) sont fr\u00e9quemment alt\u00e9r\u00e9s d&rsquo;une vague d&rsquo;enqu\u00eate \u00e0 l&rsquo;autre par des variations de saisie, des coquilles d&rsquo;encodage ou des troncatures involontaires. Une jointure relationnelle classique de type inner_join() ou left_join() \u00e9choue lamentablement \u00e0 apparier ces enregistrements en raison de l&rsquo;absence d&rsquo;\u00e9galit\u00e9 logique stricte.<\/p>\n<p>Pour surmonter cette impasse m\u00e9thodologique, l&rsquo;\u00e9cosyst\u00e8me Tidyverse propose le package sp\u00e9cialis\u00e9 <a rel=\"noopener noreferrer\" href=\"https:\/\/cran.r-project.org\/package=fuzzyjoin\">fuzzyjoin<\/a>, d\u00e9velopp\u00e9 par David Robinson. Ce module \u00e9tend la syntaxe expressive de dplyr en permettant d&rsquo;effectuer des jointures conditionnelles fond\u00e9es sur des m\u00e9triques de distance non nulles. La fonction ma\u00eetresse stringdist_join() encapsule directement l&rsquo;algorithme de stringdist au c\u0153ur de la m\u00e9canique de jointure tabulaire, offrant ainsi un cadre d&rsquo;appariement flou d&rsquo;une robustesse exceptionnelle.<\/p>\n<p>L&rsquo;utilisation de stringdist_inner_join(table_a, table_b, by = \u00ab\u00a0identifiant_participant\u00a0\u00bb, method = \u00ab\u00a0lv\u00a0\u00bb, max_dist = 2) permet de r\u00e9concilier automatiquement deux tables distinctes d\u00e8s lors que la divergence de Levenshtein s\u00e9parant les identifiants textuels n&rsquo;exc\u00e8de pas 2 op\u00e9rations d&rsquo;\u00e9dition \u00e9l\u00e9mentaires. L&rsquo;analyste doit toutefois calibrer scrupuleusement la valeur du param\u00e8tre max_dist : un seuil trop permissif engendre des faux positifs pernicieux en appariant ind\u00fbment des individus distincts portant des patronymes morphologiquement proches, tandis qu&rsquo;un seuil trop conservateur entra\u00eene une d\u00e9perdition d&rsquo;observations pr\u00e9cieuses. L&rsquo;inspection statistique post-jointure des distances effectives constitue \u00e0 cet \u00e9gard une \u00e9tape indispensable de contr\u00f4le qualit\u00e9.<\/p>\n<h3>12.2 Impl\u00e9mentation d&rsquo;un correcteur orthographique contextuel<\/h3>\n<p>L&rsquo;application la plus d\u00e9monstrative de la distance de Levenshtein r\u00e9side dans la construction d&rsquo;un moteur autonome de correction orthographique adapt\u00e9 aux sp\u00e9cificit\u00e9s lexicales d&rsquo;un protocole exp\u00e9rimental donn\u00e9. Contrairement aux correcteurs commerciaux g\u00e9n\u00e9ralistes qui reposent sur des dictionnaires normatifs fig\u00e9s et int\u00e8grent des r\u00e8gles morphosyntaxiques complexes, un correcteur contextuel de laboratoire peut \u00eatre configur\u00e9 de mani\u00e8re extr\u00eamement \u00e9pur\u00e9e et reproductible directement au sein d&rsquo;un script R.<\/p>\n<p>La premi\u00e8re phase op\u00e9rationnelle consiste \u00e0 \u00e9tablir la table lexicale normative du protocole. Ce dictionnaire de v\u00e9rit\u00e9 terrain rassemble l&rsquo;exhaustivit\u00e9 des termes acceptables pour l&rsquo;exp\u00e9rience, associ\u00e9s le cas \u00e9ch\u00e9ant \u00e0 leurs fr\u00e9quences d&rsquo;apparition relatives au sein du corpus de r\u00e9f\u00e9rence. Lorsqu&rsquo;une cha\u00eene textuelle saisie par un participant est soumise au syst\u00e8me, ce dernier teste en premier lieu son appartenance stricte au dictionnaire via une instruction conditionnelle simple. Si le mot est reconnu sans ambigu\u00eft\u00e9, il est pr\u00e9serv\u00e9 sans modification.<\/p>\n<p>En cas de non-reconnaissance, l&rsquo;algorithme d\u00e9clenche le calcul vectoriel de la distance de Levenshtein entre le mot inconnu et chaque entr\u00e9e du dictionnaire normatif. Le programme isole les candidats minimisant la m\u00e9trique d&rsquo;\u00e9dition. En cas d&rsquo;unicit\u00e9 du plus proche voisin, le terme fautif est automatiquement substitu\u00e9 par cette cible optimale. Dans l&rsquo;\u00e9ventualit\u00e9 o\u00f9 plusieurs candidats \u00e9mergent ex \u00e6quo au m\u00eame niveau de distance minimale (par exemple, \u00e0 une distance de 1), l&rsquo;algorithme op\u00e8re un d\u00e9partage probabiliste rigoureux en s\u00e9lectionnant le terme pr\u00e9sentant la fr\u00e9quence d&rsquo;usage la plus \u00e9lev\u00e9e dans la population g\u00e9n\u00e9rale. L&rsquo;\u00e9valuation continue de ce dispositif exp\u00e9rimental au moyen de m\u00e9triques de pr\u00e9cision et de rappel permet de garantir une correction transparente, neutre et math\u00e9matiquement document\u00e9e des corpus textuels recueillis.<\/p>\n<h3>12.3 Recommandations m\u00e9thodologiques et reproductibilit\u00e9 scientifique<\/h3>\n<p>L&rsquo;int\u00e9gration de la distance de Levenshtein et des techniques de fouille textuelle au sein des protocoles scientifiques contemporains impose une conformit\u00e9 exemplaire avec les standards actuels de la science ouverte et de la reproductibilit\u00e9 computationnelle. La validit\u00e9 des conclusions empiriques d\u00e9duites de corpus textuels nettoy\u00e9s ou analys\u00e9s par voie algorithmique repose int\u00e9gralement sur la capacit\u00e9 des pairs \u00e0 r\u00e9pliquer chaque \u00e9tape du traitement avec une fid\u00e9lit\u00e9 absolue.<\/p>\n<p>Dans cette perspective, il est primordial que les chercheurs documentent formellement, au sein de leurs publications acad\u00e9miques ou de leurs cahiers de laboratoire \u00e9lectroniques, la version exacte de la distribution R et des biblioth\u00e8ques mobilis\u00e9es (particuli\u00e8rement stringdist et stringi). Le nom complet de la m\u00e9thode m\u00e9trique appliqu\u00e9e (en explicitant imp\u00e9rativement s&rsquo;il s&rsquo;agit de la distance de Levenshtein pure \u00ab\u00a0lv\u00a0\u00bb, de l&rsquo;alignement optimal \u00ab\u00a0osa\u00a0\u00bb, ou de Damerau-Levenshtein \u00ab\u00a0dl\u00a0\u00bb) ainsi que les pond\u00e9rations vectorielles exactes affect\u00e9es aux op\u00e9rations d&rsquo;\u00e9dition doivent \u00eatre consign\u00e9s de mani\u00e8re transparente dans la section m\u00e9thodologique.<\/p>\n<p>Enfin, la communaut\u00e9 de recherche encourage vivement la publication en libre acc\u00e8s, sur des d\u00e9p\u00f4ts institutionnels ou des plateformes p\u00e9rennes telles que Zenodo ou l&rsquo;Open Science Framework (OSF), des scripts R exhaustifs assurant le pr\u00e9traitement des cha\u00eenes, le calcul des m\u00e9triques et l&rsquo;appariement des tables. Ce niveau d&rsquo;exigence m\u00e9thodologique garantit non seulement l&rsquo;int\u00e9grit\u00e9 scientifique des analyses men\u00e9es sous R, mais participe activement \u00e0 la constitution d&rsquo;un corpus partag\u00e9 d&rsquo;outils computationnels standardis\u00e9s pour l&rsquo;avancement collectif des sciences du langage et de l&rsquo;information.<\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<ul>\n<li>Coltheart, M., Davelaar, E., Jonasson, J. T., &amp; Besner, D. (1977). Access to the internal lexicon. Dans S. Dornic (Dir.), <em>Attention and Performance VI<\/em> (pp. 535\u2013555). Lawrence Erlbaum Associates.<\/li>\n<li>Damerau, F. J. (1964). A technique for computer detection and correction of spelling errors. <em>Communications of the ACM<\/em>, 7(3), 171\u2013176. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1145\/363958.363994\">https:\/\/doi.org\/10.1145\/363958.363994<\/a><\/li>\n<li>Hamming, R. W. (1950). Error detecting and error correcting codes. <em>Bell System Technical Journal<\/em>, 29(2), 147\u2013160. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1002\/j.1538-7305.1950.tb00463.x\">https:\/\/doi.org\/10.1002\/j.1538-7305.1950.tb00463.x<\/a><\/li>\n<li>Keuleers, E., &amp; Brysbaert, M. (2010). Wuggy: A multilingual pseudoword generator. <em>Behavior Research Methods<\/em>, 42(3), 627\u2013633. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.3758\/BRM.42.3.627\">https:\/\/doi.org\/10.3758\/BRM.42.3.627<\/a><\/li>\n<li>Levenshtein, V. I. (1966). Binary codes capable of correcting deletions, insertions, and reversals. <em>Soviet Physics Doklady<\/em>, 10(8), 707\u2013710.<\/li>\n<li>Robinson, D. (2020). <em>fuzzyjoin: Join tables together on inexact matching<\/em> (R package version 0.1.6). Comprehensive R Archive Network. <a rel=\"noopener noreferrer\" href=\"https:\/\/cran.r-project.org\/package=fuzzyjoin\">https:\/\/cran.r-project.org\/package=fuzzyjoin<\/a><\/li>\n<li>Ukkonen, E. (1985). Algorithms for approximate string matching. <em>Information and Control<\/em>, 64(1\u20133), 100\u2013118. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1016\/S0019-9958(85)80046-2\">https:\/\/doi.org\/10.1016\/S0019-9958(85)80046-2<\/a><\/li>\n<li>van der Loo, M. P. J. (2014). The stringdist package for approximate string matching. <em>The R Journal<\/em>, 6(1), 111\u2013122. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.32614\/RJ-2014-011\">https:\/\/doi.org\/10.32614\/RJ-2014-011<\/a><\/li>\n<li>Wagner, R. A., &amp; Fischer, M. J. (1974). The string-to-string correction problem. <em>Journal of the ACM<\/em>, 21(1), 168\u2013173. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1145\/321796.321811\">https:\/\/doi.org\/10.1145\/321796.321811<\/a><\/li>\n<li>Wickham, H., Fran\u00e7ois, R., Henry, L., &amp; M\u00fcller, K. (2023). <em>dplyr: A grammar of data manipulation<\/em> (R package version 1.1.4). Comprehensive R Archive Network. <a rel=\"noopener noreferrer\" href=\"https:\/\/cran.r-project.org\/package=dplyr\">https:\/\/cran.r-project.org\/package=dplyr<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Guide m\u00e9thodologique et acad\u00e9mique pour calculer la distance de Levenshtein dans R avec le package stringdist, assorti d&rsquo;exemples et d&rsquo;analyses de donn\u00e9es.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","categories":[7681,2193],"tags":[7682,2956,1808,7683,7684],"class_list":["post-5829","psych_stat","type-psych_stat","status-publish","hentry","category-methodes-computationnelles","category-programmation-r","tag-distance-de-levenshtein","tag-programmation-r","tag-sciences-cognitives","tag-stringdist","tag-traitement-du-langage-naturel"],"_links":{"self":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/5829","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat"}],"about":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/types\/psych_stat"}],"author":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5829"}],"version-history":[{"count":1,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/5829\/revisions"}],"predecessor-version":[{"id":5831,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/5829\/revisions\/5831"}],"wp:attachment":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5829"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5829"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5829"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}