如何从coreNLP解析器获取二进制解析树?

时间:2019-01-08 12:27:14

标签: binary-tree stanford-nlp

我需要一个句子的二进制分析树来进行实验。但是在我使用了斯坦福解析器和CoreNLP解析器之后,我得到了非二叉树。我试图添加适当的“ parse.binaryTrees”:“ true”,但是没有用。我还尝试过以“ -binarize”之类的逗号启动服务器,它也失败了!! 那么如何从解析器中获取二叉树呢?

  

java -Xmx4g -cp“ *” edu.stanford.nlp.pipeline.StanfordCoreNLPServer -serverProperties StanfordCoreNLP.properties -port 9000 -timeout 15000

nlp = StanfordCoreNLP(r'/home/lsl/stanford-corenlp-full-2018-10-05')
output = nlp.annotate(sentence, properties={'annotators': 'parse',
                                             'parse.binaryTrees': 'true',
                                            'outputFormat': 'json'})

我想使用python解决此问题。谢谢大家!

1 个答案:

答案 0 :(得分:0)

def binarize(tree):
    """
    Recursively turn a tree into a binary tree.
    """
    if isinstance(tree, str):
        return tree
    elif len(tree) == 1:
        return binarize(tree[0])
    else:
        label = tree.label()

        return reduce(lambda x, y: (binarize(x), binarize(y)), tree)

t = Tree.fromstring("(ROOT (S (S (VP (VBD ليس) (ADVP (RB هناك)) (SBAR (WHNP (WP ما)) (S (VP (VBN يمنع) (PP (IN من) (NP (NN اخذ) (NP (DTNNS المكملات) (DTJJ الغذائية))))))))) (CC و) (S (NP (DTNNS البروتين)) (NP (NN شرط) (SBAR (SBAR (IN ان) (S (VP (VBP تكون) (ADJP (JJ مسجلة))))) (CC و) (SBAR (S (VP (VN موافق) (PP (IN على) (NP (PRP ها))) (PP (IN من) (NP (NP (NN وزارة) (NP (DTNN الصحة))) (CC او) (NP (NN مؤسسة) (NP (DTNN الغذاء) (CC و) (DTNN الدواء))) (CC و) (NP (NN دون) (NP (NP (NN مبالغة)) (PP (IN في) (NP (DT ذلك))))))))))))) (PUNC ;) (S (PP (PP (IN في) (NP (DTNN الاونة) (DTJJ الاخيرة))) (CC و) (PP (IN في) (NP (NOUN_QUANT معظم) (NP (DTNN البلدان) (DTJJ العربية))))) (VP (VBD اصبح) (VP (VBP يتسلل) (PP (IN ل) (NP (NN اسواق) (NP (PRP$ ها)))) (NP (NP (NN اصناف) (NP (NN غير) (JJ مرخصة))) (CC و) (NP (NN غير) (NP (NN مسموح)))) (PP (IN ب) (NP (PRP ها)))))) (CC و) (S (VP (VBN لوحظ) (NP (NOUN_QUANT بعض) (NP (DTNNS المضاعفات))) (PP (IN على) (NP (DTNN القلب) (CC و) (DTNN الكلى))))) (PUNC ;) (FRAG (VBP ينصح) (NP (NN عدم) (NP (NN اخذ) (NP (NP (NNS مكملات) (JJ غذائية)) (PP (PP (IN من) (NP (NN تحت) (NP (DTNN الطاولة)))) (CC او) (PP (IN من) (NP (NN خلال) (NP (NN صديق))))))))) (PUNC .)))")

bt = binarize(t)

print(bt)