Treebank式树解析器python

时间:2014-11-05 08:53:08

标签: java python nlp nltk

最近我一直试图解析python中stanford parser返回的语法树。我一直试图用nltk tree = Tree.parse(result['sentences'][0]['parsetree'])做到这一点并且解析成功但是nltk的树类提供了很少的处理方法。我需要像tree.isPrePreTerminal()这样的方法,这些方法不包括在我理解的内容中。我找到了this替代方案,但似乎它不喜欢64位架构,即使我使用ImportError: InputTree/_InputTree.so: wrong ELF class: ELFCLASS32标志进行编译,它也会给我这个错误-m64。 我在过去2天一直在调查这个问题,如果你知道如何让上述模块与64位系统或备用库或至少一个好的nltk.tree文档一起工作,以便我自己实现这些方法请告诉我

1 个答案:

答案 0 :(得分:1)

不幸的是,PyInputTree已不再维护。但是,InputTree解析器中的Charniak类以包裹的形式存在Tree class in BLLIP Parser。它没有实现isPrePreTerminal(),但这是一种方法:

import bllipparser

def is_prepreterminal(node):
    """Returns True iff all children of this node are preterminals."""
    subtrees = node.subtrees()
    return len(subtrees) > 0 and \
        all(subtree.is_preterminal() for subtree in subtrees)

# testing code
tree = bllipparser.Tree('(S1 (S (NP (DT This)) (VP (VBZ is) (NP (DT a) (ADJP (RB fairly) (JJ simple)) (NN parse) (NN tree))) (. .)))')
for subtree in tree.all_subtrees():
    print subtree, is_prepreterminal(subtree)

有关详细信息,请参阅PyPI上的bllipparser