NLTK 分块解析树,将其保存到文件中并使用 CorpusReader 加载 class
NLTK chunked parse tree, save it into a file and loading it with CorpusReader class
假设我有一个像下面这样的分块语料库,它保存在一个名为 test.txt
的文件中
[Rapunzel/NNP] let/VBD down/RP [her/PP$ long/JJ golden/JJ hair/NN]
然后我可以用ChunkedCorpusReader加载它。
>>> from nltk.corpus.reader import ChunkedCorpusReader
>>> reader = ChunkedCorpusReader('.','test.txt')
>>> reader.chunked_sents()[0]
Tree('S', [Tree('NP', [('Rapunzel', 'NNP')]), ('let', 'VBD'), ('down', 'RP'), Tree('NP', [('her', 'PP$'), ('long', 'JJ'), ('golden', 'JJ'), ('hair', 'NN')])])
>>> print(reader.chunked_sents()[0])
(S
(NP Rapunzel/NNP)
let/VBD
down/RP
(NP her/PP$ long/JJ golden/JJ hair/NN))
然后我对 Tree 对象进行了一些更改,例如,将块标签从 NP 切换为 NPP 并调用了 new
。
>>> print(new)
(S
(NPP Rapunzel/NNP)
let/VBD
down/RP
(NPP her/PP$ long/JJ golden/JJ hair/NN))
现在我想做的是将这个 new
树保存在一个文件中,然后用 ChunkedCorpusReader 或任何其他阅读器加载它,就像我对 test.txt
所做的那样。但是,我找不到将 NLTK Tree 对象保存在文件中以及从文件中读取它的方法。有人可以帮忙吗?
print
为您提供的默认字符串转换还不错:它将单词与 POS 标记合并,并正确缩进新行。由于 file.write()
不会自动转换为字符串,您必须将 str(newtree)
传递给文件的 write
方法。
要更好地控制树的字符串表示的外观,请使用树方法 pformat()
。请注意,Tree.pformat()
在早期版本的 nltk 中被称为 Tree.pprint()
;在最新版本中,Tree.pformat()
returns 一个字符串,而 Tree.pprint()
写入标准输出。
如果您希望用方括号分隔树,请将选项 parens="[]"
添加到 pformat()
。
>>> print(new.pformat(parens="[]"))
[S
[NP Rapunzel/NNP]
let/VBD
down/RP
[NP her/PP$ long/JJ golden/JJ hair/NN]]
假设我有一个像下面这样的分块语料库,它保存在一个名为 test.txt
[Rapunzel/NNP] let/VBD down/RP [her/PP$ long/JJ golden/JJ hair/NN]
然后我可以用ChunkedCorpusReader加载它。
>>> from nltk.corpus.reader import ChunkedCorpusReader
>>> reader = ChunkedCorpusReader('.','test.txt')
>>> reader.chunked_sents()[0]
Tree('S', [Tree('NP', [('Rapunzel', 'NNP')]), ('let', 'VBD'), ('down', 'RP'), Tree('NP', [('her', 'PP$'), ('long', 'JJ'), ('golden', 'JJ'), ('hair', 'NN')])])
>>> print(reader.chunked_sents()[0])
(S
(NP Rapunzel/NNP)
let/VBD
down/RP
(NP her/PP$ long/JJ golden/JJ hair/NN))
然后我对 Tree 对象进行了一些更改,例如,将块标签从 NP 切换为 NPP 并调用了 new
。
>>> print(new)
(S
(NPP Rapunzel/NNP)
let/VBD
down/RP
(NPP her/PP$ long/JJ golden/JJ hair/NN))
现在我想做的是将这个 new
树保存在一个文件中,然后用 ChunkedCorpusReader 或任何其他阅读器加载它,就像我对 test.txt
所做的那样。但是,我找不到将 NLTK Tree 对象保存在文件中以及从文件中读取它的方法。有人可以帮忙吗?
print
为您提供的默认字符串转换还不错:它将单词与 POS 标记合并,并正确缩进新行。由于 file.write()
不会自动转换为字符串,您必须将 str(newtree)
传递给文件的 write
方法。
要更好地控制树的字符串表示的外观,请使用树方法 pformat()
。请注意,Tree.pformat()
在早期版本的 nltk 中被称为 Tree.pprint()
;在最新版本中,Tree.pformat()
returns 一个字符串,而 Tree.pprint()
写入标准输出。
如果您希望用方括号分隔树,请将选项 parens="[]"
添加到 pformat()
。
>>> print(new.pformat(parens="[]"))
[S
[NP Rapunzel/NNP]
let/VBD
down/RP
[NP her/PP$ long/JJ golden/JJ hair/NN]]