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

时间:2014-10-21 21:11:11

标签: python nltk fwrite

我有一个大文本文件(~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。我想将结果保存在一个单独的文件中,用它来做其他事情,这就是我失败的时候。如果我写

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 :(得分:0)

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

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

答案 1 :(得分:0)

为了更清楚,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?