如何使用pywsd.utils对.txt文件而不是句子进行定形?

时间:2019-11-11 11:32:29

标签: python nltk data-cleaning lemmatization normalizing

我是Python的新手,我尝试学习它来进行基本的文本分析,主题建模等。

我编写了以下代码来清理文本文件。与NLTK的WordNetLemmatizer()相比,我更喜欢pywsed.utils lemmatize.sentence()函数,因为它可以生成更清晰的文本。以下代码可与句子配合使用:

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)如何获取没有任何格式(没有单引号和括号的单词)的输出文件内容?

任何帮助将不胜感激。预先感谢。

1 个答案:

答案 0 :(得分:0)

简单地将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)