如何从文本文件中删除停用词而不删除空格

问题描述:

我必须从包含50K推文的文本文件中删除停用词。当我运行此代码时,它会成功删除停用词,但同时它也会删除空格。我想在文本中使用空格。如何从文本文件中删除停用词而不删除空格

from nltk.tokenize import word_tokenize 
from nltk.corpus import stopwords 
import codecs 

import nltk 

stopset = set(stopwords.words('english')) 

writeFile = codecs.open("outputfile", "w", encoding='utf-8') 

with codecs.open("inputfile", "r", encoding='utf-8') as f: 
      line = f.read() 
      tokens = nltk.word_tokenize(line) 
      tokens = [w for w in tokens if not w in stopset] 
      for token in tokens: 
       writeFile.write(token) 

当你写的时候,在你想要的空白处写上空格。在具体的情况下,每个标记后面的换行符看起来都合适,因为您已经在查看所有其他格式。使用print代替write确实是不需要你有一个明确的换行符来标记:

from __future__ import print_function # if you're on Python 2 
# ... 
for token in tokens: 
    print(token, file=writeFile) 

另外,如果你想空间,而不是换行,把空间。 如果您有令牌的数量有限,你可以只

print(' '.join(tokens), file=writeFile) 

但这会吃内存的料块在打印之前一起加入字符串,所以遍历的标记会更经济。但是,因为您一次处理一条线,所以加入可能足够好,并且会在一条输出线上将来自一条输入线的令牌集合在一起。

如果您有大量每行的令牌,并希望循环在他们的记忆效率,一个常见的成语是声明一个分离器最初是空的:

sep = '' 
for token in tokens: 
    writeFile.write('{}{}'.format(sep, token)) # str.format(): py >= 2.6 
    sep=' ' 
writeFile.write('\n') 
+1

那么你将结束一条很长的路线,但对你更有力量。 – tripleee 2015-02-11 04:44:57

+0

在单词之间放置空格。 – tripleee 2015-02-11 04:51:04

+0

它不可行,因为这个文件有超过50000行 – ALphaCS 2015-02-11 04:52:16