Skip to content
NLP

Stemming and Lemmatization

Reduce words to roots with Porter, Snowball, and lemmatizers.

#stemming#lemmatization

Code

nlp
import nltk
from nltk.stem import PorterStemmer, SnowballStemmer, WordNetLemmatizer
nltk.download("wordnet", quiet=True)
nltk.download("omw-1.4", quiet=True)

words = ["running", "ran", "runs", "easily", "fairly", "studies"]

# Porter stemmer
porter = PorterStemmer()
print([porter.stem(w) for w in words])

# Snowball stemmer (more aggressive, supports languages)
snow = SnowballStemmer("english")
print([snow.stem(w) for w in words])

# Lemmatization produces real words using POS
lemma = WordNetLemmatizer()
print([lemma.lemmatize(w) for w in words])
print([lemma.lemmatize(w, pos="v") for w in words])  # as verbs

# spaCy lemmatization with context-aware POS
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("The mice were running quickly.")
print([t.lemma_.lower() for t in doc])