我有一个NLTK树对象,其中有6个NP块。
t1 = Tree('S', [('现在', 'T'), ('每', 'RZ'), ('次', 'QV'), ('打火', 'VN'), ('比较', 'D'), ('反感', 'V'), Tree('NP', [('悦动', 'NZ')]), Tree('NP', [('打火', 'VI'), ('时', 'TG'), ('比较', 'D'), ('嘈杂', 'A'), ('的', 'UDE1'), ('声音', 'N')]), (',', 'WD'), ('当然', 'D'), Tree('NP', [('比', 'P')]), Tree('NP', [('面包车', 'N')]), Tree('NP', [('打火', 'VI'), ('的', 'UDE1'), ('声音', 'N')]), Tree('NP', [('算是', 'V'), ('好听', 'A'), ('的', 'UDE1')]), ('!', 'WT')])
我希望将此t1
保存在硬盘中,因此我将其写入如下文件中。
>>> print(t1)
(S
现在/T
每/RZ
次/QV
打火/VN
比较/D
反感/V
(NP 悦动/NZ)
(NP 打火/VI 时/TG 比较/D 嘈杂/A 的/UDE1 声音/N)
,/WD
当然/D
(NP 比/P)
(NP 面包车/N)
(NP 打火/VI 的/UDE1 声音/N)
(NP 算是/V 好听/A 的/UDE1)
!/WT)
>>> file.write(t1.__str__())
将t1
保存在文件中后,我尝试使用BracketParseCorpusReader从文件重新加载它,但它没有很好地工作。
# nltk.corpus.__init__.py
bracket2 = LazyCorpusLoader(
'Bracket2', BracketParseCorpusReader, r'car/.*\.txt', encoding='utf8')
>>> bracket2.tagged_words() # Bracket2 is a instance of BracketParseCorpusReader
[('悦动/NZ', 'NP'), ('比/P', 'NP'), ('面包车/N', 'NP'), ...]
# failed to load words other than NP chunk
>>> bracket2.tagged_words()[0]
('悦动/NZ', 'NP')
# failed to load the first word "现在/T"
>>> bracket2.tagged_sents()[0]
[('悦动/NZ', 'NP'), ('比/P', 'NP'), ('面包车/N', 'NP')]
# failed to load the whole sentence
读者不能说出单词和标签。它似乎提供了一些关于POS分离器,sent_tokenizer的适当参数,但我不知道如何自定义它。
t1
?答案 0 :(得分:0)
如果我理解正确,您希望将树保存到文件中,然后解释'那棵树后来又来了,对吧?
使用tree.fromstring()可能是要走的路:
import nltk
t = nltk.tree.Tree.fromstring("(S (NP (D the) (N dog)) (VP (V chased) (NP (D the) (N cat))))")
它完全符合名称的建议;)。
另见http://www.nltk.org/_modules/nltk/tree.html
希望这有帮助!