Como remover stopwords em Python

Como remover stopwords em Python

Nesse artigo você vai compreender como remover stopwords e como você pode fazer o pré-processamento de um texto usando Python. Vamos criar um exemplo prático de pré-processamento e discutir um pouco como as bibliotecas de PLN podem te ajudar.

O que são stopwords?

As famosas Stopwords (ou palavras de parada – tradução livre) são palavras que podem ser consideradas irrelevantes para o conjunto de resultados a ser exibido em uma busca realizada em uma Search Engine. Exemplos: as, e, os, de, para, com, sem, foi. Lembre-se que para cada língua as stopwords mudam, ou seja, stopwords em inglês seriam: the, a, as, etc.

Outro ponto importante é que quando dizemos que as stopwords são irrelevantes isso depende muito da busca realizada, pois o contexto da busca fará toda a diferença para cada palavra usada na pesquisa realizada. Ou seja, ao desenvolver uma aplicação de filtragem de spans, realmente as stopwords irão atrapalhar, no entanto, em outros tipos de aplicações as stopwords podem ter valor e não podem ser descartadas.

Por que devo remover stopwords?

Esse processo faz parte do pré-processamento de dados realizado nas etapas iniciais de um pipeline de PLN. Quando devemos montar um Bag-of-words, por exemplo, a maior frequência de palavras serão stopwords. Pois estas palavras são utilizadas o tempo todo para dar sentido ao texto. Portanto, remover stopwords reduz o ruído dos dados analisados.   

Removendo stopswords “na mão” com python

Parece algo idiota o que vou mostrar agora, mas é uma solução relativamente viável. Você pode remover stopwords simplesmente listando as palavras que você quer remover dentro de um vetor:

stopwords = ["the", "your", "as", "un", "but"]

A seguir você pode simplesmente tokenizar as palavras (separar uma frase em tokens) e verificar se esses tokens estão dentro do vetor, veja um exemplo:

result = []
for word in tokenized_words:
   if not(word in stopwords):
      result.append(stopwords)

No exemplo acima eu só incluo as palavras que não fazem parte do vetor de stopwords.

Removendo stopwords em Inglês com NLTK

É claro que esses algoritmos já foram implementados anteriormente e o NLTK contém várias funções que podem te ajudar nessa tarefa. Aqui vamos apresentar um exemplo funcional de como resolver esse problema:

Primeiro, vamos importar as bibliotecas

import nltk
from nltk.corpus import stopwords

Depois, inserimos um texto aleatório e fazemos a tokenização.

# inserimos um texto aleatório
texto = """France, in Western Europe, encompasses medieval cities, alpine villages and Mediterranean beaches. Paris, its capital, is famed for its fashion houses, classical art museums including the Louvre and monuments like the Eiffel Tower. The country is also renowned for its wines and sophisticated cuisine. Lascaux’s ancient cave drawings, Lyon’s Roman theater and the vast Palace of Versailles attest to its rich history."""

sentences = nltk.sent_tokenize(texto)

Agora podemos fazer a remoção das stopwords usando o seguinte código:

for i in range(len(sentences)):
    words = nltk.word_tokenize(sentences[i])
    newwords = [word for word in words if word not in stopwords.words('english')]
    sentences[i] = ' '.join(newwords)
    
print (sentences)

Esse é o resultado final:

  ['France , Western Europe , encompasses medieval cities , alpine villages Mediterranean beaches .', 'Paris , capital , famed fashion houses , classical art museums including Louvre monuments like Eiffel Tower .', 'The country also renowned wines sophisticated cuisine .', 'Lascaux ’ ancient cave drawings , Lyon ’ Roman theater vast Palace Versailles attest rich history .']        

Se você quer saber mais sobre pré-processamento de dados textuais, não esqueça de acessar nosso curso de PLN. Veja também como você pode usar REGEX para encontrar padrões e manipulá-los usando python.

Vinicius dos Santos

Apenas um apaixonado por Ciência da Computação e forma com que ela pode transformar vidas!

Deixe uma resposta