2012-05-07 66 views
1

我有這樣的短語樹短語樹到陣列

(ROOT (S (NP (ADJP(JJ文) (NN daerah)(NN merupakan)(NN文)(NN陽) (NN digunakan)(NN尋找及體驗)(NN文)(NN pergaulan)(NN sehari-哈利)(NN二)(NN suatu)(NN daerah)(NNP tertentu)) (VP(VBZ。))))

我需要轉換成陣列,像這樣

的S - > NP VP
NP - > ADJP NN NN NN NN NN NN NN NN NN NN NN NN NN
ADJP - > JJ
VP - > VBZ

等....

有沒有任何算法來轉換它們?

回答

2

,你幾乎可以看到需要做什麼。

每打開托架是兒童,每個閉合托架是孩子該元件的端部。

我不知道你想做什麼,但它是一個這麼簡單......

閱讀更多信息:http://en.wikipedia.org/wiki/Parse_tree

+0

是的,解決了,我試着循環它直到樹的末尾,並得到關係..謝謝 – xuweisen

1

這是基於一個圖書館pymeta2一些Python代碼解析這種類型的樹。

import pymeta.grammar 

def f(name,E): 
    print name+' -> '+' '.join(E) 
    return name 

G=pymeta.grammar.OMeta.makeGrammar(""" 
name = spaces ('.'|letterOrDigit|'-')+:n -> ''.join(n) 
expr = token("(") name:p expr+:e token(")") -> f(p,e) 
    | token("(") name:p name:e token(")") -> p 
""",{'f':f}) 

s="(ROOT (S (NP (ADJP (JJ Bahasa)) (NN daerah) (NN merupakan) (NN bahasa) (NN yang) (NN digunakan) (NN dalam) (NN bahasa) (NN pergaulan) (NN sehari-hari) (NN di) (NN suatu) (NN daerah) (NNP tertentu)) (VP (VBZ .))))" 

G(s).apply("expr") 

運行這段代碼的輸出是:

ADJP -> JJ 
NP -> ADJP NN NN NN NN NN NN NN NN NN NN NN NN NNP 
VP -> VBZ 
S -> NP VP 
ROOT -> S 

(我後(JJ文)增加一個額外的支架,使這項工作,我懷疑這是問題的一個錯字? )

+0

是的,它的工作,我已經嘗試過,但我的問題是在PHP語言..但我讀你的算法,我解決了我的問題:) ..謝謝 – xuweisen