2:- module(morpha,[morpha/2]).    3:- use_module(library(lists),[append/3,select/3]).    4
    5/* -------------------------------------------------------------------------
    6   Pre-Processing of CCG derivation to ensure correct format
    7------------------------------------------------------------------------- */
    8
    9morpha(Tags1,[pos:Pos,lemma:New|Tags3]):-
   10   select(pos:Pos,Tags1,Tags2),
   11   select(lemma:Lem,Tags2,Tags3), !,
   12   morpha(Pos,Lem,New).
   13
   14morpha(Tags,Tags).
   15
   16/* -------------------------------------------------------------------------
   17   Morphological Rules (+POS,+Old,-New)
   18------------------------------------------------------------------------- */
   19
   20morpha(_,'n\'t',not):- !.
   21morpha(_, '\'t',not):- !.
   22
   23morpha('NN','%',percent):- !.
   24
   25morpha('$','$',dollar):- !.
   26morpha('$','£',pound):- !.
   27morpha('$','#',pound):- !.
   28morpha('$','€',euro):- !.
   29
   30morpha('VBP','\'s', be):- !.
   31morpha('VBZ','\'s', be):- !.
   32morpha('VBP','\'m', be):- !.
   33morpha('VBZ','\'m', be):- !.
   34morpha('VBP','\'re',be):- !.
   35morpha('VBZ','\'re',be):- !.
   36
   37morpha('JJR',better,    good):- !.
   38morpha('JJS',best,      good):- !.
   39morpha('JJR',worse,      bad):- !.
   40morpha('JJS',worst,      bad):- !.
   41morpha('JJR',farther,    far):- !.
   42morpha('JJR',further,    far):- !.
   43morpha('JJS',farthest,   far):- !.
   44morpha('JJS',furthest,   far):- !.
   45morpha('JJR',larger,   large):- !.
   46morpha('JJS',largest,  large):- !.
   47morpha('JJR',simpler, simple):- !.
   48morpha('JJS',simplest,simple):- !.
   49morpha('JJR',closer,   close):- !.
   50morpha('JJS',closest,  close):- !.
   51morpha('JJR',freer,     free):- !.
   52morpha('JJS',freest,    free):- !.
   53morpha('JJR',safer,     safe):- !.
   54morpha('JJS',safest,    safe):- !.
   55morpha('JJR',looser,   loose):- !.
   56morpha('JJS',loosest,  loose):- !.
   57morpha('JJR',wider,     wide):- !.
   58morpha('JJS',widest,    wide):- !.
   59morpha('JJR',wiser,     wise):- !.
   60morpha('JJS',wisest,    wise):- !.
   61
   62morpha('JJR',Lemma1,Lemma2):- name(Lemma1,Codes1), append(Codes3,"ier", Codes1),  !, append(Codes3,"y",Codes2), name(Lemma2,Codes2).
   63morpha('JJS',Lemma1,Lemma2):- name(Lemma1,Codes1), append(Codes3,"iest", Codes1), !, append(Codes3,"y",Codes2), name(Lemma2,Codes2).
   64morpha('JJR',Lemma1,Lemma2):- name(Lemma1,Codes1), append(Codes3,"tter",Codes1),  !, append(Codes3,"t",Codes2), name(Lemma2,Codes2).
   65morpha('JJS',Lemma1,Lemma2):- name(Lemma1,Codes1), append(Codes3,"ttest",Codes1), !, append(Codes3,"t",Codes2), name(Lemma2,Codes2).
   66morpha('JJR',Lemma1,Lemma2):- name(Lemma1,Codes1), append(Codes3,"gger",Codes1),  !, append(Codes3,"g",Codes2), name(Lemma2,Codes2).
   67morpha('JJS',Lemma1,Lemma2):- name(Lemma1,Codes1), append(Codes3,"ggest",Codes1), !, append(Codes3,"g",Codes2), name(Lemma2,Codes2).
   68morpha('JJR',Lemma1,Lemma2):- name(Lemma1,Codes1), append(Codes3,"dder",Codes1),  !, append(Codes3,"d",Codes2), name(Lemma2,Codes2).
   69morpha('JJS',Lemma1,Lemma2):- name(Lemma1,Codes1), append(Codes3,"ddest",Codes1), !, append(Codes3,"d",Codes2), name(Lemma2,Codes2).
   70morpha('JJR',Lemma1,Lemma2):- name(Lemma1,Codes1), append(Codes3,"nner",Codes1),  !, append(Codes3,"n",Codes2), name(Lemma2,Codes2).
   71morpha('JJS',Lemma1,Lemma2):- name(Lemma1,Codes1), append(Codes3,"nnest",Codes1), !, append(Codes3,"n",Codes2), name(Lemma2,Codes2).
   72morpha('JJR',Lemma1,Lemma2):- name(Lemma1,Codes1), append(Codes2,"er",  Codes1),  !,                            name(Lemma2,Codes2).
   73morpha('JJS',Lemma1,Lemma2):- name(Lemma1,Codes1), append(Codes2,"est", Codes1),  !,                            name(Lemma2,Codes2).
   74
   75morpha('RB',only,only):- !.
   76morpha('RB',really,really):- !.
   77morpha('RB',hardly,hardly):- !.
   78morpha('RB',especially,especially):- !.
   79morpha('RB',accordingly,accordingly):- !.
   80morpha('RB',lovely,lovely):- !.
   81morpha('RB',Lemma1,Lemma2):- name(Lemma1,Codes1), append(Codes3,"ily",Codes1), !, append(Codes3,"y",Codes2), name(Lemma2,Codes2).
   82morpha('RB', Lemma1,Lemma2):- name(Lemma1,Codes1), append(Codes2,"ly",Codes1), !, name(Lemma2,Codes2).
   83
   84morpha(_,X,X)