Skip links

TreeTagger : comment lemmatiser une chaîne de caractères

Dans un article précédent, nous avons mentionné certaines techniques de base du traitement automatique du langage naturel, ou Natural Language Processing (NLP) en anglais. Nous avions notamment introduit le concept de “lemmatisation”.

La lemmatisation désigne un traitement lexical apporté à un texte en vue de son analyse. Ce traitement consiste à appliquer aux occurrences des lexèmes sujets à flexion (en français, verbes, substantifs, adjectifs) un codage renvoyant à leur entrée lexicale commune (“forme canonique” enregistrée dans les dictionnaires de la langue, le plus couramment), que l’on désigne sous le terme de lemme.

(Source : Wikipedia)

Comprendre la lemmatisation

Les mots (lemmes) d’une langue peuvent prendre plusieurs états en fonction de leur genre (masculin ou féminin), leur nombre (un ou plusieurs), leur personne (moi, toi, eux…), leur mode (indicatif, impératif…) donnant ainsi naissance à plusieurs formes pour un même lemme. La lemmatisation d’une forme d’un mot consiste à en prendre sa forme canonique. Celle-ci est définie comme suit :

  • pour un verbe : ce verbe à l’infinitif,
  • pour les autres mots : le mot au masculin singulier.

Par exemple, l’adjectif petit existe sous quatre formes : petit, petite, petits et petites. La forme canonique de tous ces mots est “petit”. Il existe beaucoup plus de formes du verbe avoir : ai, as, a, avons, ais, avons eu, ayez eu, eussions eu, aurions eu, etc. La forme canonique de eussions eu est avoir.

Supposons que nous devons visualiser la fréquence d’apparition de certains mots clés contenus dans le texte suivant :

Nous aurions dû prendre le train depuis la gare de Bordeaux pour rentrer chez nous, mais tous les trains provenant de Paris étaient en retard de 5 heures ! Donc nous avons décidé de laisser tomber les trains. Nous avons ainsi fait du covoiturage jusqu’à Troyes, à une heure de chez nous, et mes parents sont venus nous chercher.

Combien de fois il y a les mots “train” et “heure” dans ce texte ? Une seule fois, pour chacun des deux. Oui, car les deux sont présents dans leurs formes singulières et plurales : train (1 fois) et trains (2 fois), heure (1 fois) et heures (1 fois).

Afin de bien déterminer la fréquence des mots contenus dans ce texte, nous devons tout d’abord les transformer dans leur lemme. Grâce à ce type de traitement, nous arrivons ainsi à bien comptabiliser 3 fois le mot “train” et 2 fois le mot “heure”.

Comment convertir un mot dans son lemme ?

Chez 10h11 nous avons testé plusieurs outils nous permettant de lemmatiser un mot. Le plus fiable et performant que nous avons trouvé est sans aucun doute TreeTagger. 

TreeTagger – a part-of-speech tagger for many languages

The TreeTagger is a tool for annotating text with part-of-speech and lemma information. It was developed by Helmut Schmid in the TC project at the Institute for Computational Linguistics of the University of Stuttgart. The TreeTagger has been successfully used to tag German, English, French, Italian, Danish, Swedish, Norwegian, Dutch, Spanish, Bulgarian, Russian, Portuguese, Galician, Greek, Chinese, Swahili, Slovak, Slovenian, Latin, Estonian, Polish, Romanian, Czech, Coptic and old French texts and is adaptable to other languages if a lexicon and a manually tagged training corpus are available.

The tagger is described in the following two papers:
• Helmut Schmid (1995): Improvements in Part-of-Speech Tagging with an Application to German. Proceedings of the ACL SIGDAT-Workshop. Dublin, Ireland.
• Helmut Schmid (1994): Probabilistic Part-of-Speech Tagging Using Decision Trees. Proceedings of International Conference on New Methods in Language Processing, Manchester, UK.

(Source : https://www.cis.lmu.de/~schmid/tools/TreeTagger/#parfiles)

Comment utiliser TreeTagger ?

TreeTagger peut être directement utilisé depuis le terminal, mais aussi dans de nombreux langages comme Python, Java, R ou encore PHP.

Dans le langage R, par exemple, nous utilisons TreeTagger avec le package R “koRpus” : https://reaktanz.de/?c=hacking&s=koRpus

Ensuite, pour l’utiliser par exemple sur la langue française, nous installons le module correspondant “fr” :

install.packages("koRpus")
library(koRpus)
install.koRpus.lang("fr")
library(koRpus.lang.fr)