:- ensure_loaded('../morfo/morfo.pl'). :- ensure_loaded('../data/wn_s_mod.pl'). :- ensure_loaded('../data/wn_det.pl'). % cend(?Second, ?CEnd) cend(is, s). % it's (it is) cend(am, m). % I'm cend(are, re). % they're cend(has, s). % it's (it has) cend(have, ve). % they've cend(would, d). % they'd cend(had, d). % they'd cend(not, t). % can't cend(us, s). % let's cend(will, ll). % she'll cend(and, n). % A'n B (tveksam? :) valid_triple(First,is,Third):- is_first_person_sing(First),\+is_past(Third),!. valid_triple(_,is,Third):- is_art(Third),!. valid_triple(_,is,Third):- is_ing(Third),!. valid_triple(_,is,Third):- is_adj(Third),!. valid_triple(_,is,Third):- is_adv(Third),!. valid_triple(_,is,Third):- is_otherwise_pf_compatible(Third),!. valid_triple(_,has,Third):- is_past(Third),!. valid_triple(CHead,us,_):- ci_compare(CHead,let),!. % ok om "let us" valid_triple(CHead,not,_):- word_ends_with(n,CHead),!. % "not" ok om CHead slutar på "n" valid_triple(_,had,Third):- is_past(Third),!. % "had X" om X är i dåtid valid_triple(_,would,Third):- \+is_past(Third),!. % "would X" om X inte är i dåtid valid_triple(_,am,_):- !. valid_triple(_,are,_):- !. valid_triple(_,have,_):- !. valid_triple(_,will,_):- !. valid_triple(_,and,_):- !. valid_triple(CHead,_,_):- downcase_atom(CHead,CHead_),irregular_chead(CHead_,_,_),!. valid_triple(CHead,Second,Third):- word_ends_with(n,CHead),reverse_pron_contract(_,Third,Second,_,Third),!. % isn, it, not is not it It Not % is_past(+Third) is_past(Word):- atom(Word),downcase_atom(Word,W),morfo(W,_,Suffix),past_suffix(Suffix). past_suffix(-en). past_suffix(-ed). past_suffix(-past). % is_adv(+Third) is_adv(Word):- s(_,_,Adv,r,_,_),ci_compare(Word,Adv). % is_adj(+Third) is_adj(Word):- s(_,_,Adj,a,_,_),ci_compare(Word,Adj). is_adj(Word):- s(_,_,Adj,s,_,_),ci_compare(Word,Adj). % is_art(+Third) is_art(Word):- det(_,_,Art,det,_,_),ci_compare(Word,Art). % is_noun(+Third) is_noun(Word):- s(_,_,Noun,n,_,_),ci_compare(Word,Noun). % is_ing(+Third) is_ing(Word):- atom(Word),downcase_atom(Word,W),morfo(W,_,-ing). % is_otherwise_pf_compatible(+Third) is_otherwise_pf_compatible(Word):- \+var(Word), downcase_atom(Word,W), member(W,[ not,no,neither,either,both, before,as, here,there, i,you,he,she,it,this,that,we,they, me,him,us,them, my,your,his,her,its,our,their, mine,yours,hers,ours,theirs ]). % is_first_person_sing(+Word) is_first_person_sing(Word):- atom(Word), downcase_atom(Word,W), member(W,[ he,she,it, mine ]). % chead(+CHead, ?NewCHead, ?Second). chead(CHead,NewCHead,Second):- downcase_atom(CHead,CHead_), irregular_chead(CHead_,NewCHead,Second). chead(CHead,NewCHead,not):- downcase_atom(CHead,CHead_), \+irregular_chead(CHead_,NewCHead,not), word_ends_with(n,CHead), atom_chars(CHead,List), append(NewList,[N],List), downcase_atom(N,n), atom_chars(NewCHead,NewList),!. chead(CHead,CHead,_):- downcase_atom(CHead,CHead_), \+irregular_chead(CHead_,_,_). % is not it >> is it not % regular_pron_contract(is, not, it, It, Not) % regular_pron_contract(?First, ?Second, +Third, ?NewSecond, ?NewThird) reverse_pron_contract(_,not,Third,Third,not):- atom(Third), downcase_atom(Third,Third_), member(Third_,[ i,you,he,she,it,this,that,we,they, mine,yours,hers,ours,theirs]). ci_compare(Atom1, Atom2):- atom(Atom1),atom(Atom1), downcase_atom(Atom1,A1), downcase_atom(Atom2,A2), A1==A2.