2013-09-27 32 views
7

我在Python中有以下代碼。如何爲NLTK中的歧義句子生成多個分析樹?

sent = [("very","ADJ"),("colourful","ADJ"),("ice","NN"),("cream","NN"),("van","NN")] 
patterns= r""" 
    NP:{<ADJ>*<NN>+} 

""" 
NPChunker=nltk.RegexpParser(patterns) # create chunk parser 
for s in NPChunker.nbest_parse(sent): 
    print s.draw() 

輸出是:

(S (NP very/ADJ colourful/ADJ ice/NN cream/NN van/NN)) 

但輸出應該有另外2的解析樹。

(S (NP very/ADJ colourful/ADJ ice/NN) (NP cream/NN) (NP van/NN)) 
(S (NP very/ADJ colourful/ADJ ice/NN cream/NN) van/NN) 

問題是隻有第一個正則表達式是由RegexpParser採取的。我怎樣才能一次生成所有可能的分析樹?

回答

3

這對於RegexpParser類是不可能的。它從ParserI接口繼承了nbest_parse方法,並查看源代碼(https://github.com/nltk/nltk/blob/master/nltk/parse/api.py),可以看到它只是默認運行基類的解析方法並將其作爲迭代返回。

正如有人試圖在Chunking with nltk中解釋的那樣,chunking類並不是用於此目的的工具(還!),看看http://nltk.org/book/ch08.html,有一些快速示例,這些示例只會帶你走到一半想要實現,需要大量的預處理和智能設計。

相關問題