Text preprocessing helps computers understand and work with words better by breaking text into pieces and simplifying words.
Text preprocessing (tokenization, stemming, lemmatization) in ML Python
from nltk.tokenize import word_tokenize from nltk.stem import PorterStemmer from nltk.stem import WordNetLemmatizer # Tokenization words = word_tokenize(text) # Stemming stemmer = PorterStemmer() stemmed_words = [stemmer.stem(word) for word in words] # Lemmatization lemmatizer = WordNetLemmatizer() lemmatized_words = [lemmatizer.lemmatize(word) for word in words]
Tokenization splits text into words or pieces.
Stemming cuts words to their root form, which may not be a real word.
text = "Cats are running faster than dogs." words = word_tokenize(text) print(words)
stemmer = PorterStemmer() stemmed = [stemmer.stem(word) for word in words] print(stemmed)
lemmatizer = WordNetLemmatizer() lemmas = [lemmatizer.lemmatize(word) for word in words] print(lemmas)
This program shows how to split text into words, then simplify those words by stemming and lemmatization.
import nltk nltk.download('punkt') nltk.download('wordnet') from nltk.tokenize import word_tokenize from nltk.stem import PorterStemmer from nltk.stem import WordNetLemmatizer text = "The cats are running faster than the dogs." # Tokenize words = word_tokenize(text) print("Tokens:", words) # Stem stemmer = PorterStemmer() stemmed_words = [stemmer.stem(word) for word in words] print("Stemmed:", stemmed_words) # Lemmatize lemmatizer = WordNetLemmatizer() lemmatized_words = [lemmatizer.lemmatize(word) for word in words] print("Lemmatized:", lemmatized_words)
Stemming may produce words that are not real, while lemmatization produces real dictionary words.
Lemmatization needs the word's part of speech to be most accurate, but defaults still help.
Tokenization handles punctuation and splits text into manageable pieces.
Tokenization breaks text into words or tokens.
Stemming cuts words to their root but may not keep real words.
Lemmatization changes words to their dictionary form for better understanding.
Practice
tokenization in text preprocessing?Solution
Step 1: Understand tokenization
Tokenization means breaking text into smaller pieces called tokens, usually words.Step 2: Compare with other preprocessing steps
Lemmatization and stemming change words, but tokenization just splits text.Final Answer:
To split text into smaller units like words or tokens -> Option AQuick Check:
Tokenization = splitting text [OK]
- Confusing tokenization with stemming or lemmatization
- Thinking tokenization changes word forms
- Assuming tokenization removes words
Solution
Step 1: Identify stemming code
PorterStemmer from nltk.stem is used for stemming; calling stem('running') returns stemmed word.Step 2: Check other options
from nltk.tokenize import word_tokenize word_tokenize('running') is tokenization, C is lemmatization, D is regex substitution, not stemming.Final Answer:
from nltk.stem import PorterStemmer ps = PorterStemmer() ps.stem('running') -> Option DQuick Check:
PorterStemmer.stem() = stemming [OK]
- Confusing stemming with lemmatization functions
- Using tokenization code for stemming
- Using regex instead of stemmer
from nltk.stem import WordNetLemmatizer
wl = WordNetLemmatizer()
print(wl.lemmatize('better', pos='a'))Solution
Step 1: Understand lemmatization with POS
Using pos='a' means adjective. Lemmatizer converts 'better' (comparative adjective) to base form 'good'.Step 2: Check output possibilities
Stemming would cut to 'bet', but lemmatization returns dictionary base word 'good'.Final Answer:
good -> Option AQuick Check:
Lemmatize('better', pos='a') = 'good' [OK]
- Expecting stemming output instead of lemmatization
- Ignoring pos parameter in lemmatization
- Assuming output is unchanged word
from nltk.stem import PorterStemmer ps = PorterStemmer() words = ['running', 'jumps', 'easily'] stemmed = [ps.stem(words)] print(stemmed)
Solution
Step 1: Check ps.stem() input
ps.stem() expects a single string word, but words (a list) was passed directly.Step 2: Identify correct usage
We should stem each word individually, e.g., using list comprehension: [ps.stem(w) for w in words].Final Answer:
ps.stem() expects a single word, but a list was passed -> Option CQuick Check:
Stem() needs single word input [OK]
- Passing list directly to stem() instead of iterating
- Confusing stemming with tokenization
- Incorrect list comprehension syntax
Solution
Step 1: Understand preprocessing order
First, split text into tokens (words) using tokenization.Step 2: Apply stemming then lemmatization
Stemming reduces words to root forms by removing suffixes; lemmatization converts words to dictionary base form.Step 3: Verify option sequence
Tokenization -> Stemming -> Lemmatization matches the correct order: Tokenization -> Stemming -> Lemmatization.Final Answer:
Tokenization -> Stemming -> Lemmatization -> Option BQuick Check:
Tokenize first, then stem, then lemmatize [OK]
- Applying stemming before tokenization
- Skipping tokenization step
- Confusing order of lemmatization and stemming
Ready to prove it?
Pass the test and this pattern moves unknown
