Traitement du langage naturel : travaux pratiques Octobre 2003 Rappel : on peut définir en Prolog des grammaires formels avec l’opérateur --> de la façon suivante : s --> np, vp. np --> [john]. vp --> [dort]. La reconnaissance de la phrase se fait ensuite en demandant : s([john,dort],[]). On peut aussi vérifier toutes les phrases générées en demandant s(X,[])., ou certaines structures avec np(X,[]). On peut aussi passer des paramètres aux catégories (on appelle ce genre de grammaire des Definite Clause Grammar (DCG)) : s --> np(_), vp. np(X) --> det(X), n(X). vp --> v. vp --> v, np(_). det(masc) --> [le]. det(fem) --> [la]. n(masc) --> [chien]. n(masc) --> [chat]. v --> [dort]. v --> [mange]. :- np(_,[le,chien],[]). Pour éviter d’avoir à remplacer dans chaque règle simple les mots du lexique, on peut utiliser la fonctionnalité suivante d’une DCG en prolog : on peut insérer des prédicats exécutés avant ou après la reconnaissance de la partie droite de la règle (entre {}) : % verbes intransitifs vi --> { lexique(Word,vi) }, [Word]. ... % lexique lexique(dort,vi). lexique(tombe,vi). lexique(grogne,vi). On peut perfectionner le prédicat "lexique" pour incorporer plus de paramètres (autres paramètres syntaxiques, paramètres sémantiques). 1 Question 1 Construire une grammaire de reconnaissance syntaxique du français qui accepte (au moins) les phrases suivantes : – Jerry a une voiture bleue. – Un petit chien aboie. – Elaine et Jerry détestent cordialement les chiens. et refuse les phrases incorrectes suivantes : – Un chien aboie Elaine. – Elaine et Jerry déteste les chiens. – Elaine et Jerry déteste un chiens. Attention, la stratégie de reconnaissance de Prolog est top-down, en profondeur d’abord. Vous êtes prévenu ... Question 2 Transformer le programme pour en faire un analyseur, qui donne en sortie la structure de la phrase sous forme la suivante (ou à peu près ... ) : Jerry a une voiture bleue ⇒ [s,[np,[pn,Jerry]],[vp,[v,a],[np,[det,une],[n,voiture],[adj,bleue]]]] Question 3, pour les courageux En utilisant la librairie Gulp pour les structures de traits, proposer une représentation sémantique qui permet d’extraire le prédicat du verbe principal d’une phrase et le prédicat du sujet, au moins avec des noms propres et des verbes intransitifs. La librairie s’appelle en tapant [gulp3]., et définir des structures de traits on peut alors comme gen:masc..nb:sing pour désigner gen masc nb sing On peut alors écrire des règles de grammaire contraignant l’unification des traits. Par exemple l’accord en genre et en nombre du groupe nominal sujet avec le groupe verbal dans une phrase se déclarerait comme suit (en supposant que la seule structure est l’accord) : s(gen:G..nb:N) --> { NP VP NP VP = = = = nb:N, nb:N, gen:G, gen:G}, np(NP), vp(VP). Pour les très courageux Modifier la grammaire pour prendre en compte les auxilliaires : être, avoir pour accepter des phrases comme : – Jerry a acheté une voiture. – Kramer est vraiment arrivé. 2