EDITE MEDITE : un logiciel de comparaison de versions

—Irène Fenoglio, Jean-Louis Lebrave et Jean-Gabriel Ganascia,

1. Introduction

Le travail d’ajustage auquel se livre l’écrivain dans ses repentirs, ses coupes ou ses insertions successifs fait ici l’objet d’une étude systématique à l’aide d’outils informatiques qui s’inspirent partiellement de ceux développés pour l’étude des macromolécules biologiques. Nous avons réalisé un programme qui repère automatiquement les opérations structurales qui font passer d’un texte à un autre. Ces transformations élémentaires (déplacements, insertions, suppressions et remplacements de blocs de caractères), identifiées depuis longtemps par les spécialistes de la génétique textuelle (de Biasi, 2000 ; Hay, 2002, Contrat and Ferrer 1998 ; Gresillon, 1994 ; etc.), peuvent ensuite être associées aux catégories syntaxiques ou sémantiques des mots ou des groupes de mots pour donner naissance à des opérateurs ou opérations [ ?] linguistiques de réécriture (déplacement d’un adverbe, remplacement d’un mot par un hyperonyme ou par un hyponyme, suppression ou ajout d’un adjectif etc.) (Fenoglio and Boucheron, 2002). Notre logiciel mime les opérations exécutées à la main par le philologue qui compare des textes. Il comprend une interface permettant aussi bien de visualiser les modifications faisant passer d’un état du texte à un autre, que de recenser toutes les modifications, ajouts, suppressions, déplacements ou remplacements. L’automatisation autorise à la fois une répétition à l’identique de ces opérations, et une systématisation de la démarche sur des textes longs qu’il eut été très pénible de traiter manuellement. On peut ainsi travailler sur des articles, voire sur des livres entiers, et procéder à des études statistiques afin de caractériser le style de réécriture de tel ou tel auteur, et d’identifier, pour un même auteur, les différentes phases de réécriture : expansion, resserrement, …
De nombreuses applications sont envisagées. Originellement, le projet fut conçu pour la critique génétique : il s’agissait d’aider à comparer des brouillons d’auteurs, afin de saisir la nature du travail de réécriture. D’autres applications sont envisagées, en particulier la comparaison de variantes pour la littérature médiévale. (Cf « Eloge de la variante » (Cerquiglini, 1989))
Cet article est consacré à la présentation du logiciel MEDITE, à ses fondements algorithmiques et à son interface de visualisation. Plus précisément, l’article se divise en quatre parties : après avoir précisé le sens d’un certain nombre de termes techniques employés par les généticiens du texte, nous aborderons les fondements algorithmiques du programme, puis, dans une troisième partie, nous présenterons l’interface graphique.

2. Signification de quelques termes techniques

La génétique textuelle étudie les processus d’écriture des textes à partir des traces. Généralement, du moins pour la plupart des auteurs d’avant l’âge informatique, des brouillons rassemblent ces traces sous forme soit intégralement manuscrite, soit partiellement manuscrite et partiellement tapée à la machine, soit totalement tapée à la machine.
A titre d’illustration, la figure 1 contient la photographie d’un brouillon d’auteur. En l’occurrence, le début d’Andrée Chedid, « La robe noire » parue dans le recueil Les saisons de passage (Flammarion, 1996).

Figure 1 : une page d’un manuscrit de « La robe noire » (Andrée Chedid)

2.1. Versions

Dans la suite, nous distinguerons les différents supports matériels, c’est-à-dire les brouillons successifs, comme autant de versions de l’œuvre. Ainsi, dans le dossier génétique qui nous intéresse, celui du roman d’Andrée Chedid « La robe noire », l’auteur a recopié cinq fois son texte, donnant naissance à cinq versions.

2.2. État

Comme on peut le constater sur la figure 1, chaque brouillon est annoté, raturé, réécrit, ce qui rend la lecture assez confuse. Toutefois, les chercheurs savent identifier, avec une plus ou moins grande certitude, les différents états du texte, c’est-à-dire les différents textes présents sur une même version. Chacun de ces états correspond à une transcription linéaire qui fait abstraction de l’information visuelle et de la spatialisation : inscriptions marginales, couleurs, notes, etc. tout y est réduit à du texte brut. Sur notre exemple, l’état premier est identifié au texte tapé à la machine et les différentes couleurs du manuscrit sont associées à différentes campagnes de réécriture et de relecture. Pour faciliterla présentation des choses, nous ne considérerons ici que deux états : le tapuscrit et l’état final (voir figure 2 ci-dessous).

Figure 2 : état initial et état final du texte d’Andrée Chedid dans le manuscrit de la figure 1

Bien évidemment, ce n’est là qu’un artifice de présentation. appartient  dans chaque cas au chercheur de définir les différents états qu’il veut considérer.
Une fois ces états identifiés, le logiciel MEDITE va les comparer de façon à retrouver automatiquement les opérations de réécriture, pour en faire l’inventaire. Ceci étant, il convient de bien noter que la mise en œuvre du logiciel MEDITE présuppose qu’un travail préalable ait dégagé, à partir des différentes versions, les différents états du texte sous forme d’autant de transcriptions linéaires de ce même texte.

3. Fondements algorithmiques

Comme nous venons de le voir, le programme MEDITE prend en entrée deux états d’un même texte de façon à repérer les transformations qui font passer de l’un à l’autre, ou, plus exactement, l’ensemble minimal de transformations qui font passer du texte initial au texte « corrigée ». Formulé de la sorte, le problème apparaît très proche de celui posé par le calcul des « distances d’édition » (Sankoff D and Kruskal J.B., 1983 ; Crochemore M. and Rytter W., 1994). Rappelons que la notion de « distance d’édition » se fonde sur des opérateurs de transformation, que l’on appelle en termes techniques des « éditions », car ils modifient des chaînes de caractères, et sur la minimisation du coût des transformations qui font passer d’une séquence à une autre.
Dans un premier temps, nous avions cru pouvoir réutiliser les distances d’édition, d’où l’acronyme du projet, EDITE, qui fait référence aux dites « éditions » et qui signifie « Etude Diachronique et Interprétative du Travail de l’Ecrivain ». Or, il s’est rapidement avéré que cette utilisation des distances d’édition n’était pas possible, du moins telle quelle. En effet, il n’existe de procédure efficace de calcul de la distance d’édition que pour des ensembles d’éditions très restreints, comme l’ensemble dit standard qui comprend les trois opérations de suppression, d’insertion et de remplacement. Dans la mesure où la détection des déplacements joue un rôle important pour la génétique textuelle, et que l’introduction des déplacements dans l’ensemble des éditions change totalement la complexité algorithmique de la procédure de calcul des distances, il est nécessaire de procéder autrement. De plus, la taille des textes (plusieurs centaines de milliers de caractères) interdit l’emploi de procédures d’une complexité polynomiale : il faut se limiter à une complexité linéaire ou, au plus, à une complexité en O(n*lg(n)), n étant la longueur des textes à traiter.
Afin de réduire la complexité et de répondre au mieux au problème posé, nous avons donc conçu un algorithme spécifique qui procède en trois étapes :

  • Détection des blocs communs maximaux disjoints

  • Identification des déplacements et des pivots

  • Calcul des insertions, des suppressions et des remplacements

3.1. Détection des blocs communs maximaux disjoints

La détection des blocs maximaux fait appel à des algorithmes classiques (Karp R M, Miller R E and Rosenberg A L, 1972 ; Landraud A, Avril J-F and Chrétienne P, 1989) de recherche d’homologies dans les séquences. Nous n’insisterons donc pas sur la mise en œuvre de ces algorithmes, sauf à dire qu’il y a parfois des recouvrements entre blocs maximaux. Ainsi, les deux chaînes « Il a avalé » et « Il avala » donnent deux blocs maximaux, |Il a | et | aval| qui se recouvrent partiellement. Pour obtenir des blocs maximaux disjoints, il faut introduire une césure. Or, généralement il y a plusieurs possibilités. Sur notre exemple, il y en a trois : |Il a | et | aval|, |Il a | et | aval| ou |Il a | et | aval|, ce qui donne, en soulignant les insertions et les suppressions sur les deux chaînes initiales, les trois solutions suivantes : « Il| a| aval|é » et « Il| aval|a », « Il |a |aval|é » et « Il |aval|a » ou « Il a| a|val|é » et « Il a|val|a ». Dans la mesure du possible, il faut éviter la fragmentation des mots, c’est pourquoi nous avons choisi de mettre en priorité la césure sur les signes de ponctuation ou sur les blancs.
Par ailleurs, toujours pour éviter la fragmentation excessive des mots, nous ne mentionnons que les blocs communs d’une taille supérieure à une valeur seuil fixée arbitrairement. Par défaut ce seuil est de 4, ce qui veut dire qu’avant introduction de la césure, les homologies doivent avoir une longueur supérieure à 4 caractères. De la sorte, nous repérons des mots isolés de longueur supérieure à deux caractères, sachant qu’ils sont entourés de deux frontières de mots (blanc ou signe de ponctuation), ainsi que les préfixes ou les suffixes de plus de trois caractères, ce qui correspond à une syllabe.
Notons que la longueur minimale des blocs est un paramètre qui peut être modifié par l’utilisateur, sans difficulté (Voir section 4.4.3.). Cependant, du fait de l’introduction d’une césure qui supprime les recouvrements, il se peut que des blocs de longueur inférieure à la limite inférieure apparaissent dans les blocs communs. Cela signifie que ces blocs appartiennent à des blocs communs de longueur supérieure à la valeur seuil, mais qu’ils ont été rognés pour éviter des recouvrements.

3.2. Identification des déplacements et des pivots

Parmi l’ensemble des blocs communs maximaux disjoints, certains se retrouvent dans le même ordre dans les deux textes, le texte source et le texte corrigé, tandis que d’autres apparaissent déplacés. Ainsi, si nous avons la séquence de blocs maximaux B1 B2 B3 B4 B5 dans le texte source et la séquence B2 B3 B1 B4 B5 dans le texte corrigé, on peut inférer que le bloc B1 a vraisemblablement été déplacé, même si cette appréciation est subjective, car on pourrait tout autant dire que ce sont les blocs B2 et B3 qui ont été déplacés. L’algorithme que nous avons mis en œuvre détermine les blocs déplacés en essayant de minimiser l’amplitude des déplacements mesurée en nombre de caractères. Plus exactement, cet algorithme prend en considération la taille des blocs maximaux de façon à minimiser le nombre de déplacements de caractères requis pour passer d’une séquence de blocs maximaux à l’autre.
A l’issue de cette phase, on distingue parmi les blocs maximaux disjoints, des blocs dits « déplacés » et des blocs qui apparaissent dans le même ordre dans le texte source et dans le texte cible. Ces derniers sont appelés les « blocs pivots », ou plus simplement les « pivots » de la comparaison.

3.3. Calcul des insertions, des suppressions et des remplacements

Une fois déterminés les « blocs pivots » et les « blocs déplacés », il reste à calculer les suppressions, les insertions et les remplacements. Le programme procède comme suit :

  • Lorsque deux pivots P et P’ sont jointifs dans le texte source, la chaîne qui sépare P et P’ dans le texte corrigé correspond à une insertion. Notons, pour éviter tout malentendu, que les deux pivots P et P’ ne peuvent être jointifs à la fois dans le texte source et dans le texte corrigé, car sinon, P et P’ ne serait maximaux ni l’un, ni l’autre.

  • Lorsque deux pivots P et P’ sont jointifs dans le texte corrigé, la chaîne qui sépare P et P’ dans le texte source correspond à une suppression.

  • Enfin, lorsque deux pivots P et P’ ne sont jointifs ni dans le texte source, ni dans le texte corrigé, on dit qu’il y a remplacement de la chaîne comprise entre P et P’ dans le texte source, par la chaîne comprise entre P et P’ dans le texte corrigé.

A ce stade, il convient de préciser qu’un même bloc peut être à la fois déplacé et se trouver dans une insertion, une suppression ou un remplacement. En effet, dans le cas de déplacements de petits blocs situés à l’intérieur d’une insertion, d’une suppression ou d’un remplacement, il est souvent préférable de considérer que c’est l’ensemble qui est inséré, supprimé ou remplacé, de façon à éviter une fragmentation excessive des textes. Nous avons introduit deux paramètres qui permettent de lisser plus ou moins les résultats et d’inclure les blocs déplacés dans les insertions, les suppressions ou les remplacements.
Dans tous les cas, l’information sur le déplacement n’est pas omise. Elle vient se surajouter à d’autres informations. C’est particulièrement important pour repérer qu’un mot est « libéré » par un auteur afin d’être réemployé plus loin dans le même texte, sans commettre de répétition.
En conclusion, notons que notre algorithme a été testé sur de nombreux textes d’écrivains. En confrontant les résultats obtenus avec des interprétations philologiques, on constate que la plupart du temps, on retrouve les déplacements, les insertions, les suppressions et les remplacements déjà identifiés manuellement par les généticiens du texte.

4. Interface de visualisation

Pour faciliter la lecture des résultats, nous avons programmé une interface de visualisation qui comporte trois fenêtres (voir figure 3) : deux fenêtres dans la partie supérieure, l’une destinée au texte source, l’autre au texte corrigé, et une fenêtre dans la partie inférieure dont le contenu peut varier comme nous allons le voir ici.

4.1. Partie supérieure : les textes

Pour faire fonctionner MEDITE, il faut charger d’abord le texte source dans la fenêtre de gauche et le texte corrigé dans la fenêtre de droite, ce qui se fait, dans l’un et l’autre cas, comme dans un éditeur classique, avec des menus déroulant.
Un bouton permet ensuite de lancer la comparaison au moyen de l’algorithme précédemment décrit. Les résultats s’affichent alors en couleur : insertions, suppressions et remplacements sont marqués chacun par une couleur spécifique, que l’on peut faire varier à loisir. De plus, les blocs déplacés sont soulignés, ce qui autorise une superposition des deux indications : déplacements d’un côté, insertions, suppressions ou remplacements de l’autre.
Enfin, comme sur de très longs textes le lecteur est susceptible de se perdre, un compteur indique au-dessus de chacune des deux fenêtres de la partie supérieure, le numéro d’ordre du premier pivot présent dans la fenêtre de visualisation. L’utilisateur a alors tout loisir de faire défiler les textes à l’aide des ascenseurs, pour mettre les pivots de l’un et de l’autre texte en regard. Pour faciliter encore les choses, il est possible, en cliquant sur un pivot, de faire automatiquement défiler le texte homologue, dans l’autre fenêtre, jusqu’à ce que le pivot correspondant soit mis en regard du premier.

4.2. Partie inférieure : information d’usage

Le contenu de la fenêtre inférieure est spécifié au moyen des différents onglets qui apparaissent au bas de l’interface : transformations, commentaires, légende, paramètres.

4.2.1. Transformations

Par défaut, l’onglet « transformations» est activé et la fenêtre contient l’ensemble des transformations qui font passer du texte source au texte corrigé, à savoir l’ensemble des insertions, des suppressions, des remplacements et des déplacements.

4.2.2. Légende

L’onglet « légende » fait apparaître la légende de l’interface, c’est-à-dire la signification des couleurs, par exemple ici, bleu pour les insertions et les suppressions, vert pour les remplacements et souligné pour les déplacements. Au reste, il est loisible, de modifier manuellement les couleurs des insertions, des suppressions et des déplacements, ainsi que le style des déplacements.

4.2.3. Paramètres

Nous avons précédemment mentionné trois paramètres, l’un porte sur la taille minimale des blocs maximaux recensés, les deux autres, sur le lissage au cours du calcul des insertions, des suppressions et des remplacements. Ces trois paramètres sont accessibles dans la fenêtre du bas, à l’aide de l’onglet « paramètre». On se trouve alors en mesure de modifier ces paramètres à volonté.

Figure 3 : interface de visualisation de MEDITE

4.2.4. Commentaires

Enfin, l’onglet « commentaires» fait apparaître une fenêtre vide où il est possible d’insérer des notes réutilisables par la suite. De même, on peut coller des parties du texte, ou des transformations, de façon à préparer un article ou une analyse.
Au terme de cette présentation de l’interface de MEDITE, il faut souligner qu’une fois le travail terminé, l’ensemble des textes, des blocs détectés et des commentaires, sont stockés dans un fichier XML dont le contenu peut être exploité par des procédures d’analyse statistique. De plus, ce fichier peut être rechargé automatiquement dans l’interface, ce qui évite d’avoir à exécuter plusieurs fois l’algorithme de comparaison sur de longs textes comme des romans ou des essais philosophiques.

5. Conclusion

MEDITE est programmé en Python. Il fonctionne actuellement sous les systèmes d’exploitation Windows et LINUX. Une version Mac OS X devrait voir le jour dans les prochains mois. Plusieurs corpus sont actuellement à l’étude avec ce logiciel : Andrée Chedid, La robe noire, Louis Althusser, Freud et Lacan, Marcel Proust, Cahier, Pascal Quignard, Bernon l’enfant. Dès à présent, le logiciel permet d’effectuer automatiquement des études trop fastidieuses pour être réalisées manuellement. Et, même sur des exemples aussi brefs que sur le début de « La robe noire », l’observation des transformations explicitées par MEDITE montre à l’évidence la signification du travail de l’auteur ; toutes les réécritures semblent aller dans le même sens : la jeune fille est progressivement dessaisie de toutes prérogatives ; au fil des réécritures, elle agit de moins en moins, tandis que la mère, apparemment aimante, la manipule de plus en plus... A ces interprétations sémantiques qui demeurent somme toute assez subjectives, on peut ajouter des études statistiques qui se font sur les transformations elles-mêmes. On devrait donc, grâce au logiciel MEDITE, ouvrir sur une linguistique de l’écrit à même d’aborder quantitativement le travail de réécriture des auteurs. C’est là un premier pas vers de nouvelles applications de l’analyse de données textuelles à la philologie.

Résumé

MEDITE a été conçu pour faciliter grâce à une quantification systématique l’étude préalable à les études à toute interprétation de génétique textuelle et, plus généralement, pour aider les philologues. Il s’agit de comparer deux états de textes littéraires en indiquant les transformations textuelles qui font passer opérées de l’un à l’autre. Au cœur de ce programme, l’algorithme principal comprend trois phases : la détection des blocs communs maximaux disjoints, l’identification des pivots et des déplacements et le calcul des suppressions, des insertions et des remplacements. Enfin, une interface visualise les résultats obtenus et permet à l’utilisateur de prendre des notes.

Abstract

MEDITE has been designed to facilitate the textual genetic studies and, more generally, to help the philologists. It is to compare two states of literary texts by pointing at the textual transformations between them. At the heart of the program, the main algorithm comprises three steps: the detection of the maximal disjoints common blocs, the identification of the pivots and shifts, and the computation of the deletions, insertions and replacements. Lastly, an interface renders the obtained results easily visible and makes the user able to take notes.

Pour citer cette page

Irène Fenoglio, Jean-Louis Lebrave et Jean-Gabriel Ganascia, «EDITE MEDITE : un logiciel de comparaison de versions», Item [En ligne],
Mis en ligne le: 03 juillet 2007
Disponible sur: http://www.item.ens.fr/index.php?id=172967.

Notice bibliographique

Le poids des mots, Actes des 7èmes journées internationales d’analyse statistique des données textuelles (JADT 04), UCL Presses Universitaires de Louvain, 2004 (p. )

AccueilContactL'ItemRSSPodcast — Site propulsé par Lodel