【问题标题】:How to remove the stop words from text file without removing white space如何从文本文件中删除停用词而不删除空格
【发布时间】:2015-04-11 08:26:53
【问题描述】:

我必须从包含 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)

【问题讨论】:

    标签: python-2.7 nltk stop-words


    【解决方案1】:

    当你写的时候,在你想要空格的地方写空格。在您的具体情况下,每个标记后的换行符似乎合适,因为您已经杀死了所有其他格式。使用 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')
    

    【讨论】:

    • 那么你会得到一条很长的线,但对你来说更有力量。
    • 在单词之间加空格。
    • 这是不可行的,因为这个文件有超过 50,000 行
    • 谢谢,我找到了解决办法
    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多