1

私はこのフレーズツリーを持っています

(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。))))

このように配列に変換する必要があります

S-> NP VP
NP-> ADJP NN NN NN NN NN NN NN NN NN NN NN NN NN
ADJP-> JJVP-
>VBZ

など...

それらを変換するアルゴリズムはありますか?

4

2 に答える 2

2

何をする必要があるかを実際に正確に確認できます。

すべての開始ブラケットは子であり、すべての終了ブラケットはその要素の子の終わりです。

あなたが何をしようとしているのかわかりませんが、それは簡単です...

詳細については、こちらをお読みください:http: //en.wikipedia.org/wiki/Parse_tree

于 2012-05-07T08:31:11.617 に答える
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 Bahasa)の後にブラケットを1つ追加する必要がありました。これは、質問のタイプミスだと思いますか?)

于 2012-05-07T20:44:14.297 に答える