最近我一直试图解析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文档一起工作,以便我自己实现这些方法请告诉我
答案 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
。