文章の解析木を作成することができました。文章のために、「その人は帰ってきました。プロローグの構文解析木を論理文に戻す方法
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=the
、N(Subject)=man
、V=went
、N(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
「phrase/2」はDCGルールと何らかの入力リストに関連しています。あなたはどちらの方向にでも使うことができますが、構文解析もリストの生成もしていないのであれば、おそらく仕事のための正しいツールではありません。 Lispのs式は本質的にリストであるため、他の答えで私のために働いていました。 –
後で追加したコードを確認してください。私はあなたの方法に従った。それはSWIのプロローグで働いていました。コードがいくつかの文法パターンと一致し、与えられた文の文法パターンを特定するための改善を提案してください。 – Mathee
'white'はタブとスペースです。 'space'にはそれらが含まれているので、空白// 0に' space'だけ必要です。私は 'simplify/2'から' Result'を取り除き、リストを第2引数として置き、このルールには本文がありません。そうでなければ、それは私によく見えます。驚いたことに、これは私があなたに全く尋ねていないと思ったものではありませんでしたが、私にとっては悪くはありません。 :) –