尝试将标记化输出写入fi时出现nltk错误

2024-04-25 22:13:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的文本文件(~300MB),我想把它标记成单独的句子。我使用的代码如下:

import nltk.data
f = open(filename)
r = read()
s = nltk.data.load('tokenizers/punkt/german.pickle')
print('\n---\n'.join(s.tokenize(r.strip())))

这很好,但它只是把它打印到stdout。我想把结果保存在一个单独的文件中,用它做其他的事情,而这正是我失败的时候。如果我写信

^{pr2}$

我得到AttributeError: 'str' object has no attribute 'file',如果我写

file = open('saetze.txt', 'w')
print('\n---\n'.join(s.tokenize(r.strip()))).file.write() >> file

然后我得到TypeError: unsupported operand type(s) for 'str' and 'file'

那么,将输出写入文件的正确语法是什么?在


Tags: 文件代码标记importdataopen句子file
2条回答

首先,你不应该使用单词“file”,因为它是一个python关键字。使用另一个词,比如“fp”作为要写入的文件的文件指针。现在要写入文件,请使用以下语句:

fp.write('\n -\n'.join(s.tokenize(r.strip())))

为了更清楚地说明,OP要求一个句子标记器,以及如何在NLTK中使用句子标记器,以便它输出到一个文件:

$ echo "Frau Präsidentin! Ist meine Stimme mitgezählt worden? Betrachten wir z.B. die Automobilindustrie, wo die Subventionen und verschiedenen staatlichen Beihilfen während des Berichtszeitraums um 24% gestiegen sind. Zu welchem Zweck?" > in.txt
$ cat in.txt
Frau Präsidentin! Ist meine Stimme mitgezählt worden? Betrachten wir z.B. die Automobilindustrie, wo die Subventionen und verschiedenen staatlichen Beihilfen während des Berichtszeitraums um 24% gestiegen sind. Zu welchem Zweck?

$ python
>>> import io
>>> import nltk
>>> sent_tokenizer = nltk.data.load('tokenizers/punkt/german.pickle')
>>> with io.open('in.txt', 'r', encoding='utf8') as fin, io.open('out.txt', 'w', encoding='utf8') as fout:
...     sentences = sent_tokenizer.tokenize(fin.read())
...     fout.write('\n'.join(sentences))
>>> exit()

$ cat out.txt
Frau Präsidentin!
Ist meine Stimme mitgezählt worden?
Betrachten wir z.B. die Automobilindustrie, wo die Subventionen und verschiedenen staatlichen Beihilfen während des Berichtszeitraums um 24% gestiegen sind.
Zu welchem Zweck?

相关问题 更多 >