Avant de commencer, tapez :
source /export/home/users/Enseignants/rozenknop/Cours/Syntaxe/TP1/environnement.sh
Le but de ce TP est de vous faire développer une grammaire valable pour des exemples de phrases.
Comme une telle tâche peut prendre beaucoup de temps (peut-être parfois une vie entière), essayez de vous arrêter après un laps de temps raisonnable !
La première étape est de savoir comment écrire et utiliser une grammaire hosrs-contexte. Commençons avec la grammaire suivante :
P -> SN SV SN -> Det N SV -> V SN Det -> le N -> chat N -> chien V -> chasseoù l'ensemble des symboles non-terminaux est {P, SN, SV, Det, N, V} (S étant le symbole de plus haut niveau (axiome)), et l'ensemble des symboles terminaux est {mange, chat, chien, le}. Det, N et V sont les "catégories morphosyntaxiques", ou "préterminaux".
le chat chasse le chien le chien chasse le chat le chat chasse le chat le chien chasse le chat
En pratique, en TAL, le lexique (qui contient les informations sur les mots et leurs catégories morphosyntaxiques) est souvent séparé du coeur de la grammaire. Dans notre cas, les informations
Det -> le N -> chat N -> chien V -> chasseseront placées dans un lexique (contenant 4 entrées); et l'information grammaticale
P -> SN SV SN -> Det N SV -> V SNsera placée dans un fichier que nous appelons maintenant "la grammaire".
Pour pouvoir effectivement faire de l'analyse syntaxique automatique avec cet exemple de grammaire hors-contexte, il faut créer un fichier contenant le lexique, comme par exemple celui-ci (examplelexicon.txt), et un autre fhichier contenant la grammaire, comme celui-là (examplegrammar.txt).
Copiez (i.e. sauver: Shift+ButtonGauche avec
Netscape) ces fichiers sur votre compte.
Maintenant, pour utiliser l'analyseur syntaxique anagram, vous devez créer une version "compilée" du lexique, avec la commande :
traduit_lex.py examplelexiconCette commande produit tous les fichiers dont anagram a besoin pour fonctionner.
listlexique examplelexicon.slplexVous remarquez que les catégories morphosyntaxiques sont représentées par des numéros, et non plus par leurs symboles d'origine. Cela est dû au fait qu'anagram a besoin de cette représentation pour fonctionner correctement. La table des correspondances entre les catégories morphosyntaxiques et leurs index a été enregistrée dans le fichier examplelexicon.tagset lors de la compilation du lexique. Pour afficher le lexique de façon plus lisible, essayez :
listlexique -map examplelexicon.tagset examplelexicon.slplexPour rendre la grammaire compatible avec anagram, les catégories morphosyntaxiques doivent également être transformées dans le fichier grammaire :
wraptag.py -r examplelexicon.tagset < examplegrammar.txt > examplegrammar.num
Maintenant, vous pouvez enfin tester la grammaire :
anagram -P -i p -notcg examplelexicon.slplex examplegrammar.numet tapez la phrase (le chien chasse le chat).
Vous devriez obtenir le résultat sous forme parenthésée :
[ P [ SN [ :3 le ] [ :2 chien ] ] [ SV [ :1 chasse ] [ SN [ :3 le ] [ :2 chat ] ] ] ]
Vous pouvez ensuite entrer une autre phrase, ou quitter le programme en tapant ^D (Ctrl + D).
Pour vérifier que vous maîtrisez l'outil d'analyse, transformez la grammaire précédente en ajoutant une règle comme :
SN -> Det Adj Net ajoutez les adjectifs petit et gros dans le lexique, ainsi qu'un déterminant un.
Enfin, voyons ce qui se passe dans un cas ambigu.
On considère cette grammaire-là avec
ce lexique-ci, à appliquer à la phrase :
time flies like an arrow
Essayez d'obtenir toutes les analyses possibles pour cette phrase !
Pour vous aider à lire les arbres d'analyse, vous pouvez utiliser la commande voir_arbre, qui prend un corpus d'arbres sous forme parenthésée en entrée. Techniquement, récupérez le fichier time-sentence.txt (qui contient simplement la phrase à analyser) et faites :
anagram -P -s -i p -notcg time-lex.slplex time-gram.num < time-sentence.txt |\ wraptag.py time-lex.tagset | cut -d'(' -f1 > time-parsing.txt(l'option -s signifie "mode silencieux"), puis tapez :
voir_arbres time-parsing.txtCliquez sur les boutons gauche ou droite de la souris pour faire défiler les différents arbres.
Lorsque l'on dispose d'une grammaire probabiliste hors-contexte (SCFG) il est également possible de ne faire afficher que l'arbre de plus grande probabilité, en utilisant l'option -best d'anagram au lieu de l'option -i:
anagram -P -best p -notcg time-lex.slplex time-gram.num
les petites brises la glace la petite brise les glacent les beaux chats mange le chienLes phrases suivantes ne doivent pas être reconnues par la grammaire :
les belle chatte chasse le chien les beaux chiennes la glace le belle chat chasse le chien
les belles chassent les chats nous brisons la glace elle les glace les petites brises les glacent une petite brise les glacesLes phrases suivantes ne doivent pas être reconnues par la grammaire :
les belles chasse le chat ils la glace vous chassons le chat
je suis le chat il est beau les glaces sont belles vous êtes belles le chien est une chienneLes phrases suivantes ne doivent pas être reconnues par la grammaire :
le chien est belle les chiens sont un chienRemarquez que l'on veut imposer l'accord en genre et en nombre pour un attribut adjectival, mais que, pour un attribut nominal, on ne veut imposer que l'accord en nombre.