如何构建Prolog语法解析树,由两个句子连接起来组成

时间:2015-12-04 04:38:10

标签: prolog dcg

我有以下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]).

你如何检测复合句?

1 个答案:

答案 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)与第二个句子对应。