Stamning
Förståelse av Stemming
Stemming är en textnormaliseringsteknik som används inom NLP för att reducera böjda ord till deras stam.
Mer precist innebär stemming att ta bort affix (vanligtvis endast suffix) från ord för att erhålla deras rotform, kallad stam. Till exempel är stammen för "running", "runs" och "run" alltid "run".
Syftet med stemming är att förenkla analysen genom att behandla liknande ord som samma enhet, vilket i slutändan förbättrar effektiviteten i olika NLP-uppgifter.
Stemming med NLTK
NLTK tillhandahåller olika algoritmer för stemming, där de mest populära är Porter Stemmer och Lancaster Stemmer. Dessa algoritmer tillämpar specifika regler för att ta bort affix och härleda ordstammen.
Alla stemmer-klasser i NLTK har ett gemensamt gränssnitt. Först måste en instans av stemmer-klassen skapas och därefter används dess stem()-metod för varje token.
1234567891011121314151617181920212223242526272829import nltk from nltk.stem import PorterStemmer, LancasterStemmer from nltk.tokenize import word_tokenize from nltk.corpus import stopwords nltk.download('punkt_tab') nltk.download('stopwords') stop_words = set(stopwords.words('english')) # Create a Porter Stemmer instance porter_stemmer = PorterStemmer() # Create a Lancaster Stemmer instance lancaster_stemmer = LancasterStemmer() text = "Stemming is an essential technique for natural language processing." text = text.lower() tokens = word_tokenize(text) # Filter out the stop words tokens = [token for token in tokens if token.lower() not in stop_words] # Apply stemming to each token porter_stemmed_tokens = [porter_stemmer.stem(token) for token in tokens] lancaster_stemmed_tokens = [lancaster_stemmer.stem(token) for token in tokens] # Display the results print("Original Tokens:", tokens) print("Stemmed Tokens (Porter Stemmer):", porter_stemmed_tokens) print("Stemmed Tokens (Lancaster Stemmer):", lancaster_stemmed_tokens)
Först tillämpades tokenisering, därefter filtrerades stoppord bort och slutligen användes stemming på våra tokens med list comprehension. När det gäller resultaten gav dessa två stemmers ganska olika utfall. Detta beror på att Lancaster Stemmer har ungefär dubbelt så många regler som Porter Stemmer och är en av de mest "aggressiva" stemmers.
Överlag är Porter Stemmer det mest populära alternativet och ger mer meningsfulla resultat än Lancaster Stemmer, som tenderar att överstamma ord.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 3.45
Stamning
Svep för att visa menyn
Förståelse av Stemming
Stemming är en textnormaliseringsteknik som används inom NLP för att reducera böjda ord till deras stam.
Mer precist innebär stemming att ta bort affix (vanligtvis endast suffix) från ord för att erhålla deras rotform, kallad stam. Till exempel är stammen för "running", "runs" och "run" alltid "run".
Syftet med stemming är att förenkla analysen genom att behandla liknande ord som samma enhet, vilket i slutändan förbättrar effektiviteten i olika NLP-uppgifter.
Stemming med NLTK
NLTK tillhandahåller olika algoritmer för stemming, där de mest populära är Porter Stemmer och Lancaster Stemmer. Dessa algoritmer tillämpar specifika regler för att ta bort affix och härleda ordstammen.
Alla stemmer-klasser i NLTK har ett gemensamt gränssnitt. Först måste en instans av stemmer-klassen skapas och därefter används dess stem()-metod för varje token.
1234567891011121314151617181920212223242526272829import nltk from nltk.stem import PorterStemmer, LancasterStemmer from nltk.tokenize import word_tokenize from nltk.corpus import stopwords nltk.download('punkt_tab') nltk.download('stopwords') stop_words = set(stopwords.words('english')) # Create a Porter Stemmer instance porter_stemmer = PorterStemmer() # Create a Lancaster Stemmer instance lancaster_stemmer = LancasterStemmer() text = "Stemming is an essential technique for natural language processing." text = text.lower() tokens = word_tokenize(text) # Filter out the stop words tokens = [token for token in tokens if token.lower() not in stop_words] # Apply stemming to each token porter_stemmed_tokens = [porter_stemmer.stem(token) for token in tokens] lancaster_stemmed_tokens = [lancaster_stemmer.stem(token) for token in tokens] # Display the results print("Original Tokens:", tokens) print("Stemmed Tokens (Porter Stemmer):", porter_stemmed_tokens) print("Stemmed Tokens (Lancaster Stemmer):", lancaster_stemmed_tokens)
Först tillämpades tokenisering, därefter filtrerades stoppord bort och slutligen användes stemming på våra tokens med list comprehension. När det gäller resultaten gav dessa två stemmers ganska olika utfall. Detta beror på att Lancaster Stemmer har ungefär dubbelt så många regler som Porter Stemmer och är en av de mest "aggressiva" stemmers.
Överlag är Porter Stemmer det mest populära alternativet och ger mer meningsfulla resultat än Lancaster Stemmer, som tenderar att överstamma ord.
Tack för dina kommentarer!