@ alvas的答案可以完成这项任务,但可以更快地完成 . 假设你有 documents :一个字符串列表 .
from nltk.corpus import stopwords
from nltk.tokenize import wordpunct_tokenize
stop_words = set(stopwords.words('english'))
stop_words.update(['.', ',', '"', "'", '?', '!', ':', ';', '(', ')', '[', ']', '{', '}']) # remove it if you need punctuation
for doc in documents:
list_of_words = [i.lower() for i in wordpunct_tokenize(doc) if i.lower() not in stop_words]
请注意,由于您在这里搜索集合(不在列表中),理论上速度理论上会快 len(stop_words)/2 倍,如果您需要通过许多文档操作,这很重要 .
对于5000个大约300个单词的文档,我的例子为1.8秒,@ alvas为20秒 .
附:在大多数情况下,您需要将文本划分为单词以执行其他使用tf-idf的分类任务 . 所以最有可能的是使用stemmer也会更好:
from nltk.stem.porter import PorterStemmer
porter = PorterStemmer()
并在循环内使用 [porter.stem(i.lower()) for i in wordpunct_tokenize(doc) if i.lower() not in stop_words] .