我設法爲給定的句子構建解析樹,這裏是句子:「這個人回家了。」如何將序言樹解析樹轉換回邏輯句子
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)我想映射這與語法模式,並獲得單詞標籤。 Det=the
,N(Subject)=man
,V=went
,N(Object)=home
是否有映射此樹與給定的樹形結構,並確定語法的方式。 如何使用解析樹來識別主語,動詞,賓語,語法模式和生成目標語言句子。
編輯後.. 我嘗試此代碼,它給了相當大的答案。對此代碼的任何建議。
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
「短語/ 2」涉及DCG規則和某種類型的輸入列表。你可以在任何方向使用它,但是如果你既沒有解析也沒有生成一個列表,它可能不適合這份工作。它在另一個答案中適用於我,因爲Lisp s表達式本質上是列表。 –
請檢查我稍後添加的代碼。我遵循你的方法。它在SWI prolog中起作用。你能否建議對代碼進行改進以匹配幾個語法模式,併爲給定句子確定語法模式。 – Mathee
'白色'是標籤和空格; 'space'包括那些,所以你只需要'空白'中的空格// 0。我將從'simplify/2'中移除'Result',並將列表作爲第二個參數,並且在此規則中沒有任何內容。否則它對我來說很好。令人驚訝的是,這並不是我認爲你所要求的,但它對我來說並不壞。 :) –