Stemming
Compreendendo o Stemming
Stemming é uma técnica de normalização de texto utilizada em PLN para reduzir palavras flexionadas ao seu radical.
De forma mais precisa, 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, aplicou-se a tokenização, depois filtraram-se as stop words e, por fim, realizou-se o stemming nos 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 em comparação ao Porter Stemmer e é considerado um dos stemmers mais "agressivos".
No 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
Incrível!
Completion taxa melhorada para 3.45
Stemming
Deslize para mostrar o menu
Compreendendo o Stemming
Stemming é uma técnica de normalização de texto utilizada em PLN para reduzir palavras flexionadas ao seu radical.
De forma mais precisa, 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, aplicou-se a tokenização, depois filtraram-se as stop words e, por fim, realizou-se o stemming nos 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 em comparação ao Porter Stemmer e é considerado um dos stemmers mais "agressivos".
No 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!