2017-02-19 398 views
4

考慮下面的句子:如何使用python nltk獲取解析樹?

The old oak tree from India fell down. 

我怎樣才能使用Python NLTK的句子下面解析樹表示?

(ROOT (S (NP (NP (DT The) (JJ old) (NN oak) (NN tree)) (PP (IN from) (NP (NNP India)))) (VP (VBD fell) (PRT (RP down))))) 

我需要一個完整的例子,我在網上找不到!


編輯

我已經通過了this book chapter瞭解使用NLTK分析,但問題是,我需要一個語法解析句子或我沒有短語。我發現this stackoverflow post其中也有關於語法解析的問題,但在那裏沒有令人信服的答案。

所以,我正在尋找一個完整的答案,可以給我一個句子的分析樹。

+0

NLTK有幾種解析器(http://www.nltk.org/api/nltk.parse.html) IIRC我的偏好使用斯坦福大學之一。 –

+0

你能給我一個示例代碼嗎?我真的在艱難的時間來解決這個問題。 –

+0

我必須跑掉,如果在接下來的12小時內沒有人發佈任何內容,我會回來發佈一些內容。已經有一段時間了,我不得不挖掘一些舊代碼(可能將它從julia翻譯成python)。 –

回答

4

以下是使用StanfordCoreNLP替代nltk的替代解決方案。在StanfordCoreNLP之上建立的庫很少,我個人使用pycorenlp來解析句子。

首先你必須下載stanford-corenlp-full文件夾裏面你有*.jar文件。並在文件夾內運行服務器(默認端口爲9000)。

export CLASSPATH="`find . -name '*.jar'`" 
java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer [port?] # run server 

然後在Python中,您可以運行以下命令來標記句子。

from pycorenlp import StanfordCoreNLP 
nlp = StanfordCoreNLP('http://localhost:9000') 

text = "The old oak tree from India fell down." 

output = nlp.annotate(text, properties={ 
    'annotators': 'parse', 
    'outputFormat': 'json' 
}) 

print(output['sentences'][0]['parse']) # tagged output sentence 
+0

感謝它爲我工作。只是想知道是否有更簡單的方法可以完成這項任務! –

+0

啊,我不確定在NLTK中是否有快速解決方案來解析樹。使用StanfordCoreNLP與pycorenlp包裝似乎是這項任務的一個好方法。也許有一種方法可以爲NLTK添加StanfordNLP路徑來解析文本?我很想知道替代解決方案! – titipata

+0

@titipat起始服務器提供以下錯誤消息:'無效的最大堆大小:-Xmx4g。指定的大小超出了最大可表示大小。錯誤:無法創建Java虛擬機。錯誤:發生致命異常。程序將退出。' – user1700890