Как лемматизировать файл .txt, а не предложение с помощью pywsd.utils?

Я новичок в Python, который я пытаюсь изучить для базового анализа текста, моделирования тем и т. д.

Я написал следующий код для очистки моего текстового файла. Я предпочитаю функцию pywsed.utils lemmatize.sentence() функции WordNetLemmatizer() NLTK, потому что она производит более чистые тексты. Следующий код отлично работает с предложениями:

from nltk.corpus import stopwords
from pywsd.utils import lemmatize_sentence
import string

s = "Dew drops fall from the leaves. Mary leaves the room. It's completed. Hello. This is trial. We went home. It was easier. We drank tea. These are Demo Texts. Right?"

lemm = lemmatize_sentence(s)
print (lemm)

stopword = stopwords.words('english') + list(string.punctuation)
removingstopwords = [word for word in lemm if word not in stopword]
print (removingstopwords, file=open("cleaned.txt","a"))

Но то, что я не могу сделать, это лемматизировать необработанный текстовый файл в каталоге. Я предполагаю, что lemmatize.sentence() требует только строки?

Мне удается прочитать содержимое файла с помощью

with open ('a.txt',"r+", encoding="utf-8") as fin:
    lemm = lemmatize_sentence(fin.read())
print (lemm)

но на этот раз код не может удалить некоторые ключевые слова, такие как «n’t», «ll», «s» или «‘», а также знаки препинания, что приводит к неочищенному тексту.

1) Что я делаю не так? Должен ли я сначала токенизировать? (Мне также не удалось передать результаты lemmatize.sentence()).

2) Как получить содержимое выходного файла без форматирования (слова без одинарных кавычек и скобок)?

Любая помощь приветствуется. Заранее спасибо.


person Emrah Peksoy    schedule 11.11.2019    source источник


Ответы (1)


Просто примените lemmatize к каждой строке, одну за другой, а затем добавьте ее к строке с новой строкой. Так что, по сути, он делает то же самое. За исключением выполнения каждой строки, добавления ее к временной строке и разделения каждой новой строкой, а затем в конце мы распечатываем временную строку. Вы можете использовать временную строку в конце в качестве окончательного вывода.

my_temp_string = ""
with open ('a.txt',"r+", encoding="utf-8") as fin:
    for line in fin:
        lemm = lemmatize_sentence(line)
        my_temp_string += f'{lemm} \n'
print (my_temp_string)
person DUDANF    schedule 11.11.2019
comment
Пожалуйста, рассмотрите возможность добавления краткого пояснения к вашему ответу, чтобы автор вопроса мог лучше понять, что вы сделали. - person Vasilisa; 11.11.2019
comment
спасибо, но не решил мою проблему. Выдает ошибку. Трассировка (последний последний вызов): Файл ‹input›, строка 4, в ‹module› AttributeError: объект 'str' не имеет атрибута 'read' В любом случае мне также удалось прочитать содержимое. нет проблем с этим. Моя проблема связана со второй частью кода, с невозможностью удалить стоп-слова и знаки препинания. - person Emrah Peksoy; 11.11.2019
comment
Отредактировал мой ответ, попробуйте сейчас. Удалите .reads() из lemmatize_sentence(line.reads()) - person DUDANF; 11.11.2019
comment
Спасибо большое. Я получил идею. Сейчас все в порядке. - person Emrah Peksoy; 16.12.2019