在文件中存储和读取NLTK块树

时间:2015-03-27 13:50:05

标签: nltk tagged-corpus

我有一个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的适当参数,但我不知道如何自定义它。

  • 我应该使用什么NLTK阅读器来阅读上面的t1
  • 或者,有没有办法将NLTK Tree对象保存在文件中,并将其作为原始结构检索?

1 个答案:

答案 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

希望这有帮助!