How to remove stopwords from tokenized sentences?

191 views
Skip to first unread message

Baba Dook

unread,
Mar 5, 2022, 2:22:20 PM3/5/22
to nltk-users
Hi there dear community,

I am trying to remove stopwords from a text. My approach is the following.

1. Tokenize the whole text into words.
2. Removal of stepwords on the resulting array of words.
3. Joint the tokenized words back into an array of sentences (I am stuck in here).

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

text = "El trabajo es en primer término un proceso entre la naturaleza y el hombre, proceso en que este realiza, regula y controla mediante su propia acción su intercambio de materias con la naturaleza. En este proceso, el hombre se enfrenta como un poder natural con la materia de la naturaleza. Pone en acción las fuerzas naturales que forman su corporeidad, los brazos y las piernas, la cabeza y la mano, para de ese modo asimilarse, bajo una forma útil para su propia vida, las materias que la naturaleza le brinda. Y a la par que de ese modo actúa sobre la naturaleza exterior a él y la transforma, transforma su propia naturaleza, desarrollando las potencias que dormitan en él y sometiendo el juego de sus fuerzas a su propia disciplina. Aquí no vamos a ocuparnos de las primeras formas de trabajo, formas instintivas y de tipo animal. Aquí, partimos del supuesto del trabajo plasmado ya bajo una forma en la que pertenece exclusivamente al hombre. Una araña ejecuta operaciones que semejan a las manipulaciones del tejedor, y la construcción de los panales de las abejas podría avergonzar, por su perfección, a más de un maestro de obras. Pero, hay algo en que el peor maestro de obras aventaja, desde luego, a la mejor abeja, y es el hecho de que, antes de ejecutar la construcción, la proyecta en su cerebro. Al final del proceso de trabajo, brota un resultado que antes de comenzar el proceso existía ya en la mente del obrero; es decir, un resultado que tenía ya existencia ideal. El obrero no se limita a hacer cambiar de forma la materia que le brinda la naturaleza, sino que, al mismo tiempo, realiza en ella su fin, fin que él sabe que rige como una ley las modalidades de su actuación y al que tiene necesariamente que supeditar su voluntad. Y esta supeditación no constituye un acto aislado. Mientras permanezca trabajando, además de esforzar los órganos que trabajan, el obrero ha de aportar esa voluntad consciente del fin a que llamamos atención, atención que deberá ser tanto más reconcentrada cuanto menos atractivo sea el trabajo, por su carácter o por su ejecución, para quien lo realiza, es decir, cuanto menos disfrute de él el obrero como de un juego de sus fuerzas físicas y espirituales."

nltk_tokens = nltk.word_tokenize(text) # Tokenization of whole text

spanish_stops = set(stopwords.words('spanish')) # Set of stopwords

tokens_without_stopwords = [word for word in nltk_tokens if not word in spanish_stops] # Removal of stopwords

print(tokens_without_stopwords)

what I wanna do next is to joint my tokens into sentences. I know a sentence ends when we reach a punctuation sign (.), maybe I can tokenize back with a regular expression?

Thank you everyones.

Jordi Carrera

unread,
Mar 6, 2022, 2:02:35 PM3/6/22
to nltk-users
You can use nltk's `sent_tokenize` method to split the text into sentences before removing stopwords, then remove stopwords in each sentence, e.g.

```
from nltk.corpus import stopwords
from nltk.tokenize import sent_tokenize
from nltk.tokenize import word_tokenize

spanish_stops = set(stopwords.words('spanish')) # Set of stopwords

text = "El trabajo es en primer término un proceso entre la naturaleza y el hombre, proceso en que este realiza, regula y controla mediante su propia acción su intercambio de materias con la naturaleza. En este proceso, el hombre se enfrenta como un poder natural con la materia de la naturaleza..."


sentences = sent_tokenize(text)

for sent in sentences:
    nltk_tokens = nltk.word_tokenize(sent)
    tokens_without_stopwords = [word for word in nltk_tokens if not word.lower() in spanish_stops]   # I'd convert the word to lowercase, otherwise sentence-initial stopwords won't be removed
    print(tokens_without_stopwords)

```

Baba Dook

unread,
Mar 11, 2022, 3:23:54 AM3/11/22
to nltk-users
Thank you for your useful answer,

I apply your code as the following

for sent in sentences:
    nltk_tokens = nltk.word_tokenize(sent)
    tokens_without_stopwords = [word for word in nltk_tokens if not word.lower() in spanish_stops]   # I'd convert the word to lowercase, otherwise sentence-initial stopwords won't be removed
    detokenizer = TreebankWordDetokenizer()
    sent_without_stopwords = detokenizer.detokenize(tokens_without_stopwords)
    tokenized_sentences = sent_tokenize(sent_without_stopwords)
    print(tokenized_sentences)

Thank you :)
Reply all
Reply to author
Forward
0 new messages