【发布时间】:2017-12-09 18:22:18
【问题描述】:
我在 prolog 中创建了一个句子解析器。它成功地解析了输入的句子......
?- sentence([input,sentence,here],Parse).
这是我用来解析句子的代码:
np([X|T],np(det(X),NP2),Rem):- /* Det NP2 */
det(X),
np2(T,NP2,Rem).
np(Sentence,Parse,Rem):- np2(Sentence,Parse,Rem). /* NP2 */
np(Sentence,np(NP,PP),Rem):- /* NP PP */
np(Sentence,NP,Rem1),
pp(Rem1,PP,Rem).
np2([H|T],np2(noun(H)),T):- noun(H). /* Noun */
np2([H|T],np2(adj(H),Rest),Rem):- adj(H),np2(T,Rest,Rem).
pp([H|T],pp(prep(H),Parse),Rem):- /* PP NP */
prep(H),
np(T,Parse,Rem).
vp([H| []], vp(verb(H))):- /* Verb */
verb(H).
vp([H|T], vp(verb(H), Rem)):- /* VP PP */
vp(H, Rem),
pp(T, Rem, _).
vp([H|T], vp(verb(H), Rem)):- /* Verb NP */
verb(H),
np(T, Rem, _).
我应该提到输出是:sentence(np(det(a), np2(adj(very), np2(adj(young), np2(noun(boy))))), vp(verb(loves), np(det(a), np2(adj(manual), np2(noun(problem)))))).
使用预定义的词汇表:det(a), adj(very), adj(young), noun(boy), verb(loves), det(a), adj(manual), noun(problem)。
我想要做的是将解析后的输出传递给谓词,将单词分成三个不同的类别,即“主语、动词和宾语”。
(1) 主语将包含前两个形容词,然后是名词。
(2) 动词将包含“动词短语”中的动词。
(3) 宾语将包含“动词短语”中的形容词和名词。
所有的限定符都应该被忽略。
例如,我想要一个在输出中查找形容词的谓词。
我已经尝试了很多方法来尝试使其正常工作,但没有任何工作。任何帮助将不胜感激。
【问题讨论】:
-
好的。我已经添加了用于解析句子的代码。