% Her rent kompositionelt; ingen kontekst % Teknisk bemūrkning: "?" er blot et symbol ligesom "felix" s(egsk(E,Hvad)) --> np(E), vp(egsk(?,Hvad)). s(rel(E1,Hvad,E2)) --> np(E1), vp(rel(?,Hvad,E2)). np(E) --> navn(E). np(?) --> [hvem]. vp(E) --> iv(E). iv(egsk(?,sovende)) --> [sover]. vp(rel(?,Hvad,Ent)) --> tv(rel(?,Hvad,?)), np(Ent). tv(rel(?,elsker,?)) --> [elsker]. vp(rel(?,Hvad,Ent)) --> [er], pred(rel(?,Hvad,Ent)). pred(egsk(?,mand)) --> [en, mand]. pred(egsk(?,kvinde)) --> [en, kvinde]. pred(egsk(?,klog)) --> [klog]. pred(rel(?,Rel,Ent)) --> relation(rel(?,Rel,?)), np(Ent). %%% relation( Hvilken ) relation(rel(?,foraelder_til,?)) --> [foraelder,til]. relation(rel(?,bedsteforaelder_til,?)) --> [bedsteforaelder,til]. relation(rel(?,mor_til,?)) --> [mor,til]. relation(rel(?,far_til,?)) --> [far,til]. relation(rel(?,soester_til,?)) --> [soester,til]. relation(rel(?,bror_til,?)) --> [bror,til]. relation(rel(?,barn_af,?)) --> [barn,af]. %%% navn( Entitet ) --> Lex.billede navn(margrethe) --> [margrethe]. navn(frederik) --> [frederik]. navn(joachim) --> [joachim]. navn(alexandra) --> [alexandra]. navn(henrik) --> [henrik]. navn(nikolai) --> [nikolai]. navn(felix) --> [felix]. navn(benedikte) --> [benedikte]. navn(anne_marie) --> [anne, marie]. navn(ingrid) --> [ingrid]. navn(frederikIX) --> [frederikIX]. navn(mary) --> [mary]. % NB: grammatik og 'lexicon'=ordbog blandet sammen % leksikalsk og morfologisk analyse ignoreret % Eksempler % ?- phrase(s(S),[margrethe,sover]). % ?- phrase(s(S),[r2d2,sover]). % ?- phrase(s(S),[hvem,er,far,til,anne,marie]). % ?- phrase(s(S),[hvem,er,soester,til,margrethe]). % ?- phrase(s(S),[hvem,er,far,til,hvem]). % % Generering af saetninger: % phrase(s(rel(margrethe,soester_til,benedikte)), L). % L = [margrethe,er,soester,til,benedikte] % % Men: phrase(s(rel(X,soester_til,benedikte)), L). % L = [margrethe,er,soester,til,benedikte] % L= [frederik,er,soester,til,benedikte] % .... % Foelgende virker for de fleste saetninger uden 'hvem' check(Text):- phrase( s(Sem), Text), link_til_VB(Sem). % besvar(Spoegsmaal,Svar) % (ikke kodet sŒ elegant som det kunne) besvar(Sp,Sv):- phrase( s(rel(X,Hvad,Y)), Sp), (X = ?, Y = ? -> dif(RigtigX,?), dif(RigtigY,?), link_til_VB( rel(RigtigX,Hvad,RigtigY) ), phrase( s(rel(RigtigX,Hvad,RigtigY)), Sv) ; X = ? -> dif(RigtigX,?), link_til_VB( rel(RigtigX,Hvad,Y) ), phrase( s(rel(RigtigX,Hvad,Y)), Sv) ; Y = ? -> dif(RigtigY,?), link_til_VB( rel(X,Hvad,RigtigY) ), phrase( s(rel(X,Hvad,RigtigY)), Sv) ; phrase( s(Sem), Sp), link_til_VB(Sem), Sv=ja ; Sv=nej). besvar(Sp,Sv):- phrase( s(egsk(X,Hvad)), Sp), (X = ? -> dif(RigtigX,?), link_til_VB( egsk(RigtigX,Hvad) ), phrase( s(egsk(RigtigX,Hvad)), Sv) ; phrase( s(Sem), Sp), link_til_VB(Sem), Sv=ja ; Sv=nej).