123 votes

Comment supprimer les mots vides en utilisant nltk ou python ?

J'ai donc un jeu de données dont je voudrais supprimer les mots vides en utilisant la méthode suivante

stopwords.words('english')

Je me demande comment l'utiliser dans mon code pour supprimer simplement ces mots. J'ai déjà une liste des mots de cet ensemble de données, la partie qui me pose problème est la comparaison avec cette liste et la suppression des mots vides. Toute aide est la bienvenue.

4 votes

Où avez-vous trouvé les mots-clés ? Est-ce que ça vient de NLTK ?

41 votes

@MattO'Brien from nltk.corpus import stopwords pour les futurs googlers

13 votes

Il est également nécessaire d'exécuter nltk.download("stopwords") afin de rendre le dictionnaire de mots vides disponible.

221voto

Daren Thomas Points 26812
from nltk.corpus import stopwords
# ...
filtered_words = [word for word in word_list if word not in stopwords.words('english')]

0 votes

Merci aux deux réponses, elles fonctionnent toutes les deux, mais il semblerait que j'ai un défaut dans mon code qui empêche la liste d'arrêt de fonctionner correctement. Je ne suis pas sûr de la façon dont les choses fonctionnent ici pour l'instant !

54 votes

Pour améliorer les performances, pensez à stops = set(stopwords.words("english")) à la place.

1 votes

>>> import nltk >>> nltk.download() Source :

19voto

David Lemphers Points 1314

Vous pouvez aussi faire une différence de jeu, par exemple :

list(set(nltk.regexp_tokenize(sentence, pattern, gaps=True)) - set(nltk.corpus.stopwords.words('english')))

22 votes

Remarque : cette opération convertit la phrase en un SET qui supprime tous les mots en double et vous ne pourrez donc pas utiliser le comptage de fréquence sur le résultat.

1 votes

La conversion en un ensemble pourrait supprimer des informations viables de la phrase en raclant les multiples occurrences d'un mot important.

17voto

sumitjainjr Points 363

Pour exclure tous les types de mots d'arrêt, y compris les mots d'arrêt nltk, vous pouvez faire quelque chose comme ceci :

from stop_words import get_stop_words
from nltk.corpus import stopwords

stop_words = list(get_stop_words('en'))         #About 900 stopwords
nltk_words = list(stopwords.words('english')) #About 150 stopwords
stop_words.extend(nltk_words)

output = [w for w in word_list if not w in stop_words]

1 votes

Je reçois len(get_stop_words('en')) == 174 vs len(stopwords.words('english')) == 179

0 votes

L'itération dans une liste n'est pas efficace.

14voto

das_weezul Points 3531

Je suppose que vous avez une liste de mots (liste_mots) dont vous voulez supprimer les mots d'arrêt. Vous pourriez faire quelque chose comme ceci :

filtered_word_list = word_list[:] #make a copy of the word_list
for word in word_list: # iterate over word_list
  if word in stopwords.words('english'): 
    filtered_word_list.remove(word) # remove word from filtered_word_list if it is a stopword

5 votes

Ce sera beaucoup plus lent que la compréhension de la liste de Daren Thomas...

8voto

user_3pij Points 1078

Il existe un paquetage python très simple et léger. stop-words juste pour cette raison.

Installez d'abord le paquet en utilisant : pip install stop-words

Ensuite, vous pouvez retirer vos mots sur une ligne en utilisant la compréhension de liste :

from stop_words import get_stop_words

filtered_words = [word for word in dataset if word not in get_stop_words('english')]

Ce paquet est très léger à télécharger (contrairement à nltk), il fonctionne à la fois pour Python 2 et Python 3 ,et il a des mots d'arrêt pour beaucoup d'autres langues comme :

    Arabic
    Bulgarian
    Catalan
    Czech
    Danish
    Dutch
    English
    Finnish
    French
    German
    Hungarian
    Indonesian
    Italian
    Norwegian
    Polish
    Portuguese
    Romanian
    Russian
    Spanish
    Swedish
    Turkish
    Ukrainian

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X