Stemming
Compreensão do Stemming
Stemming é uma técnica de normalização de texto utilizada em PLN para reduzir palavras flexionadas ao seu radical.
Para ser mais preciso, stemming envolve a remoção de afixos (geralmente apenas sufixos) das palavras para obter sua forma raiz, conhecida como radical. Por exemplo, os radicais de "running", "runs" e "run" são todos "run".
O objetivo do stemming é simplificar a análise tratando palavras semelhantes como a mesma entidade, melhorando assim a eficiência em várias tarefas de PLN.
Stemming com NLTK
O NLTK oferece diversos algoritmos de stemming, sendo os mais populares o Porter Stemmer e o Lancaster Stemmer. Esses algoritmos aplicam regras específicas para remover afixos e obter o radical de uma palavra.
Todas as classes de stemmer no NLTK compartilham uma interface comum. Primeiro, é necessário criar uma instância da classe stemmer e, em seguida, utilizar o método stem() para cada um dos tokens.
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)
Primeiro, aplicamos a tokenização, depois filtramos as stop words e, por fim, aplicamos o stemming em nossos tokens utilizando list comprehension. Em relação aos resultados, esses dois stemmers produziram resultados bastante diferentes. Isso ocorre porque o Lancaster Stemmer possui cerca do dobro de regras do Porter Stemmer e é considerado um dos stemmers mais "agressivos".
De modo geral, o Porter Stemmer é a opção mais popular, produzindo resultados mais significativos do que o Lancaster Stemmer, que tende a reduzir excessivamente as palavras.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
What are the main differences between the Porter and Lancaster stemmers?
Can you explain what stop words are and why we remove them?
How does stemming improve NLP tasks?
Awesome!
Completion rate improved to 3.45
Stemming
Deslize para mostrar o menu
Compreensão do Stemming
Stemming é uma técnica de normalização de texto utilizada em PLN para reduzir palavras flexionadas ao seu radical.
Para ser mais preciso, stemming envolve a remoção de afixos (geralmente apenas sufixos) das palavras para obter sua forma raiz, conhecida como radical. Por exemplo, os radicais de "running", "runs" e "run" são todos "run".
O objetivo do stemming é simplificar a análise tratando palavras semelhantes como a mesma entidade, melhorando assim a eficiência em várias tarefas de PLN.
Stemming com NLTK
O NLTK oferece diversos algoritmos de stemming, sendo os mais populares o Porter Stemmer e o Lancaster Stemmer. Esses algoritmos aplicam regras específicas para remover afixos e obter o radical de uma palavra.
Todas as classes de stemmer no NLTK compartilham uma interface comum. Primeiro, é necessário criar uma instância da classe stemmer e, em seguida, utilizar o método stem() para cada um dos tokens.
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)
Primeiro, aplicamos a tokenização, depois filtramos as stop words e, por fim, aplicamos o stemming em nossos tokens utilizando list comprehension. Em relação aos resultados, esses dois stemmers produziram resultados bastante diferentes. Isso ocorre porque o Lancaster Stemmer possui cerca do dobro de regras do Porter Stemmer e é considerado um dos stemmers mais "agressivos".
De modo geral, o Porter Stemmer é a opção mais popular, produzindo resultados mais significativos do que o Lancaster Stemmer, que tende a reduzir excessivamente as palavras.
Obrigado pelo seu feedback!