%%% %%% Morphologie %%% fichier "morpho.pro" %%% :- consult('entree.pro'), consult('listes.pro'), consult('dico.pro'). :- discontiguous lemmatise/2, decline/2, infinitif/2, terminaison/4. %% Première méthode de lemmatisation % et de déclinaison simple dans le cas ou % il y a peu de variations dans les formes lemmatise(nm(Lexeme,Genre,singulier),Lexeme):- dico_n(Lexeme,Genre,_). lemmatise(nm(Lexeme,Genre,pluriel),Forme):- dico_n(Lexeme,Genre,Forme). % la déclinaison est comme la lemmatisation !!! decline(nm(X,Y,Z),W) :- lemmatise(nm(X,Y,Z),W). %% encore plus simple... lemmatise(det(Genre,Nombre),Lexeme):- dico_det(Lexeme,Genre,Nombre). decline(det(X,Y),Z):- lemmatise(det(X,Y),Z). %% Méthode où il y a quelques variations dans les formes lemmatise(adj(Lexeme,Groupe,Genre,Nombre),Forme):- nom(Forme,Forme_L), renverse(Forme_L,Forme_L_R), term_adj(Lexeme_L_R,Groupe,Genre,Nombre,Forme_L_R), renverse(Lexeme_L_R,Lexeme_L), nom(Lexeme,Lexeme_L), dico_adj(Lexeme,Groupe). decline(adj(Lexeme,Groupe,Genre,Nombre),Forme):- nom(Lexeme,Lexeme_L), renverse(Lexeme_L,Lexeme_L_R), term_adj(Lexeme_L_R,Groupe,Genre,Nombre,Forme_L_R), renverse(Forme_L_R,Forme_L), nom(Forme,Forme_L). term_adj(Adj_L_R,Groupe,masculin,singulier,Forme_L_R):- finales_adj(Adj_L_R,Groupe,Forme_L_R,_,_,_). term_adj(Adj_L_R,Groupe,masculin,pluriel,Forme_L_R):- finales_adj(Adj_L_R,Groupe,_,Forme_L_R,_,_). term_adj(Adj_L_R,Groupe,feminin,singulier,Forme_L_R):- finales_adj(Adj_L_R,Groupe,_,_,Forme_L_R,_). term_adj(Adj_L_R,Groupe,feminin,pluriel,Forme_L_R):- finales_adj(Adj_L_R,Groupe,_,_,_,Forme_L_R). finales_adj([x|Rad],1,[x|Rad],[x|Rad],[e,s|Rad],[s,e,s|Rad]). finales_adj(F ,2,F ,F ,[e|F] ,[s,e|F] ). finales_adj(F ,3,F ,[s|F] ,F ,[s|F] ). %% Autre méthode où on utilise explicitement des règles decline(vrb(Infinitif,Groupe,Pers,Nombre),Forme):- nom(Infinitif,L_Infinitif), % décompose infinitif(Finale_inf,Groupe), % trouve le groupe, concat(Radical,Finale_inf,L_Infinitif), % le radical terminaison(Finale,Groupe,Pers,Nombre), % et la finale concat(Radical,Finale,L_Forme), % ajoute la finale nom(Forme,L_Forme). % recompose lemmatise(vrb(Infinitif,Groupe,Pers,Nombre),Forme):- nom(Forme,L_Forme), % décompose terminaison(Finale,Groupe,Pers,Nombre), concat(Radical,Finale,L_Forme), % enlève la finale infinitif(Finale_inf,Groupe), concat(Radical,Finale_inf,L_Infinitif), % ajoute la % terminaison nom(Infinitif,L_Infinitif), % recompose le % verbe dico_v(Infinitif,_,Groupe,_). % vérifie au % dictionnaire % les terminaisons des verbes sous la forme % terminaison(liste des finales, % groupe, personne, nombre). % % premier groupe infinitif([e,r],1). terminaison([e],1,1,singulier). terminaison([e,s],1,2,singulier). terminaison([e],1,3,singulier). terminaison([o,n,s],1,1,pluriel). terminaison([e,z],1,2,pluriel). terminaison([e,n,t],1,3,pluriel). % deuxième groupe infinitif([i,r],2). terminaison([i,s],2,1,singulier). terminaison([i,s],2,2,singulier). terminaison([i,t],2,3,singulier). terminaison([i,s,s,o,n,s],2,1,pluriel). terminaison([i,s,s,e,z],2,2,pluriel). terminaison([i,s,s,e,n,t],2,3,pluriel).