Gli algoritmi di stemming differiscono notevolmente, sebbene condividano alcune modalità generali di funzionamento. Gli stemmer eliminano i suffissi delle parole confrontando i token delle parole in ingresso con un elenco predefinito di suffissi comuni. Lo stemmer rimuove quindi qualsiasi stringa di caratteri del suffisso trovato dalla parola, a condizione che quest'ultima non contravvenga a nessuna regola o condizione associata a quel suffisso. Alcuni stemmer (ad esempio, lo stemmer di Lovins) applicano i bit sottoposti a stemming risultanti a un ulteriore insieme di regole per correggere le radici malformate.
L'algoritmo più utilizzato è l'algoritmo di stemming Porter e la sua versione aggiornata è lo stemmer Snowball. Per capire meglio lo stemming, possiamo analizzare il seguente passaggio dell'Amleto di Shakespeare attraverso lo stemmer Snowball: "There is nothing either good or bad but thinking makes it so".
Il Natural Language Toolkit (NLTK) di Python contiene funzioni integrate per gli stemmer Snowball e Porter. Dopo aver tokenizzato la citazione dell'Amleto utilizzando l'NLTK, possiamo passare il testo tokenizzato attraverso lo stemmer Snowball utilizzando questo codice:
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)
L'output del codice è il seguente:
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', '.']
Gli algoritmi stemmer Snowball e Porter hanno un metodo più matematico per eliminare i suffissi rispetto ad altri stemmer. Basta dire che lo stemmer confronta ogni token di parola con un elenco di regole che specificano le stringhe di suffissi da rimuovere in base al numero di gruppi di vocali e consonanti presenti in un token.5 Naturalmente, poiché la lingua inglese segue regole lessicali generali ma non assolute, il criterio sistematico dell'algoritmo di stemming restituisce errori, ad esempio noth.
Lo stemmer rimuove -ing, essendo un suffisso comune che indica il presente progressivo. Nella citazione dell'Amleto, tuttavia, la rimozione di -ing produce erroneamente la radice noth. Ciò può impedire che un'analisi linguistica associ nothing a sostantivi simili, come anything e something. Inoltre, lo stemmer lascia invariato il verbo irregolare is. Lo Snowball stemmer lascia invariati anche altre coniugazioni di to be, come was e are. Ciò può impedire ai modelli di associare correttamente le coniugazioni irregolari di un dato verbo.