2017-08-11 1 views
0

J'ai un problème avec la suppression des mots vides. Quand j'exécute mon script: `nltk suppression des mots vides donne la mauvaise sortie

import nltk 
from nltk.corpus import stopwords 
file1=open('english.txt', 'r') 
english=file1.read() 
file1.close() 
english_corpus_lowercase =([w.lower() for w in english]) 
english_without_punc=''.join([c for c in english_corpus_lowercase if c not in (",", "``", "`", "?", ".", ";", ":", "!", "''", "'", '"', "-", "(", ")")]) 
print(english_without_punc) 
print(type(english_without_punc)) 
stopwords = nltk.corpus.stopwords.words('english') 
print(stopwords) 
english_corpus_sans_stopwords = set() 
for w in english_without_punc: 
    if w not in stopwords: 
     english_corpus_sans_stopwords.add(w) 
     print(english_corpus_sans_stopwords) 

Cela me donne ce qui suit. Comment pourrais-je le réparer?

{'b', 'n', 'f', 'l', 'v', 'h', 'k', 'e', 'r', ' ', 'w', '“', 'g', 'u', 'p', 'c'} 
{'b', 'n', 'f', 'l', 'v', 'h', 'k', 'e', 'r', ' ', 'w', '“', 'g', 'u', 'p', 'c'} 
{'b', 'n', 'f', 'l', 'v', 'h', 'k', 'e', 'r', ' ', 'w', '“', 'g', 'u', 'p', 'c'} 
{'b', 'n', 'f', 'l', 'v', 'h', 'k', 'e', 'r', ' ', 'w', '“', 'g', 'u', 'p', 'c'} 
{'b', 'n', 'f', 'l', 'v', 'h', 'k', 'e', 'r', ' ', 'w', '“', 'g', 'u', 'p', 'c'} 
{'b', 'n', 'f', 'l', 'v', 'h', 'k', 'e', 'r', ' ', 'w', '“', 'g', 'u', 'p', 'c'} 
{'b', 'n', 'f', 'l', 'v', 'h', 'k', 'e', 'r', ' ', 'w', '“', 'g', 'u', 'p', 'c'} 
{'b', 'n', 'f', 'l', 'v', 'h', 'k', 'e', 'r', ' ', 'w', '“', 'g', 'u', 'p', 'c'} 
{'b', 'n', 'f', 'l', 'v', 'h', 'k', 'e', 'r', ' ', 'w', '“', 'g', 'u', 'p', 'c'} 
+0

Votre 'english_corpus_lowercase' n'est pas une liste de mots, mais une chaîne de caractères. Vous devez le marquer en premier. – DyZ

+0

En remarque, puisque "' '" et autres ne sont pas des chaînes de caractère unique, elles ne seront jamais éliminées de votre texte. – DyZ

Répondre

0

Essayez le ci-dessous:

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

file1 = open('english.txt', 'r') 
english = file1.read() 
file1.close() 

english_corpus_lowercase = [w.lower() for w in word_tokenize(english)] 
english_without_punc = [c for c in english_corpus_lowercase if c not in (",", "``", "`", "?", ".", ";", ":", "!", "''", "'", '"', "-", "(", ")")] 
english_corpus_sans_stopwords = [] 
stopwords = nltk.corpus.stopwords.words('english') 

for w in english_without_punc: 
    if w not in stopwords: 
     english_corpus_sans_stopwords.append(w) 
print(english_corpus_sans_stopwords) 
+0

Merci beaucoup! Cela fonctionne parfaitement)) –

+0

Vous êtes les bienvenus, l'astuce consistait simplement à utiliser word_tokenize, qui s'occupe de la lourde charge pour vous :) – Andras