Grammaires formelles et programmation logique
Motivation Après avoir étudié Prolog nous l avons appliqué à l interprétation de règles de sémantique sur des termes (Arbres de Syntaxe Abstraite) Nous allons ici nous intéresser à la façon de produire de tels arbres à partir d un ensemble de lexèmes extraits d un texte (de programme par exemple). L analyseur se déduira simplement et automatiquement des règles de production établies pour définir sa grammaire
Généralités Phrase en français séquence finie de mots considérés comme éléments insécables d'un ensemble fini toutes les séquences ne sont pas permises correctes (syntaxique) sensées (sémantique) Nous (individu) savons produire de nouvelles phrases mécanisme de génération! Nous savons également reconnaître de nouvelles phrases mécanisme de reconnaissance! Pour les langues naturelles, on n'a pas de formalisation complète de ces mécanismes. Les "grammaires à structure de phrase" de Chomsky [Cho 59] en sont une lointaine mais très utile approximation. Parmi ces grammaires, nous regarderons dabord les grammaires hors-contexte ou grammaires non-contextuelles
Règles ou productions Ensemble de règles (productions) qui précise les suites de mots qui constituent les phrases bien formées : L'ensemble des productions suivantes phrase --> [effacer], groupe-nom. groupe_nom --> [le],[dernier],[mot], [de],groupe_nom. groupe_nom --> [la], [deuxième], [ligne]. permet de produire effacer le dernier mot de la deuxième ligne verbe verbe article adjectif nom prep art adjectif mot ------groupe_nominal---------- ------------------------groupe_nominal------------------------------------------
Grammaire 1) phrase --> verbe, groupe_nom. 2) groupe_nom --> article, adjectif, nom. 3) groupe_nom --> article, adjectif, nom, préposition, groupe_nom. 4) verbe --> [imprimer]. 5) verbe --> [effacer]. 6) article --> [le]. 7) article --> [la]. 8) adjectif --> [deuxième]. 9) adjectif --> [premier]. 10) adjectif --> [dernier]. 11) nom --> [mot]. 12) nom --> [ligne]. 13) préposition--> [de]. effacer le dernier mot de la deuxième ligne
Extensibilité On peut ajouter des productions 14) article --> [un]. 15) article --> [du]. 16) adjectif --> [troisième]. 17) nom --> [caractère]. 18) nom --> [page]. exemples de nouvelles phrases produites effacer un premier caractère effacer le premier caractère du troisième mot
Monoïde libre un ensemble (alphabet ou vocabulaire) * l'ensemble des séquences finies d'éléments de plus la séquence vide * est appelée fermeture de Les éléments de * seront appelés phrases + fermeture positive ne contient pas la séquence vide * est muni de la structure algébrique < *, {concaténation, } U { monoïde libre engendré par Σ* la concaténation définie au sens habituel est associative λ est l'élément neutre de la concaténation Σ donne l'ensemble des constantes (générateurs)
Définition des grammaires Hors-contexte (non-contextuelles) Une GNC G est un quadruplet (V, T, P, S) où V est un ensemble fini de "symboles non terminaux" ou "catégories syntaxiques" T P est un ensemble fini (disjoint de V) de "symboles terminaux" ou "mots" un ensemble fini de "règles" ou "productions" de la forme A --> avec A V et (V T) + S un "symbole initial" V
Retour sur l exemple dans notre exemple V = {phrase, groupe_nom, verbe, article, adjectif, nom, préposition, phrase} T = {imprimer, effacer, le, la, un, premier, deuxième, troisième, dernier, caractère, not, ligne, page, de, du} S = phrase
Productions et Dérivations On définit deux relations ==> et =*=> sur (V T)* Si A --> est une production de P et et des phrases de (V T)* alors A ==> On dit que A --> β est appliquée à ααγ pour engendrer αβγ Deux phrases sont liées par la relation ==> quand la seconde est obtenue à partir de la première par l'application d'une production..., m des mots de (V T)* tels que 1 ==> 2, 2 ==> 3..., m-1 ==> m on écrira alors 1 =*=> m =*=> est la fermeture réflexive et transitive de ==>
Langage non-contextuel engendré par une GNC L = { T* et S =*=> } ex : effacer le deuxième mot imprimer la deuxième ligne effacer la deuxième ligne de la troisième ligne
Arbres d analyse (arbres de dérivation) phrase verbe groupe-nom art adj nom prep groupe-nom effacer le dernier mot de art adj nom Le sommet s'appelle "racine" il est marqué par le symbole initial de G Les feuilles sont marquées par les symboles terminaux les noeuds intermédiaires correspondent aux productions. la deuxième ligne
Arbre de dérivation L'arbre de dérivation représente donc la trace de la construction d'une expression bien formée si A est dans l'arbre Xp X 1 A --> X 1,..., Xp est une production utilisée dans la construction de la phrase Une phrase est dite «ambiguë» si on peut lui associer plusieurs arbres syntaxiques. (par extension, on dit dans ce cas que la grammaire est ambigüe)
Expression parenthèsée (Terme) Un arbre peut s'écrire sous forme d'une expression parenthèsée ex : ph( v(effacer), gn(art(le), adj(dernier), n(mot), prep(de), gn( art(la), adj(deuxième), n(ligne)))). avec ici ph pour phrase, gn pour groupe-nom,n pour nom,...
GNC et clauses de Horn gram- maire analogie s p, q, r s est bien formée si p, q et r sont bien formées clauses s :- p, q, r s est vrai si p, q, et r sont vrais attention comme dans Prolog mais à la des clauses de Horn : l'ordre des symboles du corps compte
Exemple Prolog Une phrase étant une suite de "mots", on va utiliser des listes de "mots" pour la représenter 1) phrase ([V GN]) :- verbe([v]), groupe_nom(gn). 2) groupe_nom([art, Adj, N]) :- article ([Art]), adjectif ([Adj]), nom([n]). 3) groupe_nom ([Art, Adj, N, Pr GN]):- article([art]), adjectif([adj]), nom([n]), preposition([pr]), groupe_nom(gn).
Déclaration des terminaux 4) verbe([imprimer]). 5) verbe([effacer]). 6) article([le]). 7) article([la]). 8) adjectif([deuxieme]). 9) adjectif([premier]). 10) adjectif([dernier]). 11) nom([mot]). 12) nom([ligne]). 13 preposition([de]).
Construction de l Arbre de Syntaxe Abstraite Objectif: utiliser cette notation pour spécifier puis générer les termes dont nous avons besoin ensuite pour l interprétation prolog des règles de sémantique structurelle vues dans le cours précédent.
DCG et Construction de l'arbre syntaxique On réécrit la grammaire DCG avec un argument phrase(ph(v,gn)) --> verbe(v), groupe_nom(gn). groupe_nom(gn(art, Adj,N))--> article(art),adjectif(adj)),nom(n). groupe_nom(gn(art, Adj, N, Pr, gn(gn)))--> article(art),adjectif(adj),nom(n), preposition(p), groupe_nom(gn). verbe(v(effacer)) --> [effacer]. verbe(v(imprimer)) --> [imprimer]. article(art(le)) --> [le]. adjectif(adj(dernier)) --> [dernier].... nom(n(mot)) --> [mot]. preposition(prep(de)) --> [de].
exemple la phrase [effacer, le, dernier, mot] peut se construire par les productions phrase(ph(v(effacer), Gn)) --> verbe(v), groupe_nom(gn) puis en phrase(ph(v(effacer), gn(art, Adj, N)) --> verbe(v(effacer)), article(art), adjectif(adj), nom(n). et phrase(ph(v(effacer), gn(art(le),adj(dernier),n(mot))) --> verbe(v(effacer)), article(art(le)), adjectif(adj(dernier)), nom(n(mot)). ainsi jusqu'à produire l'arbre syntaxique (le terme) ph(v(effacer), gn(art(le), adj(dernier), n(mot))))
Limites des GNC ne permettent pas de tenir compte du contexte 1) effacer la dernier ligne 2) effacer la deuxième ligne de la deuxième ligne syntaxiquement incorrecte (1), sémantiquement absurde (2) et/ou la solution de certains de ces problèmes dans le cadre GNC demanderait de nombreuses autres productions.
Grammaires DCG Definite Clause Grammars afin de régler le problème de l'accord des genres (féminin ou masculin) (contexte syntaxique) on propose de remplacer par exemple par groupe_nom --> article, adjectif, nom, preposition, groupe_nom. groupe_nom --> article(c), adjectif(c), nom(c), preposition, groupe_nom. dans laquelle un "argument contextuel" C a été introduit
Exemple DCG : suite Ici cet argument pourra prendre les valeurs "masculin" ou "féminin" Les autres règles s'écrivant verbe --> [imprimer] verbe --> [effacer] article(masculin) --> [le] article(féminin) --> [la] adjectif(masculin) --> [dernier] nom(féminin) --> [ligne] effacer la dernière ligne ne peut être produite!
Représentation en Clauses de Horn groupe_nom ([Art, Adj, N]) :- article(c, [Art]), adjectif(c, [Adj]), nom(c, [Nom]).... article(masculin, [le]). article(feminin, [la]).... production des grammaires DCG clauses de Horn avec prédicats d'arité quelconque
Contextes sémantiques et DCG On veut éliminer les phrases du genre effacer la dernière ligne de la dernière ligne Le corps des règles pourra contenir des prédicats ou procédures(entre accolades) représentant des conditions d'emploi des productions ex : 1" phrase --> verbe, groupe_nom(o). 2" groupe_nom(y 1 ) --> article(c), adjectif(c), nom(c, Z 1 ), {Y 1 < Z 1 }. 3" groupe_nom(y 2 ) --> article(c), adjectif(c) nom(c, Z 2 ), {Y 2 < Z 2 }, preposition, groupe_nom(z 2 ).... 12" nom(masc, 1) --> [caractère] 13" nom(masc, 2) --> [mot] 14" nom(fem, 3) --> [ligne] 15" nom(fem, 4) --> [page]
Trace de dérivation 12",..., 15" introduisent une hiérarchie sémantique caractère not ligne page (l'idée vient de ce que la préposition...de... implique l'inclusion) {Y 1 < Z 1 } dans 2" et 3" élimine les phrases absurdes ex : on suppose que l'on en est à groupe_nom(y 2 )--> [la, dernière], nom(fem, Z 2 ), {Y 2 < Z 2 }, [de], groupe_nom(z 2 ). avec nom(fem, 3) --> [ligne] on passe à groupe_nom(y 2 ) --> [la, dernière, ligne], {Y 2 < 3}, [de], groupe_nom(3) puis avec la règle 2" correctement instanciée groupe_nom(y 2 ) --> [la, dernière, ligne], {Y 2 < 3}, [de, la, dernière], nom(fem, Z 1 ), {3 < Z 1 } seule nom(fem, 4) --> [page] permet de satisfaire 3 < Z 1 groupe_nom(y 2 ) --> [la, dernière, ligne], {Y 2 < 3}, [de, la, dernière, page].
Grammaire DCG et programmation logique groupe_nom(y 2 ) --> article(c), adjectif(c), nom(c, Z 2 ), {Y 2 < Z 2 }, preposition, groupe_nom(z 2 ) est traduit en groupe_nom(y 2, [art, Adj, N, Pr GN]) :- article(c, [Art]), adjectif(c, [Ad]), nom(c, Z 2, [N]), Y 2 < Z 2, preposition(pr), groupe_nom(z 2, GN). dans laquelle les catégories syntaxiques (comme nom(c, Z 2, [N])) ou les procédures {Y 2 < Z 2 } sont interprétées comme des prédicats logiques.
Construction de l'arbre de syntaxe abstraite On réécrit la grammaire DCG avec les arguments phrase(ph(v, Gn)) --> verbe(v), groupe-nom(o,gn) groupe_nom(y 1, gn(art, Adj,N))--> article (C, Art), adjectif (C, Adj)), nom(c, Z 1, N), {Y 1 <Z 1 }. groupe_nom(y 2, gn (Art, Adj, N, Pr, gn, (Gn)))--> article(c, Art), adjectif(c, Adj), nom(c, Z 2, N), {Y 2 <Z 2 } preposition(p), groupe_nom(z 2, Gn). verbe (v(effacer)) --> [effacer]. verbe (v(imprimer)) --> [imprimer]. article(masc, art(le)) --> [le].... nom(fem, 4, n(page)) --> [page]. preposition(prep(de)) --> [de].
Eléments de transformations automatique en Prolog En partant de phrase --> verbe, groupe nom nous avions écrit phrase([v GN]) :- verbe([v]), groupe_nom(gn). Cela suppose la reconnaissance du fait que 'verbe' consomme un mot de la phrase.
Représentation en D_liste Un traitement automatique pourrait plus simplement produire Phrase(Ph) :- conc(début, Reste, Ph), verbe(début), groupe_nom(reste). Ou plus efficacement Phrase(Ph, Fin) :- verbe(ph, Suite), groupe_nom(suite, Fin) avec par exemple et et le but verbe --> [effacer] transformé en verbe([effacer S], S).?- phrase([effacer, le, dernier, mot], [ ]).