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

Python NLTK解析标记文本:如何检索标记文本,python,regex,nltk,Python,Regex,Nltk,我是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 = n

我是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)
因此,我使用regex标记文本,然后使用其他regex标记文本,最后使用解析器生成语法树。但是解析只使用标记(仅使用_标记)完成,我无法恢复标记的文本


如何做到这一点?这是错误的方法吗?

我理解您编写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)))

没有答案,没有评论。愚蠢的问题?谢谢你的评论。我现在切换到带有块语法的RegexParser。它似乎没有NLTK提供的CFG解析器那么严格。我建议您研究一下统计解析。除非你有足够的资源来编写成千上千的规则,否则手写规则是不可认真使用的。