0
我已經在Prolog中設置了自然語言分析任務。到目前爲止,我的程序在一定程度上起作用。它將打印一個句子,例如,如果我輸入的[the, cat, sat, on, the, mat]
列表使其能正確輸出:從序言列表中提取單詞
(noun_phrase(det(the), np2(noun(cat))), verb_phrase(verb(sat), pp(prep(on), noun_phrase(det(the), np2(noun(mat))))))
下一個任務我要做的是從句子中提取的關鍵字,即在名詞提取名詞短語,動詞短語中的動詞和動詞短語中的名詞,因此我可以返回一個列表:[cat, sat, mat]
。任何人都可以幫我開始,因爲我非常堅持這一點。謝謝!
我當前的代碼是:
sentence(S,sentence((NP), (VP))):-
nl,
np(S, NP, R),
vp(R, VP, []),
write('sentence('), nl, write(' '), write((NP))
,nl,write(' '), write((VP)),nl,write(' ').
np([X | S], noun_phrase(det(X), NP2), R) :- det(X), np2(S, NP2, R). np(S, NP, R) :- np2(S, NP, R). np(S, np(NP, PP), R) :- append(X, Y, S), /* Changed here - otherwise possible endless recursion */ pp(Y, PP, R), np(X, NP, []).
np2([X | R], np2(noun(X)), R) :- noun(X). np2([X | S], np2(adj(X), NP), R) :- adj(X), np2(S, NP, R).
pp([X | S], pp(prep(X), NP), R):- prep(X), np(S, NP, R).
vp([X | R], verb_phrase(verb(X)), R) :- /* Changed here - added the third argument */ verb(X). vp([X | S], verb_phrase(verb(X), PP), R) :- verb(X), pp(S, PP, R). vp([X | S], verb_phrase(verb(X), NP), R) :- verb(X), np(S, NP, R).
det(the). det(with). noun(cat). noun(mat). verb(sat). prep(on). adj(big).
感謝您的幫助!非常感謝,我將如何去添加功能來從像[強,士兵,是,被殺]這樣的句子中提取單詞 – MartinM 2011-04-05 17:33:51
只要你定義了適當的動詞/名詞/形容詞等,它就會工作。 – gusbro 2011-04-05 18:51:28
好吧,我遇到了問題,因爲它似乎只有在介詞詞語出現時纔會被讀取(例如'on'),而「[強壯的士兵,被殺的]」沒有。然而,我將第二行改爲: 句子(L,句子(NP,verb_phrase(verb)(V),(VP)))), 現在看來這兩種輸入都可以工作。非常感謝你的幫助,非常感謝! – MartinM 2011-04-06 00:24:05