2015-02-11 2 views
-2

Мне нужно удалить стоп-слова из текстового файла, содержащего 50 тыс. Твитов. когда я запускаю этот код, он успешно удаляет стоп-слова, но в то же время удаляет пустое пространство. Я хочу пустое пространство в тексте.HOw для удаления стоп-слов из текстового файла без удаления пробела

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) 

ответ

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') 
+1

Тогда вы будете в конечном итоге с одна действительно длинная линия, но больше силы для вас. – tripleee

+0

Проложить пробелы между словами. – tripleee

+0

Невозможно, потому что этот файл имеет более 50 000 строк. – ALphaCS