Die Antwort von @ alvas erledigt den Job, kann aber viel schneller erledigt werden. Angenommen, Sie haben documents
: eine Liste von Zeichenfolgen.
from nltk.corpus import stopwords
from nltk.tokenize import wordpunct_tokenize
stop_words = set(stopwords.words('english'))
stop_words.update(['.', ',', '"', "'", '?', '!', ':', ';', '(', ')', '[', ']', '{', '}'])
for doc in documents:
list_of_words = [i.lower() for i in wordpunct_tokenize(doc) if i.lower() not in stop_words]
Beachten Sie, dass aufgrund der Tatsache, dass Sie hier in einem Satz (nicht in einer Liste) suchen, die Geschwindigkeit theoretisch len(stop_words)/2
mal schneller ist, was wichtig ist, wenn Sie viele Dokumente bearbeiten müssen.
Bei 5000 Dokumenten mit jeweils ungefähr 300 Wörtern beträgt der Unterschied zwischen 1,8 Sekunden für mein Beispiel und 20 Sekunden für @ alvas.
PS In den meisten Fällen müssen Sie den Text in Wörter unterteilen, um einige andere Klassifizierungsaufgaben auszuführen, für die tf-idf verwendet wird. Also wäre es höchstwahrscheinlich besser, auch Stemmer zu verwenden:
from nltk.stem.porter import PorterStemmer
porter = PorterStemmer()
und [porter.stem(i.lower()) for i in wordpunct_tokenize(doc) if i.lower() not in stop_words]
innerhalb einer Schleife zu verwenden.