Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Cours 8 Analyse syntaxique - descendante - ascendante - par programmation dynamique.

Lignende præsentationer


Præsentationer af emnet: "Cours 8 Analyse syntaxique - descendante - ascendante - par programmation dynamique."— Præsentationens transcript:

1 Cours 8 Analyse syntaxique - descendante - ascendante - par programmation dynamique

2 Analyse syntaxique Parsing Entrées : une phrase étiquetée et une grammaire algébrique Sorties : le ou les arbres de dérivation de la phrase Algorithmes Descendants Ascendants Programmation dynamique Cascade de transducteurs

3 Exemple de grammaire algébrique P --> GN P --> GN GN GN --> Det N GN --> Npr Det --> Det --> tous les Det --> toutes les N --> Npr --> Luc Npr --> Anne

4 Analyse syntaxique descendante P GN P P GN DetN P GN DetN Les orchestres aiment cette mélodie

5 Analyse descendante P GN DetN P GN DetN P GN DetN P GN DetN exploration arborescente : on essaye autre chose

6 Analyse descendante P GN P GN GN P GN P Npr etc.

7 Arbre produit P GN GN DetN N

8 Analyse descendante phrase.desc(arbre, feuilleCourante, tokenCourant) : pour chaque feuille1 à partir de feuilleCourante symbole = feuille1.étiquette si symbole est terminal si symbole est compatible avec token token = phrase.suivant(token) sinon détruire arbre ; sortir de la fonction sinon si symbole est une variable pour chaque règle dont le membre gauche est symbole copieArbre = arbre.copier() feuille2 = équivalent de feuille1 dans copieArbre copieArbre.ajouter(règle, feuille2) feuille3 = copieArbre.premierFils(feuille2) phrase.desc(copieArbre, feuille3, token) sortir de la fonction arbre.écrire()

9 Exemple (1/8) L'orchestre aime cette mélodie desc(P, P, L') desc(P(GN disparaître), GN, L') desc(P(GN(Det N) disparaître), Det, L') desc(P(GN(Det(le) N) disparaître), le, L') desc(P(GN(Det(le) N(mélodie)) disparaître), mélodie, orchestre) desc(P(GN(Det(le) N(corruption)) disparaître), corruption, orchestre) desc(P(GN(Det(le) N(orchestre)) disparaître), orchestre, orchestre) desc(P(GN(Det(le) N(orchestre)) disparaître), disparaître, aime) desc(P(GN(Det(le) N(empire)) disparaître), empire, orchestre)

10 Exemple (2/8) desc(P(GN(Det(ce) N) disparaître), ce, L') desc(P(GN(Det(un) N) disparaître), un, L')... desc(P(GN(Npr) disparaître), Npr, L')

11 Exemple (3/8) desc(P(GN empirer), GN, L') desc(P(GN(Det N) empirer), Det, L') desc(P(GN(Det(le) N) empirer), le, L') desc(P(GN(Det(le) N(mélodie)) empirer), mélodie, orchestre) desc(P(GN(Det(le) N(corruption)) empirer), corruption, orchestre) desc(P(GN(Det(le) N(orchestre)) empirer), orchestre, orchestre) desc(P(GN(Det(le) N(orchestre)) empirer), empirer, aime) desc(P(GN(Det(le) N(empire)) empirer), empire, orchestre)

12 Exemple (4/8) desc(P(GN(Det(ce) N) empirer), ce, L') desc(P(GN(Det(un) N) empirer), un, L')... desc(P(GN(Npr) empirer), Npr, L')

13 Exemple (5/8) desc(P(GN ochestrer GN), GN, L') desc(P(GN(Det N) orchestrer GN), Det, L') desc(P(GN(Det(le) N) orchestrer GN), le, L') desc(P(GN(Det(le) N(mélodie)) orchestrer GN), mélodie, orchestre)... desc(P(GN(Det(ce) N) orchestrer GN), ce, L') desc(P(GN(Det(un) N) orchestrer GN), un, L')... desc(P(GN(Npr) orchestrer GN), Npr, L')

14 Exemple (6/8) desc(P(GN aimer GN), GN, L') desc(P(GN(Det N) aimer GN), Det, L') desc(P(GN(Det(le) N) aimer GN), le, L') desc(P(GN(Det(le) N(mélodie)) aimer GN), mélodie, orchestre) desc(P(GN(Det(le) N(corruption)) aimer GN), corruption, orchestre) desc(P(GN(Det(le) N(orchestre)) aimer GN), orchestre, orchestre) desc(P(GN(Det(le) N(orchestre)) aimer GN), aimer, aime) desc(P(GN(Det(le) N(orchestre)) aimer GN(Det N)), Det, cette)

15 Exemple (7/8) desc(P(GN(Det(le) N(orchestre)) aimer GN(Det N)), Det, cette) desc(P(GN(Det(le) N(orchestre)) aimer GN(Det(le) N)), le, cette) desc(P(GN(Det(le) N(orchestre)) aimer GN(Det(ce) N)), ce, cette) desc(P(GN(Det(le) N(orchestre)) aimer GN(Det(ce) N(mélodie))), mélodie, mélodie) desc(P(GN(Det(le) N(orchestre)) aimer GN(Det(ce) N(corruption))), corruption, mélodie)...

16 Exemple (8/8) desc(P(GN(Det(un) N(orchestre)) aimer GN(Det(un) N)), un, cette)... desc(P(GN(Det(le) N(orchestre)) aimer GN(Npr)), Det, cette) desc(P(GN(Det(le) N(empire)) aimer GN), empire, orchestre) desc(P(GN(Det(ce) N) aimer GN), ce, L') desc(P(GN(Det(un) N) aimer GN), un, L')... desc(P(GN(Npr) aimer GN), Npr, L')

17 Inconvénients On utilise peu le texte Avec Les orchestres aiment cette mélodie, les 10 premiers arbres contiennent disparaître, qui ne figure pas dans la phrase On construit plusieurs fois les mêmes sous-arbres Le sous-arbre pour Les orchestres est construit 4 fois et détruit 3 fois Boucle en cas de récursivité gauche Une règle comme GN --> GN Adj met l'algorithme dans une boucle infinie

18 Analyse syntaxique ascendante Les orchestres aiment cette mélodie Det N

19 Analyse ascendante (itération 1) N Det Det Det N

20 Analyse ascendante (itération 2) DetN Det NDet DetN

21 Analyse ascendante (itération 2) DetN NN Det Det N

22 Analyse ascendante (itération 2) DetN

23 Analyse ascendante (itération 3) DetN DetN GN

24 Analyse ascendante (itération 3) NDetN DetNN DetN

25 Analyse ascendante (itération 3) Det N DetN GN

26 Analyse ascendante (itération 4) DetN DetN GN Det

27 Analyse ascendante (itération 4) DetN DetN GN N N

28 Analyse ascendante (itération 4) DetN N DetN GN Det

29 Analyse ascendante (itération 5) DetN N Det N GN N

30 Analyse ascendante (itération 6) DetN N GN

31 Analyse ascendante (itération 7) DetN N GN P

32 Algorithme (1/2) ensSeqArbres = un ensemble de séquences d'arbres vide pour chaque combinaison de terminaux compatible avec phrase ensSeqArbres.ajouterSeqArbres(combinaison) tant que ensSeqArbres n'est pas vide nouvEnsSeqArbres = un ensemble de séquences d'arbres vide pour chaque seqArbres dans ensSeqArbres seqRacines = seqArbres.seqRacines() pour chaque facteur de seqRacines pour chaque règle dont le membre droit corresp. à facteur copieSeqArbres = seqArbres.copier() copieSeqArbres.ajouter(facteur, règle) nouvEnsSeqArbres.ajouter(copieSeqArbres)

33 Algorithme (2/2) pour chaque seqArbres dans nouvEnsSeqArbres si seqArbres est un arbre et si sa racine est l'axiome seqArbres.écrire() nouvEnsSeqArbres.supprimer(seqArbres) ensSeqArbres = nouvEnsSeqArbres

34 Inconvénients On utilise peu la grammaire Avec Les orchestres aiment cette mélodie, toutes les séquences qui contiennent suivi de sont incompatibles avec la grammaire

35 L'algorithme d'Earley (1970) Analyse descendante Sauvegarde dans un tableau tous les résultats intermédiaires réutilisables (programmation dynamique) Tableau indicé par les tokens de la phrase Phrase :Lesorchestresaimentcettemélodie Indices : 0 1 2 3 4 5 Pour chaque indice, le tableau contient un ensemble de sous-arbres correspondant à des analyses partielles On remplit le tableau de gauche à droite, sans retours en arrière On ne détruit jamais des sous-arbres déjà créés Pour construire les arbres de dérivation, on combine les sous-arbres du tableau

36 Les sous-arbres Un sous-arbre est représenté par - une règle pointée (le point indique jusqu'où on a analysé) - deux positions dans la phrase, correspondant : - au début de la règle - et au point jusqu'où on a analysé Exemple 1 P --> GN. GN 0-3 Det N N GN P 01 234 5

37 Les sous-arbres Exemple 2 GN --> Det N. 0-2 Exemple 3 GN -->. Det N 3-3 Si la 2 e position d'un sous-arbre est j, ce sous-arbre est rangé à l'indice j dans le tableau Exemple 2 : rangé à l'indice 2Exemple 3 : rangé à l'indice 3 Det N N GN P 01 234 5

38 L'algorithme On parcourt le tableau de gauche à droite Quand on est à l'indice i, on parcourt les sous-arbres et on crée de nouveaux sous-arbres à l'indice i (queue FIFO) et à l'indice i + 1 On suppose que l'axiome de la grammaire apparaît une seule fois, dans une règle P0 --> P DébutP0 -->. P 0-0 FinP0 --> P. 0-n(n = nombre de tokens dans la phrase) Règle pointée complétée : règle dont le point est à la fin

39 L'algorithme analyseur.table[0].enfiler(P0 -->. P, 0, 0) pour i de 0 à n pour chaque sousArbre dans table[i] si sousArbre.complétée() analyseur.compléter(sousArbre) sinon si sousArbre.prochainSymbole() est terminal analyseur.vérifier(sousArbre) sinon analyseur.prédire(sousArbre) si analyseur.table[n].contient(P0 --> P., 0, n) analyseur.construireArbres(n)

40 L'algorithme compléter(B --> w., j, k) : pour chaque (A --> u. B v, i, j) dans table[j] table[k].enfiler(A --> u B. v, i, k) vérifier(A --> u. t v, i, j) : si t correspond à token[j] table[j + 1].enfiler(A --> u t. v, i, j + 1) prédire(A --> u. B v, i, j) : pour chaque (B --> w) dans règles(B) table[j].enfiler(B -->. w, j, j)


Download ppt "Cours 8 Analyse syntaxique - descendante - ascendante - par programmation dynamique."

Lignende præsentationer


Annoncer fra Google