nltk写入分词输出到文件时出错
我有一个很大的文本文件(大约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())))
这个代码运行得很好,但它只是把结果打印到屏幕上。我想把结果保存到一个单独的文件里,这样我就可以对它进行其他操作,但我在这方面遇到了问题。如果我写
file = open('saetze.txt', 'w')
print('\n---\n'.join(s.tokenize(r.strip()))).file.write()
我会得到一个错误: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'
所以,正确的写法是什么,才能把输出保存到文件里呢?
2 个回答
0
为了更清楚地说明,提问者在询问如何使用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?
0
首先,你不应该使用“file”这个词,因为它是Python中的一个关键字。可以用其他词,比如“fp”,来表示要写入的文件的文件指针。现在,要写入文件,可以使用下面的语句:
fp.write('\n---\n'.join(s.tokenize(r.strip())))