Les algorithmes de racinisation diffèrent considérablement, bien qu’ils partagent certains modes de fonctionnement généraux. Les algorithmes de racinisation, ou stemmers, éliminent les suffixes des mots en comparant les jetons de mots en entrée à une liste prédéfinie de suffixes courants. Le stemmer supprime ensuite toutes les chaînes de suffixes trouvées dans le mot, à condition que ce dernier ne contrevienne à aucune règle ou condition associée à ce suffixe. Certains stemmers (par exemple, le stemmer de Lovins) soumettent les fragments obtenus après la racinisation à un ensemble de règles supplémentaires pour corriger les racines mal formées.
L’algorithme le plus largement utilisé est l’algorithme de racinisation de Porter et sa version mise à jour, le stemmer Snowball. Pour mieux comprendre la racinisation, nous pouvons soumettre le passage suivant de l’œuvre Hamlet de Shakespeare au stemmer Snowball : « There is nothing either good or bad but thinking makes it so. »
La boîte à outils Python pour le langage naturel (NLTK) contient des fonctions intégrées pour les stemmers Snowball et Porter. Après avoir jetonisé la citation de Hamlet à l’aide de NLTK, nous pouvons passer le texte jetonisé par le stemmer Snowball à l’aide du code suivant :
from nltk.stem.snowball import SnowballStemmer
from nltk.tokenize import word_tokenize
stemmer = SnowballStemmer("english", True)
text = "There is nothing either good or bad but thinking makes it so."
words = word_tokenize(text)
stemmed_words = [stemmer.stem(word) for word in words]
print("Original:", text)
print("Tokenized:", words)
print("Stemmed:", stemmed_words)
Le code génère :
Original: There is nothing either good or bad but thinking makes it so.
Tokenized: [’There’, ’is’, ’nothing’, ’either’, ’good’, ’or’, ’bad’, ’but’, ’thinking’, ’makes’, ’it’, ’so’, ’.’]
Stemmed: [’there’, ’is’, ’noth’, ’either’, ’good’, ’or’, ’bad’, ’but’, ’think’, ’make’, ’it’, ’so’, ’.’]
Les algorithmes de racinisation Snowball et Porter ont une méthode d’élimination des suffixes plus mathématique que les autres algorithmes. En résumé, l’algorithme compare chaque jeton de mot à une liste de règles spécifiant des chaînes de suffixes à supprimer en fonction du nombre de groupes de voyelles et de consonnes dans un jeton.5 Bien sûr, comme la langue anglaise suit des règles lexicales générales, mais pas absolues, le critère systématique de l’algorithme de racinisation renvoie des erreurs, telles que noth.
Le radical enlève -ing, qui est une terminaison courante indiquant le présent progressif. Dans la citation de Hamlet , cependant, la suppression de -ing produit de manière erronée la racine noth. Cela peut empêcher l’analyse linguistique ultérieure d’associer nothing à des mots similaires, tels que anything et something. De plus, le stemmer ne change rien au verbe irrégulier is. De même, le stemmer Snowball laisse d’autres conjugaisons de to be, telles que was et are, sans les raciniser. Cela peut empêcher les modèles d’associer correctement les conjugaisons irrégulières d’un verbe donné.