2015-02-23 56 views
5

我有一個由斯坦福大學的CoreNLP系統預處理的語句語料庫。它提供的一件事是句子的分析樹(基於選區)。雖然我能理解時,它的繪製(如樹)一個解析樹,我不知道如何在這種格式閱讀:如何閱讀基於選區的分析樹

如:

  (ROOT 
      (FRAG 
      (NP (NN sent28)) 
      (: :) 
      (S 
      (NP (NNP Rome)) 
      (VP (VBZ is) 
      (PP (IN in) 
      (NP 
      (NP (NNP Lazio) (NN province)) 
      (CC and) 
      (NP 
      (NP (NNP Naples)) 
      (PP (IN in) 
      (NP (NNP Campania)))))))) 
      (. .))) 

原句是:

sent28: Rome is in Lazio province and Naples in Campania . 

我該如何讀取這棵樹,或者是否有一個代碼(在python中)可以正確地執行它? 謝謝。

回答

10

NLTK有一個閱讀解析樹的類:nltk.tree.Tree。相關的方法稱爲fromstring。然後,您可以迭代其子樹,樹葉等...

另一方面:您可能想要刪除說明sent28:的位,因爲它會使解析器(它也不是句子的一部分)混淆。你沒有得到一個完整的解析樹,而只是一個句子片段。

+5

謝謝!我添加了'從nltk.draw.tree import draw_trees >>> draw_trees(tree)'將其視爲一棵真正的樹:-) [哦,我不能脫下sent28',它是作業的一部分。 ..] – Cheshie 2015-02-23 14:58:24

+2

忘了說:'Tree.pprint'也很方便 – mbatchkarov 2015-02-23 15:03:54

-3

你可以使用斯坦福解析器,如:

sentences = parser.raw_parse_sents(["Hello, My name is Melroy.", "What is your name?"]) #probably raw_parse(just a string) or parse_sents(list but has been splited) 
for line in sentences: 
    for sentence in line: 
     ***sentence.draw()***