2013-07-20 15 views
5

文章の解析木を作成することができました。文章のために、「その人は帰ってきました。プロローグの構文解析木を論理文に戻す方法

T = s(np(det(the), n(man)), vp(v(went), np(n(home)))) 

1)これはどのようにphrase/2を使用するのですか?

How to translate a sentence in a logical language using prolog? - 私が必要とするものに似ていますが、解決策は私にとっては機能しません。

2)これを文法パターンでマップし、wordsタグを取得します。 Det=theN(Subject)=manV=wentN(Object)=home

は、与えられた一連のツリー構造を持つこのツリーをマッピングし、文法を識別するための方法があります。 どのようにしてSubject、動詞、オブジェクト、文法パターンを識別し、目的の言語センテンスを生成するために構文解析ツリーを使用できますか?

後で編集

... 私はこのコードを試してみました、それはかなりの答えを与えます。このコードに関する提案。

sent("(s(np(n(man))) (vp(v(went)) (np(n(home)))))"). 

whitespace --> [X], { char_type(X, white) ; char_type(X, space) }, whitespace. 
whitespace --> []. 

char(C) --> [C], { char_type(C, graph), \+ memberchk(C, "()") }. 

chars([C|Rest]) --> char(C), chars(Rest). 
chars([C]) --> char(C). 

term(T) --> chars(C), { atom_chars(T, C) }. 
term(L) --> list(L). 

list(T) --> "(", terms(T), ")". 

terms([]) --> []. 
terms([T|Terms]) --> term(T), whitespace, !, terms(Terms). 

simplify([s,[np, [n,[Subject]]], [vp,[v,[Verb]],[np,[n,[Object]]]]],Result) :- Result = [Subject,Verb,Object]. 

おかげMathee

+0

「phrase/2」はDCGルールと何らかの入力リストに関連しています。あなたはどちらの方向にでも使うことができますが、構文解析もリストの生成もしていないのであれば、おそらく仕事のための正しいツールではありません。 Lispのs式は本質的にリストであるため、他の答えで私のために働いていました。 –

+0

後で追加したコードを確認してください。私はあなたの方法に従った。それはSWIのプロローグで働いていました。コードがいくつかの文法パターンと一致し、与えられた文の文法パターンを特定するための改善を提案してください。 – Mathee

+0

'white'はタブとスペースです。 'space'にはそれらが含まれているので、空白// 0に' space'だけ必要です。私は 'simplify/2'から' Result'を取り除き、リストを第2引数として置き、このルールには本文がありません。そうでなければ、それは私によく見えます。驚いたことに、これは私があなたに全く尋ねていないと思ったものではありませんでしたが、私にとっては悪くはありません。 :) –

答えて

3

行うための簡単な方法があることによって、あなたが興味を持っているシンボルに「ハードコード」木の訪問を意味しています。ここで

は、用途(=..)/ 2は、木の名前の一部をキャプチャすることを、より一般的なユーティリティです:

part_of(T, S, R) :- T =.. [F|As], 
    ( F = S, 
     R = T 
    ; member(N, As), 
     part_of(N, S, R) 
    ). 

?- part_of(s(np(det(the), n(man)), vp(v(went), np(n(home)))),np,P). 
P = np(det(the), n(man)) ; 
P = np(n(home)) ; 
false. 

それはちょうど木のため、メンバー/ 2のようなものです。 BTW私はあなたの質問の最初の部分を理解していない:なぜあなたは構文木にフレーズ/ 2を使用したいですか?通常、文法(フレーズ/ 2の最初の引数)はになります。「生の」文字ストリームからの構文ツリー...

+0

あなたの答えから物事を知ってうれしいです。しかし、私は与えられた木を文法パターンと比較する必要があります。文法のパターンでは、人を対象として取得し、オブジェクトとしてホームを取得できます。 私はhttp://stackoverflow.com/questions/14953960/how-to-translate-a-sentence-in-a-logical-language-using-prolog/17759505#17759505からフレーズのアイデアを得ました。 – Mathee

関連する問題