2016-09-04 5 views
1

は(http://nlp.stanford.edu:8080/corenlp/processかなり印刷オプションで得られた)解析木を考えると元の文章に到達するためにNLP解析木をリバースエンジニアリングする方法は?

(ROOT (S (NP (PRP You)) (VP (MD could) (VP (VB say) (SBAR (IN that) (S (NP (PRP they)) (ADVP (RB regularly)) (VP (VB catch) (NP (NP (DT a) (NN shower)) (, ,) (SBAR (WHNP (WDT which)) (S (VP (VBZ adds) (PP (TO to) (NP (NP (PRP$ their) (NN exhilaration)) (CC and) (NP (FW joie) (FW de) (FW vivre))))))))))))) (. .))) 

どのように私は、元の文に到着するだろうか?

You could say that they regularly catch a shower, which adds to their exhilaration and joie de vivre. 

私はいくつかの正規表現の魔法を使用して考えていますが、スタンフォード大学NLPは、このタスクを実行する機能が組み込まれていた場合、私は疑問に思いますか?

答えて

3

文字列をTreeに変換するには、Tree.fromstring()を使用します。これで、Tree.leaves()メソッドを使用して、ツリーからすべてのトークンを取得できます。

コード:

from nltk import Tree 

parse_str = "(ROOT (S (NP (PRP You)) (VP (MD could) (VP (VB say) (SBAR (IN that) (S (NP (PRP they)) (ADVP (RB regularly)) (VP (VB catch) (NP (NP (DT a) (NN shower)) (, ,) (SBAR (WHNP (WDT which)) (S (VP (VBZ adds) (PP (TO to) (NP (NP (PRP$ their) (NN exhilaration)) (CC and) (NP (FW joie) (FW de) (FW vivre))))))))))))) (. .)))" 

t = Tree.fromstring(parse_str) 

#print t.leaves() 
print ' '.join(t.leaves()) 

出力:出力がトークン化されたよう

You could say that they regularly catch a shower , which adds to their exhilaration and joie de vivre . 
+0

のTHX @RAVIが見えますか?トークン化されていないバージョンも入手できますか? – giorgio79

+1

構文解析出力にトークン化されていない文章情報は保存されないため、その出力を得ることはできません。 – RAVI

+1

あなたの要件に応じて、toeknの後にスペースを追加するかどうかを判断するためにトークン文字列に基づいていくつかのルールを書くことができます。例えば、 "、" "。"等 – RAVI

3

通常、正規表現は木のような構造を解析するほど強力ではありません。これを手作業で解析したい場合は、おそらく、各ノードを探索する再帰関数を記述することを含む小さな再帰的降下パーサを書くことが最も簡単な方法です。各リーフノードの関数が結果のテキストに追加されます。

幸いにも私はスタンフォードNLPは、葉のListに木を変換するにはいくつかの方法、およびSentenceに葉のListを変換する方法をいくつか持っているので、あなたが任意の構文解析を行う必要がありますとは思いません。 theselinksを参照してください。具体的にはTreeyieldメソッドが便利です。

私はSentence.listToOriginalTextString(tree.yield())を試してみます。それが動作しない場合は、Sentence.listToOriginalTextString(taggedLabeledYield())を試すことができます。私は100%自信がありませんので、タイプシグネチャは少し厄介です。

関連する問題