我有以下Prolog代码来识别一个句子。请注意,它也为语法构建了一个解析树。
sentence(plural,s(Np,Vp)) -->
noun_phrase(plural,Np),
verb_phrase(plural,Vp).
sentence(singular,s(Np,Vp)) -->
noun_phrase(singular,Np),
verb_phrase(singular,Vp).
我需要一个可以识别复合句子的谓词(它由两个由连词连接的句子组成)。我提出了以下代码,但执行失败。当然,在我的Prolog代码中有noun_phrase,verb_phrase等定义。
compound_sentence(comp_s(s1,Conj,s2)) -->
sentence(_,s1(Np,Vp)),
conjuction(_,Conj),
sentence(_,s2(Np,Vp)).
e.g。当我运行此查询时,它将失败。
?- phrase(compound_sentence(_),
[the,reboot,is,a,success,and,the,user,does,a,save]).
你如何检测复合句?
答案 0 :(得分:0)
查询失败的原因:
phrase(compound_sentence(_), ...)
因为(a)两个子目标句子(,s1(Np,Vp))不匹配分析树中的句子/ 2正在构建:句子(,s(Np,Vp))。 (b)两个句子不能具有相同的Np和Vp。尝试这样的事情:
compound_sentence(comp_s(S1,Conj,S2)) -->
sentence(_, S1),
conjuction(_,Conj),
sentence(_, S2).
其中S1 = s(Np1,Vp1)与第一个句子对应,而S2 = s(Np2,Vp2)与第二个句子对应。