从 NLTK 中的大型令牌中删除垃圾词

Remove junk word from large sized token in NLTK

我无法处理大型文本文件..

场景:文本文件转换为token及其长度为250000的列表

而且我想从中删除垃圾词。为此,我正在使用 nltk 和列表理解。

但对于列表大小 100,其列表理解需要 10 秒。

from nltk.corpus import stopwords,words

strt_time = time.time()
no_junk = [x for x in vocab_temp if x in words.words()]
print(time.time() - strt_time)
9.56

所以对于完整的设置,需要几个小时。

如何优化这个?

这是因为在您的列表理解中,您每次迭代都会调用 words.words()。由于每次比较都不会改变,因此您可以将其移出循环。

from nltk.corpus import stopwords,words
import nltk

nltk.download('words')

vocab_temp =  ['hello world'] * 100
keep_words = words.words() 

[x for x in vocab_temp if x in keep_words]