我對NLTK的樹函數有一些疑問。我試圖從樹結構中提取某個單詞,如下所示。用Python從nltk樹結構中提取特定的葉子值
test = Tree.parse('(ROOT(SBARQ(WHADVP(WRB How))(SQ(VBP do)(NP (PRP you))(VP(VB ask)(NP(DT a)(JJ total)(NN stranger))(PRT (RP out))(PP (IN on)(NP (DT a)(NN date)))))))')
print "Input tree: ", test
print test.leaves()
(SBARQ
(WHADVP (WRB How))
(SQ
(VBP do)
(NP (PRP you))
(VP
(VB ask)
(NP (DT a) (JJ total) (NN stranger))
(PRT (RP out))
(PP (IN on) (NP (DT a) (NN date)))))))
['How', 'do', 'you', 'ask', 'a', 'total', 'stranger', 'out', 'on', 'a', 'date']
我可以使用leaves()函數找到所有單詞的列表。有沒有辦法只得到一個特定的葉子?例如:我想只從NP短語中得到第一個/最後一個名詞?對於第一個名詞和「日期」作爲最後一個名詞,答案會是「陌生人」。
感謝它的工作。現在我只需要列出第一個項目。 – Cryssie 2013-05-07 10:19:23
使用Python 3.4.1和NLTK 3.2.1,使用'x.label()'而不是'x.node'來查找結果,否則將得到一個'NotImplementedError(「使用label()來訪問節點標籤。「)例外。 I.e:'t = list(r.subtrees(filter = lambda x:x.label()=='NP'))' – InfectedPacket 2016-10-20 22:52:59