繁体   English   中英

Python NLTK解析标记的文本:如何检索标记的文本

[英]Python NLTK parse tagged text: how to retrieve the tagged text

我是NLTK的新手,我想为我的玩具项目尝试语法解析器。

这是我使用的代码:

tokens = nltk.regexp_tokenize(test_sentence, ptrn_for_tokenizer, flags = flags )
tagged_text = regexp_tagger.tag(tokens)
only_tags = [tag for text, tag in tagged_text]
grammar = CFG.fromstring(GRAMMAR)
parser = nltk.ChartParser(grammar, trace=0)
trees = parser.parse(only_tags)

因此,我先使用正则表达式对文本进行标记,然后使用其他正则表达式对文本进行标记,最后使用解析器获取语法树。 但是,仅使用标签(only_tags)才能完成解析,而我无法恢复已标记的文本。

这个怎么做? 这是错误的方式吗?

我了解您为POS标签编写语法的动机:NLTK的基于规则的解析器没有放置大量词汇的空间,因为它们不是真正用于实际的教学工具。 我不太确定您的解析树是什么样子,但是如果POS标签是叶节点,则可以编辑树并将单词放回去。

首先,我将手动编写一个类似于解析器可能为您提供的示例树:

mytree = nltk.Tree.fromstring("(S (DP D (AP A N)) (VP V))")

所以这是将单词放回去的方法:

>>> tokens = "the big dog runs".split()
>>> for n, pos in enumerate(mytree.leaves()):
        mytree[mytree.leaf_treeposition(n)] = nltk.Tree(pos, [ tokens[n] ])
>>> print(mytree) 
(S (DP (D the) (AP (A big) (N dog))) (VP (V runs)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM