Os algoritmos de stemming diferem amplamente, embora compartilhem alguns modos gerais de operação. Os stemmers eliminam sufixos de palavras executando tokens de palavras de entrada em uma lista predefinida de sufixos comuns. O stemmer então remove todas as cadeias de caracteres de sufixos encontradas na palavra, caso esta última não desafie nenhuma regra ou condição associada a esse sufixo. Alguns stemmers (por exemplo, o stemmer de Lovins) submetem os radicais resultantes a um conjunto adicional de regras para corrigir raízes malformadas.
O algoritmo mais amplamente utilizado é o algoritmo de stemming de Porter, e sua versão atualizada é o stemmer Snowball. Para entender melhor o stemming, podemos ler a seguinte passagem de Hamlet, de Shakespeare, por meio do stemmer Snowball: “There is nothing either good or bad but thinking makes it so” (Não há nada bom ou nada mau, mas o pensamento o faz assim).
A biblioteca Natural Language Toolkit (NLTK) do Python contém funções integradas para os stemmers Snowball e de Porter. Depois de tokenizar a citação de Hamlet usando NLTK, podemos passar o texto tokenizado pelo stemmer Snowball usando este código:
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)
O código produz:
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', '.']
Os algoritmos de stemmer de Snowball e Porter têm um método mais matemático de eliminar sufixos do que outros stemmers. Basta dizer que o stemmer submete cada token de palavra a uma lista de regras que especificam cadeias de sufixo a serem removidas de acordo com o número de grupos de vogais e consoantes em um token.5 É claro que, como o idioma inglês segue regras léxicas gerais, mas não absolutas, o critério sistemático do algoritmo de stemming retorna erros, como noth.
O stemmer remove -ing, que é o sufixo usado no tempo presente contínuo do inglês. Na citação de Hamlet , no entanto, remover -ing produz erroneamente noth. Isso pode impedir que análises linguísticas subsequentes associem nothing a substantivos semelhantes, como anything e something. Além disso, o stemmer deixa o verbo irregular inalterado. Da mesma forma, o stemmer Snowball deixa outras conjugações de to be, como was e are, sem radical. Isso pode impedir que os modelos associem adequadamente conjugações irregulares de um determinado verbo.