Текст записывается в одну строку при удалении стоп-слов из столбцов - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь удалить стоп-слова из файла .txt с разделителями табуляции, используя следующий код:

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


file = open('textposts_01.txt', encoding='UTF-8')
stop_words = set(stopwords.words('english'))
line = file.read()
words = line.split()
for r in words:
    if not r in stop_words:
        appendFile = open('textposts_02.txt', mode='a', encoding='UTF-8')
        appendFile.write(" "+r)
        appendFile.close()

Код выполняется успешно, но при просмотре результатов все строки были повторно записано в одну строку. Как я могу поддерживать столбцы при удалении стоп-слов?

В похожем сообщении я нашел следующее решение:

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

file = open('textposts_01.txt', encoding='UTF-8')
stop_words = set(stopwords.words('english'))
line = file.read()
words = line.split()
for r in words:
    if not r in stop_words:
        appendFile = open('textposts_02.txt', mode='a', encoding='UTF-8')
        appendFile.write(" "+r)
        appendFile.write("\n")
        appendFile.close()

Но вставка новой строки просто создала новую строку после каждого слова, так что если я начинаю со строки, подобной этой:

0     make a list of every person you know

результаты выглядят так:

0
make
list
every
person
know

и мне нужны результаты в строках примерно так:

0     make list every person

Я искал некоторое время, но не нашел никаких решений.

Ответы [ 2 ]

2 голосов
/ 29 января 2020
appendFile.write(" "+r)

просто напишет строку без новой строки. Вы, вероятно, хотите вместо

appendFile.write(r + "\n")

.

1 голос
/ 29 января 2020

Вы можете l oop над файлом и добавить новую строку после того, как закончите с каждой строкой.

Кроме того, среди прочего, чтение всего файла за один раз не очень сильно влияет на память. дружелюбный подход Вот лучший и безопасный подход:

stop_words = set(stopwords.words('english'))
with open('textposts_01.txt', encoding='UTF-8') as f:
    with open('textposts_02.txt', mode='a', encoding='UTF-8') as append_file:
        for line in f:
            for r in line.split():
                if r not in stop_words:
                    append_file.write(" "+r)
            append_file.write("\n")
...