anaSynAut (PDF, 329 Ko)

publicité
Université Paris Ouest - Nanterre - la Défense
Université Paris III - Sorbonne Nouvelle
INALCO
2010 - 2011
Analyse syntaxique automatique
Marcel Cori
1 Les problèmes de l’analyse syntaxique
1.1
1.1.1
Introduction
L’analyse syntaxique en linguistique
L’activité du linguiste consiste, dit grossièrement, à donner une description des langues et
du langage. Il en résulte la construction de modèles théoriques et de grammaires écrites dans ces
modèles. L’analyse syntaxique (automatique) constitue un dispositif expérimental permettant
de tester effectivement ces gramaires d’une manière objective.
La perspective de l’analyse syntaxique nécessite l’écriture de modèles parfaitement rigoureux
et précisément détaillés.
1.1.2
L’analyse syntaxique en traitement automatique des langues (TAL)
On peut définir, de manière très simplifiée, le TAL comme étant constitué des programmes
qui prennent pour données des productions langagières, quand ces programmes tiennent compte
des spécificités des langues humaines.
L’analyse syntaxique occupe une place centrale dans les programmes de TAL qui s’appuient
sur la linguistique : si on décompose les traitements en des successions de sous-traitements,
l’analyse syntaxique constitue un passage presque obligé, avec en amont des prétraitements qui
permettent d’obtenir des découpages en unités de l’ordre du mot, et en aval des tâches spécifiques
aux applications envisagées.
Historiquement, après l’échec reconnu de la traduction automatique, les algorithmes d’analyse syntaxique sont devenus, pendant les années 1960, l’axe des recherches en traitement automatique. Ce qui a conduit, jusqu’au années 1980, au développement de formalismes syntaxiques.
Actuellement, une importance moindre est donnée à l’analyse syntaxique, en raison notamment
des difficultés qui ont été mises en évidence.
1.1.3
Analyse syntaxique et psycholinguistique
Les systèmes d’analyse syntaxique peuvent avoir pour ambition de simuler le comportement
humain, mais ce n’est pas une obligation.
Quoi qu’il en soit, ils permettent une réflexion par la comparaison qui peut être effectuée
entre les stratégies d’analyse employées par les machines et celles des êtres humains.
1.2
Le schéma théorique de l’analyse syntaxique
La donnée d’entrée doit être une phrase ou un énoncé ayant subi des prétraitements et la
sortie une (ou plusieurs) représentation(s) syntaxique(s) de cet énoncé.
2
1.2.1
Sous quelle forme est l’énoncé à analyser ?
Selon les prétraitements qui précèdent (segmentation, analyse morphologique, étiquetage,
désambiguı̈sation), la donnée d’entrée de l’analyseur syntaxique peut être sous plusieurs formes :
(1) une suite de catégories syntaxiques, dont la structure est éventuellement complexe (catégories accompagnées de traits, structures de traits, catégories au sens des grammaires catégorielles,. . . ) ;
(2) une suite d’ensembles de catégories syntaxiques ;
(3) une suite de formes lexicales ;
(4) un ensemble de découpages différents, par exemple pour un énoncé tel que :
Aujourd’hui l’arrière grand-père sortira-t-il les pommes de terre?
1.2.2
L’information grammaticale
L’information grammaticale nécessaire à l’analyse est contenue dans la grammaire et le
lexique, avec une répartition différente selon le degré de lexicalisation du modèle dans lequel
on se place.
La grammaire, s’il en existe une, est une donnée d’entrée de l’analyseur syntaxique. Le
lexique peut rester une donnée d’entrée, mais il peut aussi n’être pris en compte que dans les
prétraitements.
À noter que dans les premiers travaux d’analyse syntaxique la gramaire était partie intégrante
du programme. À l’heure actuelle, les données grammaticales, dissociées des programmes, sont
fournies par un utilisateur privilégié des programmes : l’(( expert )), qui connaı̂t les langues et/ou
les formalismes linguistiques.
1.2.3
Sous quelle forme est le résultat de l’analyse ?
Le résultat de l’analyse syntaxique consiste en une (ou éventuellement plusieurs) structures syntaxiques, représentatives de la phrase d’entrée. Les structures obtenues dépendent
évidemment du formalisme considéré. Par exemple : un arbre syntagmatique, un arbre de dépendance, une structure de traits.
Par ailleurs, un (( sous-produit )) de l’analyse peut être la désambiguı̈sation de certaines
catégories syntaxiques.
1.3
1.3.1
Les méthodes
Analyses descendantes ou ascendantes
Deux types de méthodes, qui correspondent à deux (( philosophies )) de l’analyse, sont possibles.
(1) Une analyse descendante, qui consiste à postuler la forme que peuvent prendre les phrases,
et à vérifier si l’énoncé à analyser entre dans l’une des formes de phrases possibles.
(2) Une analyse ascendante, qui consiste à partir des unités qui constituent l’énoncé, et à
vérifier si des regroupements de ces unités sont possibles. En effectuant des regroupements de
plus en plus grands, on tente d’obtenir des phrases.
3
1.3.2
La prise en compte des différentes possibilités
Les langues naturelles étant ambiguës, pour une même phrase plusieurs analyses sont possibles. Par exemple :
Il regarde le singe avec un téléscope
Mais, au cours du processus d’analyse, il peut apparaı̂tre différentes solutions (partielles)
dont certaines ne sont pas correctes. Par exemple, si on analyse les deux phrases qui suivent au
fur et à mesure de leur lecture :
Paul a vu sa sœur et sa tante qui l’accompagnait
Paul a vu sa sœur et sa tante n’était pas contente
La gestion de cette multiplicité de solutions partielles peut s’effectuer selon plusieurs types
de méthodes :
(1) Les méthodes avec retour en arrière : on fait des hypothèses, et si ces hypothèses s’avèrent
erronées à un moment donné, on les abandonne et on en essaye d’autres.
(2) Les méthodes en parallèle : on essaye les différentes hypothèses simultanément.
(3) Les méthodes déterministes : on emploie une stratégie qui permet de faire le bon choix
au fur et à mesure de l’analyse. Il est clair que ce type de méthodes ne permet pas de résoudre
le cas des phrases réellement ambiguës.
1.4
Les problèmes
Les problèmes se présentent quand on veut analyser du vrai texte. Il y a deux problèmes
essentiels et en fait contradictoires : si on veut s’attaquer à l’un, on aggrave l’autre.
1.4.1
La couverture des grammaires
De nombreux énoncés, pourtant parfaitement compris par des êtres humains, sont rejetés
par les analyseurs parce qu’aucune représentation n’en est possible selon les grammaires prises
en compte.
Il se peut que ce soient des énoncés (( incorrects )) (mais qu’est-ce qu’un énoncé incorrect?),
ou tout simplement que la couverture de la grammaire soit insuffisante : un type de construction
n’a pas été prévu.
La difficulté est qu’en accroissant la couverture des grammaires, on accroı̂t aussi le nombre
des ambiguı̈tés.
1.4.2
Les ambiguı̈tés
L’utilisation d’analyseurs qui s’appuient sur des grammaires censées rendre compte d’un
fragment notable d’une langue conduit à la prodction d’analyses ambiguës en une quantité telle
que l’intérêt de ces analyseurs est rendu douteux.
On peut distinguer plusieurs sortes d’ambiguı̈tés :
(1) Les énoncés réellement ambigus : à deux analyses distinctes correspondent deux sens
distincts. Par exemple :
Le boucher sale la tranche
4
Il mange une glace au café
(2) Les énoncés syntaxiquement ambigus, mais dont l’ambiguı̈té est levée par les locuteurs
humains à l’aide de connaissances sémantiques, ou de connaissances (extra-linguistiques) sur le
monde. Par exemple :
Il mange une glace au restaurant
Il mange une glace au chocolat
Le directeur de l’usine qui produit des tracteurs a téléphoné ce matin
Le directeur de l’usine qui fréquente ta sœur a téléphoné ce matin
La sœur du policier qui a épousé ton cousin a téléphoné ce matin
(3) Les énoncés non ambigus mais qui sont analysés comme ambigus en raison de la structure
de la grammaire. Par exemple, le petit chien blanc sera ambigu avec la CFG comportant les
règles :
SN → det N1
N1 → adj N1
N1 → N1 adj
N1 → N
(4) Les énoncés analysés comme ambigus parce que la division en catégories syntaxiques de
la grammaire est insuffisamment fine. Par exemple :
Le boucher sale le tranche
Le ministre a reçu le conseiller ( vsLe ministre a préféré le conseiller)
Certaines ambiguı̈tés proviennent clairement de la tentative d’augmenter la couverture des
grammaires. Si par exemple on introduit dans une grammaire des règles permettant d’analyser
Jean est très sieste
cela produira deux représentations pour
Jean est très calme
1.4.3
Les solutions
Afin d’obtenir, malgré les difficultés, des informations sur la structure syntaxique des énoncés,
il a été proposé des méthodes moins ambitieuses :
- qui ne cherchent pas à effectuer l’analyse complète des phrases, mais des analyses partielles.
Le chunk parsing (chunk = gros morceau) consiste à séparer les phrases en des fragments qui
constituent des unités syntaxiques ;
- qui ne cherchent pas à résoudre les ambiguı̈tés, mais à les contourner.
Ces méthodes se rattachent à ce qu’on appelle le TAL robuste, que l’on peut opposer à un
(( TAL théorique )).
5
2 Les grammaires indépendantes du contexte
Les grammaires indépendantes du contexte (Context-Free Grammars, CFG), ont été introduites par Chomsky (1957) afin de démontrer les insuffisances pour la description des langues
naturelles des grammaires en constituants immédiats.
2.1
2.1.1
Définitions techniques préliminaires
Mots, monoı̈des libres
Soit un ensemble fini non vide V , que l’on appelle vocabulaire. Toute suite finie d’éléments
de V est un mot.
Par exemple, si V = {a, b, c}, baba est un mot. Dans ce mot, b possède deux occurrences.
Dans le présent cadre, un mot représentera en général une suite de catégories. Autrement
dit le vocabulaire sera composé de catégories (comme nom, verbe, dét(erminant)), etc., et un
exemple de mot serait 1 dét nom verbe dét nom.
A tout mot x, on peut associer sa longueur notée |x|, qui est un nombre entier : le nombre
total d’occurrences que comporte ce mot.
Le mot vide, que l’on notera ε, est le seul mot de longueur 0.
Etant donnés deux mots x et y, on peut leur associer un troisième mot, que l’on note xy,
obtenu par la concaténation de x et y (c’est-à-dire par leur mise à la suite l’un de l’autre).
L’ensemble de tous les mots composés d’éléments pris dans l’alphabet V est le monoı̈de libre
sur V . On le note V ∗ . On note V + l’ensemble constitué par V ∗ moins le mot vide ε.
2.1.2
Langages formels
Tout sous-ensemble d’un monoı̈de libre V ∗ constitue un langage (formel) défini sur V .
Les opérations sur les ensembles (intersection, union, différence ensembliste) s’appliquent
évidemment aux langages, ainsi que l’opération produit, plus spécifique : à deux langages L1 et
L2 on associe un troisième langage, noté L1 L2 , tel que pour tout mot x de L1 , pour tout mot y
de L2 , xy appartient à L1 L2 .
Par exemple le produit de l’ensemble des syntagmes nominaux et de l’ensemble des syntagmes
verbaux forme un ensemble de phrases.
1. Dès lors le terme suite pourrait être préféré au terme mot, en admettant qu’il désigne des suites finies. Le
terme anglais string est sans doute plus adéquat, mais nous ne lui connaissons pas de bon équivalent en français,
chaı̂ne ne nous paraissant pas convenir.
6
2.2
2.2.1
Grammaires
Définition
Une grammaire indépendante du contexte est décrite par un 4-uple G = hVT , VN , S, Ri où
VT est un vocabulaire terminal, VN est un vocabulaire auxiliaire (ou vocabulaire non terminal)
disjoint de VT , S est un élément particulier de VN , appelé axiome de la grammaire, et R est un
ensemble de règles (de réécriture) qui ont la forme suivante :
A→β
A étant un élément de VN et β étant un élément de (VN ∪ VT )∗ .
Dans une règle telle que A → β, A est la partie gauche et β est la partie droite.
On peut, afin d’alléger l’écriture d’une grammaire, regrouper plusieurs règles qui ont même
partie gauche, sous la forme suivante :
A → β1 |β2 | · · · |βp
Exemple 2.1 Les éléments ci-dessous définissent une grammaire 2 G = hVT , VN , S, Ri :
VN = {S, SN, SV, Rel}
VT = {dét, nom, verbe, prorel}
R = {S → SN SV, SN → dét nom | dét nom Rel, SV → verbe SN, Rel → prorel SN verbe}
2.2.2
Dérivations
Etant donnée une grammaire G = hVT , VN , S, Ri, on définit deux relations sur (VN ∪ VT )∗ ,
c’est-à-dire sur les mots composés indifféremment d’éléments du vocabulaire terminal et du vocabulaire non terminal : la dérivation directe et la dérivation.
Soient µ et ν deux éléments de (VN ∪ VT )∗ . On écrit
µ⇒ν
si et seulement si il existe une règle A → β et si µ et ν sont de la forme µ = µ1 Aµ2 et ν = µ1 βµ2 ,
où µ1 et µ2 appartiennent à (VN ∪ VT )∗ .
En ce cas, on dit que ν est obtenu par dérivation directe à partir de µ.
Une dérivation est définie comme étant une suite hµ0 , µ1 , . . . , µr i de mots de (VN ∪ VT )∗ où
pour tout i
µi−1 ⇒ µi
S’il existe une dérivation hµ0 , µ1 , . . . , µr i, on peut écrire
∗
µ0 ⇒ µr
2. Pour décrire une grammaire, il suffit souvent d’en donner les règles. Le lecteur peut alors reconstituer le
vocabulaire terminal, constitué des symboles qui ne sont jamais partie gauche d’une règle, et le vocabulaire non
terminal. L’axiome est quelquefois à spécifier.
7
et on dit que µr est obtenu par dérivation à partir de µ0 .
Un cas particulier de dérivation est obtenu pour r = 0. Autrement dit pour tout mot µ de
(VN ∪ VT )∗ on peut écrire
∗
µ⇒µ
Une dérivation hµ0 , µ1 , . . . , µr i est une dérivation gauche si pour tout i on a µi = αBβ,
µi+1 = αγβ avec α ∈ VT∗ .
On définit de même une dérivation droite.
Exemple 2.2 Dans le cadre de la grammaire de l’exemple 2.1 ci-dessus, on a :
SN SV ⇒ SN verbe SN
∗
SN SV ⇒ dét nom verbe dét nom
cette dernière relation étant légitimée par l’existence de la dérivation
hSN SV, SN verbe SN, dét nom verbe SN, dét nom verbe dét nomi
ou de la dérivation gauche
hSN SV, dét nom SV, dét nom verbe SN, dét nom verbe dét nomi
On pourra écrire, afin de rendre explicite la décomposition de la dérivation en dérivations
directes :
SN SV ⇒ SN verbe SN ⇒ dét nom verbe SN⇒ dét nom verbe dét nom
2.2.3
Langage engendré par une grammaire
Le langage engendré par la grammaire G, noté L(G), est constitué de l’ensemble de toutes
les suites obtenues par dérivation à partir de l’axiome :
∗
L(G) = {α ∈ VT∗ ; S ⇒ α}
Un langage engendré par une CFG sera dit algébrique, ou de type 2. Le langage prototype
des langages algébriques est le langage :
{an bn ; n > 0}
Il est engendré par la grammaire G = hVT , VN , S, Ri avec VT = {a, b}, VN = {S}
et R = {S → aSb, S → aSb}.
2.3
Arbres syntagmatiques
Les arbres syntagmatiques rendent compte de deux relations : une relation dite de dominance
qui indique quels syntagmes 3 contiennent quels syntagmes, et une relation dite de précédence
qui indique quels syntagmes précèdent quels autres syntagmes dans l’ordre linéaire de l’énoncé.
Qui plus est, nous ne définissons pas ici les arbres en général, mais les arbres autorisés par
une grammaire donnée, les arbres admissibles relativement à cette grammaire.
3. Cf. ci-dessous page 12.
8
2.3.1
Arbres admissibles
Etant donnée une grammaire G = hVT , VN , S, Ri, on définit les arbres admissibles par la
grammaire de la manière suivante :
(i) Si X ∈ VT ∪ VN alors X est un arbre (admissible) de racine 4 X;
(ii) Si α1 , α2 , . . . , αn sont des arbres de racines respectives X1 , X2 , . . . , Xn , si A → X1 X2 . . . Xn
est une règle de R, alors A(α1 , α2 , . . . , αn ) est un arbre admissible de racine A.
On notera que la partie (ii) de la définition n’exclut pas les règles de la forme A → ε, obtenues
avec n = 0.
2.3.2
Arbres terminés
La définition des arbres terminés est semblable à celle des arbres admissibles, si ce n’est que
dans la partie (i) de la définition ci-dessus, X doit appartenir à VT (et donc pas à VN ).
2.3.3
Arbre représentant un mot
La suite des feuilles 5 d’un arbre α, que l’on note f euilles(α), est le mot de (VT ∪ VN )∗ défini
de la manière suivante :
(i) f euilles(X) = X
(ii) f euilles(A(α1 , α2 , . . . , αn )) = f euilles(α1 )f euilles(α2 ) . . . f euilles(αn )
Un arbre α admissible et terminé donne une représentation structurale du mot f euilles(α)
de VT∗ .
Exemple 2.3 L’arbre ci-dessous
S(a, S(a, S(a, b), b), b)
donne une représentation du mot aaabbb pour la grammaire prototypique des langages algébriques.
Exemple 2.4 L’arbre ci-dessous
S(SN(dét,nom),SV(verbe,SN(dét,nom,Rel(prorel, SN(dét,nom,
Rel(prorel,SN(dét,nom),verbe)),verbe))))
donne une représentation du mot
dét nom verbe dét nom prorel dét nom prorel dét nom verbe verbe
dans le cadre de la grammaire de l’exemple 2.1.
Pour le lien entre ce mot et un énoncé comme
Le notaire recevra la femme que la maison où le professeur vivait attire
voir ci-dessous page 12.
On peut donner une représentation (( spatiale )) d’un arbre, dans un plan à deux dimensions.
Mais cette représentation n’apporte rien de plus que la notation parenthésée, si ce n’est qu’elle
4. Il serait plus juste de dire d’étiquette de racine.
5. On devrait dire la suite des étiquettes des feuilles.
9
est sans doute plus expressive pour les êtres humains.
S
T
T
T
T
SN
T SV
c
c
c
c
dét
2.3.4
nom
verbe
c
c SN
H
HH
H
HH
H
HH
dét nom
HX
Rel
# XXXX
XXX
#
XXX
#
XXX
#
XXX
#
XX
#
X
SN
prorel
H
HH
verbe
HH
HH
HH
dét nom
H Rel
#c
#
c
#
c
#
c
#
c
#
c verbe
SN
prorel
T
T
T
T
dét
T nom
Arbres de dérivation
On démontre assez facilement qu’à toute dérivation hA, µ1 , . . . , µr i dans une CFG où A ∈ VN ,
on peut associer un arbre α de racine A admissible par la grammaire et tel que f euilles(α) = µr .
Un tel arbre est alors appelé arbre de dérivation.
Par exemple, à la dérivation obtenue dans le cadre de la grammaire de l’exemple 2.1
S ⇒ SN SV ⇒ SN verbe SN ⇒ dét nom verbe SN⇒ dét nom verbe dét nom
on associe l’arbre : S(SN(dét,nom),SV(verbe,SN(dét,nom)))
Remarquons qu’à plusieurs dérivations différentes peut être associé un même arbre. Ainsi,
l’arbre ci-dessus est également associé à la dérivation
S ⇒ SN SV ⇒ dét nom SV⇒ dét nom verbe SN⇒ dét nom verbe dét nom
10
Mais, à deux dérivations gauches différentes (ou à deux dérivations droites différentes) sont
associés deux arbres différents.
On pourra par conséquent décrire un arbre par une dérivation gauche qui lui correspond, et
la dérivation gauche par une suite de règles de la grammaire. Ainsi, si on numérote de 1 à 5 les
règles de la grammaire de l’exemple 2.1, l’arbre de l’exemple 2.4 peut s’écrire :
12435352
On peut à présent donner une nouvelle définition du langage engendré par une grammaire :
L(G) est l’ensemble des mots µ de VT∗ tels qu’il existe un arbre α admissible par la grammaire,
de racine S et tel que f euilles(α) = µ.
2.3.5
Ambiguı̈té
Une grammaire G sera dite ambiguë si et seulement si il existe un mot µ appartenant à
L(G) représenté par plusieurs arbres admissibles différents relativement à cette grammaire (ou
si plusieurs dérivations gauches différentes engendrent le mot).
Exemple 2.5 La grammaire qui comporte les règles ci-dessous est ambiguë :
SN → dét N1
N1 → N1 SP | N1 adj | nom
SP → prép N1
Elle permet par exemple de donner deux représentations du syntagme nominal une directrice
de société enrhumée :
SN(dét,N1 (N1 (N1 (nom),SP(prép,N1 (nom))),adj))
SN(dét,N1 (N1 (nom),SP(prép,N1 (N1 (nom),adj))))
Ce syntagme constitue alors un énoncé ambigu relativement à la grammaire.
2.4
2.4.1
Équivoques et problèmes
Le rapport entre syntaxe et lexique
Dès l’origine, la représentation des énoncés à l’aide des CFG a donné lieu à des équivoques
quant au rôle attribué au vocabulaire terminal. Les difficultés se situent très exactement au
point où les représentations syntaxiques rencontrent des éléments du lexique afin de constituer
des énoncés effectifs. La question porte sur la nature des unités minimales mises en jeu dans les
représentations syntaxiques : sont-ce des mots, ou bien sont-ce des catégories ? Il faut trancher
entre les deux hypothèses suivantes :
(1) Le vocabulaire terminal est composé des mots effectifs qui apparaissent dans les énoncés.
En ce cas, les grammaires contiennent des règles telles que nom → chien, règles quelquefois appelées règles terminales ou règles de réalisation lexicale. Les catégories qui apparaissent dans les
parties gauches de ces règles (nom, verbe, préposition, etc.) sont dites catégories préterminales.
(2) Le vocabulaire terminal est composé des catégories préterminales.
11
La réponse (1) nous paraı̂t entâchée de plusieurs défauts. En premier lieu, elle conduit à
représenter d’une manière identique, notamment dans les arbres syntagmatiques, deux relations
très différentes. Considérons une règle comme SN → dét nom. Elle indique que le SN est constitué
d’un déterminant et d’un nom, et donc représente une relation de constituance. En revanche, la
règle nom → chien représente une relation de spécialisation (ou de subsomption) : la classe des
noms est plus générale que le nom chien. On pourrait placer des classes intermédiaires comme
celle des noms ayant le trait animé, ou celle des noms au masculin, etc.
Par ailleurs, une des propriétés essentielles des CFG est la possibilité d’engendrer des langages
infinis à l’aide de grammaires finies. Si les règles de réalisation lexicale étaient intégrées dans les
grammaires, elles seraient nécessairement extrêmement nombreuses, leur nombre étant même
non limité.
Les procédures de traitement automatique, enfin, sont clairement distinctes selon qu’il s’agit
d’affecter une ou plusieurs catégories à une unité de l’ordre du mot, ou de déterminer la structure
syntaxique d’un énoncé.
Par conséquent, dans ce qui suit, si les données d’entrée d’un analyseur sont constituées de
formes lexicales et pas directement de catégories 6 , on supposera qu’il est possible d’obtenir, pour
chaque forme lexicale, l’ensemble des catégories qui lui sont associées. Par exemple :
cat(ferme) = {nom, verbe, adj}
2.4.2
La catégorie vide
Selon la définition théorique des CFG, l’existence de règles de la forme A → ε, où ε est le
mot vide, n’est nullement exclue. Les auteurs de grammaires n’ont pas ignoré cette possibilité.
Mais ce n’est pas allé sans une certaine confusion. On ne sait si la règle A → ε est une règle
de réalisation lexicale (ε étant alors une (( catégorie vide )), correspondant à un mot qui n’a pas
d’expression phonologique audible), ou bien s’il s’agit d’une règle de constituance, indiquant une
absence. Cette dernière hypothèse est celle qui correspond à la définition formelle des règles.
Dans la première hypothèse, les catégories vides ne seraient pas à traiter par un analyseur
syntaxique : ce serait aux prétraitements à s’en occuper. Mais, en ce cas, la donnée d’entrée de
l’analyseur syntaxique serait presque impossible à obtenir ; en effet, n’importe où dans l’énoncé
pourrait se trouver n’importe quel objet, de n’importe quelle catégorie.
La deuxième hypothèse peut tout à fait être prise en compte par les analyseurs syntaxiques.
Néanmoins, elle peut poser des diificultés à certains d’entre eux. On notera par exemple qu’avec
certaines grammaires il pourra arriver que l’on obtienne un nombre non fini d’analyses.
2.4.3
Syntagmes et constituants
Une suite de catégories qui reçoit une représentation structurale par un arbre α dans le cadre
d’une grammaire G sera dite un syntagme dans cette grammaire, de catégorie racine(α).
Par exemple le mot prorel dét nom verbe, qui correspond à la portion d’énoncé que le
professeur habitait est un syntagme de catégorie Rel pour la grammaire de l’exemple 2.1.
On différenciera ici la notion de syntagme de celle de constituant, sur le point essentiel
suivant : le syntagme a une catégorie, tandis que le constituant n’en a pas. C’est ainsi que par
6. Cf. ci-dessus page 3.
12
exemple le mot verbe dét nom qui peut être associé à mange ta soupe est un constituant unique,
alors qu’il peut donner lieu, dans le cadre d’une grammaire donnée, à deux syntagmes 7 , un de
catégorie S, et un autre de catégorie SV.
En revanche, on considérera qu’on a affaire à un seul syntagme si une même suite de catégories
est représentée par deux arbres distincts, mais de même racine.
Dans ces deux derniers cas, les grammaires considérées sont ambiguës.
2.4.4
Le paradoxe des CFG
Bien que Chomsky ait défini les CFG afin d’en démontrer l’inadéquation à la représentation
des langues naturelles, c’est sur la base des CFG qu’ont été bâties les méthodes d’analyse syntaxique des langues naturelles autour des années 1960.
Les gramaires transformationelles, introduites par Chomsky comme étant plus adéquates à
la représentation des langues, ont été à l’inverse critiquées entre autres parce qu’elles rendaient
très difficile l’analyse syntaxique automatique.
C’est pourquoi sont apparus dans les années 1980 de nouveaux formalismes dans la lignée
des CFG. Il a donc été nécessaire d’adapter les analyseurs syntaxiques aux grammaires écrites
selon ces formalismes.
7. Cela suppose qu’il y ait dans la grammaire une règle du type S → SV ou S → V SN.
13
3 Algorithme général d’analyse descendante
3.1
Présentation
C’est une analyse descendante avec retour en arrière.
Les données externes de l’algorithme sont:
- une grammaire G =< VT , VN , S, R >
- une suite de symboles de VT : x1 . . . xn .
La grammaire ne doit pas être récursive à gauche.
Dans la grammaire, les parties droites relatives à une même partie gauche sont ordonnées et
numérotées. (A)i désignera la i-ème partie droite relative au non-terminal A.
3.2
Méthode
On se donne deux piles:
- une pile P qui contient les éléments restant à dériver ou à reconnaı̂tre;
- une pile Q qui contient à un moment donné l’histoire des choix qui ont été effectués. Elle
contient par conséquent, au moment où on obtient une solution, la dérivation correspondante.
Initialement la pile P est composée uniquement de l’axiome S de la grammaire, tandis que
la pile Q est vide.
La pile P a sa tête à gauche, et la pile Q a sa tête à droite.
On décrit l’algorithme en se donnant des configurations < e, Q, P, i > composées d’un état
e, de la pile Q, de la pile P , et d’un indice i, compris entre 1 et n + 1, renvoyant à une place
dans la suite x1 , . . . xn à analyser.
L’état d’une configuration peut prendre l’une des trois valeurs:
a pour marche avant;
b pour retour en arrière (ou “backtracking”);
f pour fin.
La configuration initiale est la suivante:
14
< a, ε, S, 1 >
On passe d’une configuration à une autre en fonction de l’état de la configuration et de la
tête des piles: dans l’état a en fonction de la pile P , dans l’état b en fonction de la pile Q.
3.3
Les opérations
Soit < e, Q, P, i > une configuration. Elle peut être transformée par l’une des opérations
suivantes:
3.3.1
Descente
Si e = a, et P = Xα, X étant un élément de VN , Q est remplacée par Q(X 1), P est
remplacée par (X)1 α, e et i étant inchangés.
3.3.2
Gauche-droite
Si e = a, et P = xα, x étant un élément de VT , deux cas se présentent:
(1) x = xi ; dans ce cas, Q est remplacée par Q x, P est remplacée par α, et i est remplacé
par i + 1.
(2) x 6= xi (ou i = n + 1); dans ce cas il y a échec de l’opération gauche-droite. a est remplacé
par b.
3.3.3
Droite-gauche
Si e = b, et Q = α x , x étant un élément de VT , P est remplacée par x P , Q étant remplacée
par α et i par i − 1.
3.3.4
Remontée
Si e = b, et Q = α (X j), X étant un élément de VN , deux cas se présentent:
(1) il existe une j+1 ème partie droite (X)j+1 de partie gauche X. P , qui était nécessairement
de la forme (X)j β est remplacée par (X)j+1 β, Q étant remplacée par α (X j + 1), e prenant
la valeur a, et i étant inchangé.
(2) il n’existe pas de j + 1 ème partie droite. Q prend alors la valeur α, P prenant la valeur
Xβ. e et i sont inchangés.
3.3.5
Conditions de terminaison
Si e = a et que la pile P est vide, deux cas se présentent:
(1) i = n + 1 . Dans ce cas, il y a succès de l’analyse syntaxique. On imprime le contenu de Q
qui décrit une dérivation gauche et, si l’on veut trouver les autres dérivations gauches possibles,
on affecte à e la valeur b;
(2) i 6= n + 1 . Dans ce cas e prend la valeur b.
15
Si e = b et que la pile Q est vide, il n’y a plus moyen de faire aucune tentative. e prend la
valeur f .
L’algorithme est généralisé en prenant comme donnée externe une liste de catégories lexicales,
et non pas une suite d’éléments du vocabulaire terminal. Ce qui fait que dans l’opération gauchedroite le test x = xi est remplacé par un test d’appartenance.
3.4
Suppression de la récursivité à gauche
Etant donnée une grammaire G =< VT , VN , S, R > récursive à gauche, on peut trouver une
grammaire G0 non récursive à gauche qui lui soit équivalente.
A cette fin, on numérote (arbitrairement) tous les éléments de VN :
VN = {A0 , A1 , . . . , Ap }
Le problème dès lors se ramène à éliminer toutes les règles de la forme: Ai → Aj α avec j ≤ i.
La méthode est la suivante:
Pour i : = 0 à p faire
(1) On élimine toutes les règles Ai → Aj α avec j < i .
Pour ce faire, considérons toutes les règles dont Aj est partie gauche:
Aj → γ1 | · · · |γl
(Dans la mesure où j est strictement inférieur à i, il n’y a aucun Aq avec q ≤ j qui soit
préfixe d’un γk : le problème a été réglé précédemment.)
On remplace la règle Ai → Aj α par l’ensemble des règles:
Ai → γ1 α|γ2 α| · · · |γl α
Dans le pire des cas on peut obtenir ainsi des règles telles que Ai → Aq β avec i ≥ q > j .
Comme q est supérieur à j, en réitérant le processus on est sûr de supprimer toutes les règles
qui étaient à supprimer. Au pire, on obtient des règles de la forme Ai → Ai α.
(2) On élimine les règles de la forme Ai → Ai α. Considérons à cette fin toutes les règles dont
Ai est partie gauche:
Ai → Ai α1 |Ai α2 | · · · |Ai αr |β1 |β2 | · · · |βs
(Ai n’est préfixe d’aucun βk ).
Le langage L(Ai ) engendré par Ai est le suivant:
L(Ai ) = {β1 , β2 , . . . , βs }{α1 , α2 , . . . , αr }∗
Ce langage est également engendré par les règles:
Ai → β1 |β2 | · · · |βs
16
Ai → β1 A01 |β2 A01 | · · · |βs A01
A0i → α1 A01 |α2 A01 | · · · |αs A01
A0i → α1 |α2 | · · · |αr
où il n’y a plus de récursivité à gauche (les symboles tels que A0i ne sont jamais préfixes de la
partie gauche d’une règle)
17
4 Algorithme CKY
4.1
Présentation
Il s’agit d’un algorithme d’analyse ascendante sans retour en arrière ((( en parallèle ))).
Les données externes de l’algorithme sont:
- une grammaire indépendante du contexte G = hVT , VN , S, Ri sous forme normale de Chomsky ;
- une suite u1 u2 . . . um de m formes lexicales. A chaque forme lexicale est associé un ensemble
de catégories (éléments de VT ).
4.2
4.2.1
Méthode
Approche intuitive
On examine tous les regroupements possibles de 2 formes lexicales, puis les regroupements
possibles de 3 formes, jusqu’aux regroupements de m − 1 formes, et à l’unique regroupement de
m formes.
u1 u2 , u2 u3 , . . . , um−1 um
u1 u2 u3 , u2 u3 u4 , . . . , um−2 um−1 um
...
u1 u2 . . . um−1 , u2 u3 . . . um−1 um
u1 u2 . . . um
Remarquons que les regroupements de n formes peuvent être obtenus de n − 1 façons différentes.
La grammaire sert à sélectionner certains de ces regroupements. Tout regroupement sélectionné
est appelé un syntagme.
La phrase est acceptée si et seulement si il existe un syntagme construit à l’aide des m formes.
4.2.2
Définitions préliminaires
Soit u1 u2 . . . um la suite à analyser.
Chaque forme lexicale ui a un numéro séquentiel i (compris entre 1 et m) qui donne la place
de la forme dans la phrase.
Un syntagme est caractérisé par les formes lexicales qui le constituent, ainsi que par la
catégorie ω qui lui est associée. ω est:
- soit un élément de VN ou de VT de la grammaire indépendante du contexte,
18
- soit une catégorie de la grammaire catégorielle.
On pourrra donc écrire un syntagme hud . . . uf , ωi.
d est l’origine du syntagme, f en est l’extrémité.
Le niveau d’un syntagme, noté n, est égal au nombre de formes lexicales à l’origine de sa
construction.
Remarque: On a la relation: f − d + 1 = n .
Tout syntagme de niveau 1 est un syntagme élémentaire (ou SE).
4.2.3
La construction des familles de syntagmes homographes
Une famille de syntagmes homographes est l’ensemble des syntagmes ayant même origine et
même extrémité. Deux syntagmes d’une même famille sont différenciés par la catégorie associée
(et non par l’histoire de leur construction).
Une telle famille peut être caractérisée à partir des deux nombres f et n, d’après la relation
ci-dessus.
Snf est la famille de syntagmes de niveau n et d’extrémité f .
Snf = {ω; huf −n+1 . . . uf , ωi est un syntagme}
Chaque famille peut être considérée comme l’élément d’un tableau à double entrée. On le
représente en mettant f en abscisses et n en ordonnées.
Remarquons que, comme on a nécessairement la relation n ≤ f , toutes les familles sont
inscrites à l’intérieur du triangle délimité par la diagonale principale.
19
m
Sm
n 6
S36
3
-
6
4.3
4.3.1
m
f
L’algorithme
Reconnaissance
Les familles S11 , S12 , . . . , S1m sont des données externes de l’algorithme.
Etant données deux familles de syntagmes Snf11 et Snf22 , telles que f2 − n2 = f1 , on construit
f2
une sous-famille de la famille Sn+n
(fonction CONSTRUCTION).
2
Pour toute classe syntaxique x de Snf 1 et pour toute classe syntaxique y de Snf22 , on rajoute
z à Snf21 +n2 si et seulement si z → xy est une règle de la grammaire indépendante du contexte
(ou si x et y se réduisent en z dans la grammaire catégorielle).
Algorithme Cocke
début
pour n := 2 jusqu’à m faire
pour f := n jusqu’à m faire
début
Snf := ∅
pour k := 1 jusqu’à n − 1 faire
f
Snf := Snf ∪ CONSTRUCTION(Skf −n+k , Sn−k
)
fin
m alors écrire(‘reconnaissance’)
si S ∈ Sm
sinon écrire(‘non reconnaissance’)
fin
20
fonction CONSTRUCTION(S,T:ensembles de syntagmes):ensemble de syntagmes
début
U := ∅
pour tout x appartenant à S faire
pour tout y appartenant à T faire
pour toute règle z → xy appartenant à R faire
U := U ∪ {z}
CONSTRUCTION := U
fin
4.3.2
La construction des arbres de dérivation
Si on veut retrouver les arbres de dérivation sous-jacents aux analyses,
on peut associer à chaque syntagme un ensemble de listes de règles de la grammaire: chacune
des listes de l’ensemble indiquera une des façons d’avoir obtenu le syntagme.
On suppose que les règles de la grammaire sont numérotées. Soit N l’ensemble des numéros
de règles. A chaque syntagme x sera associé un ensemble Lx ⊂ N ∗ .
A chaque syntagme élémentaire x sera associé Lx = {ε}.
Quand on rajoute un z dans un ensemble de syntagmes U en vertu de la règle z → xy de la
grammaire que l’on suppose numérotée i, deux cas se présentent:
- si z n’est pas déjà dans U , alors Lz := {i}Lx Ly (produit de langages);
- si z est déjà dans U , alors Lz := Lz ∪ {i}Lx Ly (union de langages).
m fourniront les
Les listes de règles associées au syntagme de catégorie S présent dans Sm
dérivations gauches représentant les arbres solutions.
4.4
4.4.1
Forme normale de Chomsky
Définition
Une grammaire G = hVT , VN , S, Ri sera dite sous forme normale de Chomsky si toutes ses
règles sont de la forme A → XY où X et Y sont des symboles de VT ∪ VN .
4.4.2
Mise sous forme normale de Chomsky
Etant donnée une grammaire G = hVT , VN , S, Ri , qui ne comporte aucune règle de la forme
A → ε et telle que l’on ait L(G) ∩ VT = ∅, il existe une grammaire G0 = hVT , VN0 , S, R0 i sous
forme normale de Chomsky telle que L(G0 ) = L(G).
On donne un algorithme qui construit G0 à partir de G.
(0) Initialisations:
R1 := {A → X ∈ R}
21
R0 := R − R1
VN0 := VN
(1) S’il existe dans R1 n règles telles que:
A1 → A2
A2 → A3
...
An−1 → An
An → A1
on supprime ces règles, et on assimile tous les symboles A1 , . . . , An à un seul (par exemple A1 ).
(2) Pour chaque règle A → X1 X2 . . . Xp Xp+1 de R0 avec p > 1, on supprime cette règle de R0
on ajoute à VN0 les nouveaux symboles A1 , . . . , Ap−1 et à R0 les règles:
A → X1 A1
A1 → X2 A2
...
Ap−2 → Xp−1 Ap−1
Ap−1 → Xp Xp+1
(3) Tant que R1 est non vide, on prend une règle A → B telle qu’il n’existe pas de règle C → A
(ce qui est toujours possible, grâce à (1)).
On supprime cette règle de R1 , et:
- pour toute règle C → AX de R0 , on ajoute C → BX à R0 ;
- pour toute règle C → XA de R0 , on ajoute C → XB à R0 ;
- pour toute règle C → AA de R0 , on ajoute C → AB|BA|BB à R0 .
4.5
4.5.1
Note sur les grammaires catégorielles
Catégories
On se donne un ensemble de catégories primitives ou catégories de base B. Par exemple
B = {n, s}, où n représente la catégorie nom et s la catégorie phrase (sentence).
L’ensemble C[B] des catégories est défini de la manière suivante:
(i) si λ ∈ B, alors λ ∈ C[B];
(ii) si µ, ν ∈ C[B] alors (µ/ν) ∈ C[B] (on lit (( µ sur ν )));
(iii) si µ, ν ∈ C[B] alors (µ\ν) ∈ C[B] (on lit (( µ sous ν ))).
On peut, pour alléger les notations, supprimer les parenthèses les plus extérieures d’une
catégorie.
22
4.5.2
Réductions
Le couple de catégories hα, βi se réduit directement en δ si et seulement si l’une des conditions
suivantes est réalisée:
- soit α = µ/ν, β = ν et δ = µ;
- soit α = µ, β = µ\ν et δ = ν.
La suite de catégories α = µ1 . . . µn se réduit directement en β si et seulement si il existe i
tel que β = µ1 . . . µi−1 νµi+2 . . . µn et hµi , µi+1 i se réduit directement en ν.
La suite de catégories α = µ1 . . . µn se réduit en β si et seulement si il existe une suite
γ0 , γ1 , . . . , γm telle que α = γ0 , β = γm et
∀i ∈ {1, . . . , m}, γi−1 se réduit directement en γi .
4.5.3
Grammaires catégorielles
Une grammaire catégorielle G = hU, B, S, cati est telle que:
U est un ensemble de formes lexicales;
B est un ensemble de catégories primitives;
S ∈ B est une catégorie primitive distinguée;
cat : U → P(C[B]) est une application qui associe à chaque forme lexicale un ensemble de
catégories.
Une suite u1 . . . un est de type α (α ∈ C[B]) si et seulement si il existe n catégories µ1 , . . . , µn ∈
C[B] telles que µ1 . . . µn se réduit en α et
∀i ∈ {1, . . . , n} µi ∈ cat(ui ).
L’ensemble des suites acceptées par la grammaire est l’ensemble
L(G) = {ω ∈ U ∗ ; ω est de type S}
4.5.4
Grammaires catégorielles et grammaires indépendantes du contexte
Pour chaque grammaire catégorielle il existe une grammaire indépendante du contexte qui
engendre le même langage.
Soit G = hU, B, S, cati une grammaire catégorielle. On construit une CFG G = hVT , VN , S, Ri
équivalente à la grammaire catégorielle par l’algorithme ci-dessous.
23
Algorithme Grammaire CF
début
S := ∅
S
CT := u∈U cat(u)
C := CT
CN := ∅
C 0 := C
tant que non vide(C 0 ) faire
début
W := ∅
pour tous les α ∈ C faire
pour tous les β ∈ C 0 faire
début
si hα, βi se réduit directement en γ alors
début
CN := CN ∪ {γ}
S := S ∪ {γ → αβ}
si γ ∈
/ C alors W := W ∪ {γ}
fin
si hβ, αi se réduit directement en γ alors
début
CN := CN ∪ {γ}
S := S ∪ {γ → βα}
si γ ∈
/ C alors W := W ∪ {γ}
fin
C := C ∪ W
C 0 := W
fin
fin
fin
A toute catégorie α de CT on associe un élément a(α) de VT .
A toute catégorie α de CN on associe un élément A(α) de VN .
Pour toute règle γ → αβ de S, on associe les règles suivantes de R, à condition qu’elles
soient possibles :
A(γ) → A(α)A(β)
A(γ) → A(α)a(β)
A(γ) → a(α)A(β)
A(γ) → a(α)a(β)
24
5 Algorithme de Earley
5.1
Présentation
Il s’agit d’une analyse descendante en parallèle.
Soit G = hVT , VN , S, Ri une grammaire indépendante du contexte quelconque et soit a1 a2 . . . an
une suite de VT∗ à analyser.
Les règles de la grammaire sont numérotées de 1 à m. On adjoint à l’ensemble des règles
la règle S 0 → S qui sera numérotée 0, S 0 étant un symbole qui n’appartient pas au voabulaire
auxiliaire.
5.2
Reconnaissance
On construit des ensembles de configurations S0 , S1 , . . . , Sn . L’ensemble Si correspond à
toutes les analyses possibles après qu’aient été reconnus i éléments de la suite.
Une configuration est composée d’un triplet hq, r, ki où:
q est un numéro de règle,
r est un nombre qui indique une position dans la partie droite de la règle q,
k est un nombre, correspondant au moment où on a commencé à appliquer la règle q.
Initialement, on place dans l’ensemble S0 la configuration h0, 0, 0i (configuration initiale).
Soit hq, r, ki une configuration appartenant à l’ensemble Si et soit A → X1 X2 . . . Xs la règle
numéro q. A partir de là, on construit de nouvelles configurations selon les trois opérations suivantes:
(i) descente (predict): si r < s et Xr+1 appartient à VN , alors pour toute règle de numéro j
dont la partie gauche est égale à Xr+1 , on place la configuration hj, 0, ii dans Si ;
(ii) gauche-droite (scan): si r < s et Xr+1 = ai+1 , on place la configuration hq, r +1, ki dans Si+1 ;
(iii) réduction (complete): si r = s, on considère toutes les configurations hp, t, ji appartenant à
Sk telles que le t + 1 ième élément de la partie droite de la règle p soit égal à A. Pour chacune
de ces configurations, on rajoute la configuration hp, t + 1, ji à Si .
Il y aura reconnaissance si appartient à l’ensemble Sn une configuration de la forme h0, 1, 0i.
25
5.3
Construction des arbres de dérivation
On adjoint à chacune des configurations un quatrième élément: une liste de réductions, c’està-dire une liste de numéros de règles.
Pour la configuration initiale, cette liste est vide. La configuration initiale devient donc:
h0, 0, 0, εi.
Chaque fois qu’on crée une nouvelle configuration par l’opération de descente, la liste de
réductions associée est vide. C’est-à-dire que l’on crée une configuration du type hj, 0, i, εi.
Chaque fois qu’on crée une nouvelle configuration par l’opération gauche-droite, la liste de
réductions associée est inchangée. C’est-à-dire que, à partir de la configuration hq, r, k, αi, on
construit la configuration hq, r + 1, k, αi.
Si, à partir d’une configuration hq, r, k, αi appartenant à Si et d’une configuration hp, t, j, βi
appartenant à Sk , on crée une nouvelle configuration par réduction, cette nouvelle configuration
sera de la forme hp, t + 1, j, βqαi.
Finalement, il faudra obtenir une configuration de la forme h0, 1, 0, αi pour qu’il y ait reconnaissance. En ce cas, en lisant α de gauche à droite, on obtient une dérivation gauche correspondant à l’analyse.
On pourra évidemment obtenir plusieurs analyses distinctes d’une suite d’éléments du vocabulaire terminal. Il y aura alors dans Sn plusieurs configurations différentes de la forme h0, 1, 0, αi.
26
6 Analyse LR
6.1
Présentation
Il s’agit d’une analyse ascendante sans retour en arrière, fonctionnant de manière déterministe.
Toutefois, une telle analyse ne peut avoir lieu que pour une certaine classe de grammaires
indépendantes du contexte, appelées grammaires LR(k).
La méthode s’appelle LR car on parcourt la suite à reconnaı̂tre de gauche (left) à droite et
on obtient une dérivation droite (right).
L’analyseur utilise une table, dépendant de chaque grammaire. Cette table est construite
selon un certain algorithme. En ce sens, on peut dire qu’il y a construction automatique d’un
analyseur syntaxique.
Les données externes de l’algorithme sont:
- une grammaire indépendante du contexte G = hVT , VN , S, Ri dont les règles sont numérotées
de 1 à p; Ai est la partie gauche de la règle numéro i, li est la longueur de la partie droite de
cette règle;
- une suite a1 a2 . . . am de m éléments de VT que l’on fait suivre du m + 1 ème symbole #;
- un tableau à double entrée, décrit comme étant une fonction à deux arguments f . A tout état
j et à tout élément x de VN ∪ VT ∪ {#} on associe f (j, x) qui peut prendre une des valeurs qui
suit:
- aller à k
- réduction r (à condition que x n’appartienne pas à VN )
- reconnaissance
- erreur
où k est un numéro d’état, et r est un numéro de règle (compris entre 1 et p).
6.2
L’algorithme
On utilise une pile α qui contient essentiellement des numéros d’états (et accessoirement des
éléments de VN ou VT ).
Cette pile marque, d’une certaine manière, ce qui a déjà été reconnu dans la suite. On pointe
constamment sur le premier élément non reconnu de la suite a1 a2 . . . am # à l’aide de la variable
i. Cette variable ne peut que croı̂tre, et c’est pourquoi l’algorithme est sans retour en arrière. La
tête de la pile α est forcément constituée par un numéro d’état k. La progression de l’algorithme
dépend de la valeur de f (k, ai ).
On appelle la procédure dépiler(α, n) qui supprime n éléments situés en fin de pile α et la
fonction dernier(a) qui renvoie la tête de la pile α, c’est-à-dire son dernier élément.
27
Algorithme Analyse LR
Début
état := 0
i := 1
α := (0)
β := liste vide
échec := faux
succès := faux
tant que non échec et non succès faire
début
X := f (dernier(α),ai )
si X = reconnaissance alors succès := vrai
sinon si X = aller à k alors
début
i := i + 1
α := αai k
fin
sinon si X = réduction r alors
début
dépiler(α, 2 × lr )
aller à k := f (dernier(α),Ar )
α := αAr k
β := rβ
fin
sinon {X = erreur} échec := vrai
fin
si échec alors écrire("erreur") sinon écrire(β)
fin
Dans le cas où il y a une analyse, celle-ci sera contenue dans la pile β, sous forme d’une
dérivation droite.
6.3
6.3.1
6.3.1.1
Construction automatique de la table
Préliminaires
Application Premiers
Pour tout α appartenant à (VN ∪VT )∗ on définit l’application Premiers de la manière suivante:
∗
(i) Premiers-stricts(α) = {a ∈ VT ; α ⇒ aβ}
28
∗
(ii) si α ⇒ ε alors Premiers(α) = Premiers-stricts(α) ∪ {ε}
sinon Premiers(α) = Premiers-stricts(α)
Premiers est calculé selon l’algorithme qui suit:
(1) si X ∈ VT alors Premiers(X) = {X}
(2) si X ∈ VN et X → aα ∈ R alors a ∈ P remiers(X)
si X ∈ VN et X → ε ∈ R alors ε ∈ Premiers(X)
(3) Soit X → Y1 Y2 . . . Yk ∈ R et soit i le plus grand nombre inférieur ou égal à k tel que
pour tout j inférieur strictement à i, Yj appartient à VN et ε appartient à Premiers(Yj ).
Pour tout j inférieur ou égal à i:
Premiers(Yj ) − {ε} ⊂ Premiers(X)
Si i = k et ε ∈ Premiers(Yk ), alors ε ∈ Premiers(X)
(4) si pour tout j inférieur à i on a ε ∈ Premiers(Xj ), et si ε ∈
/ Premiers(Xi ) (ou i = n)
alors
Premiers(X1 X2 . . . Xn ) = Premiers-stricts(X1 ) ∪ · · · ∪ Premiers-stricts(Xi−1 )∪ Premiers(Xi )
6.3.1.2
Application Suivants
Pour tout A appartenant à VN , on définit l’application Suivants de la manière suivante:
∗
(i) Suivants-stricts(A) = {a ∈ Vt ; S ⇒ αAaβ}
∗
(ii) si S ⇒ αA alors Suivants(A) = Suivants-stricts(A) ∪ {#}
sinon Suivants(A) = Suivants-stricts(A)
Suivants est construit selon l’algorithme qui suit:
(1) # ∈ Suivants(S)
(2) si A → αBβ ∈ R avec β 6= ε et A accessible, alors
Premiers(b) − {ε} ⊂ Suivants(B)
si ε ∈ Premiers(b) alors Suivants(A) ⊂ Suivants(B)
(3) si A → αB ∈ R, alors Suivants(A) ⊂ Suivants(B)
29
6.3.2
Première méthode de construction de la table
On construit des ensembles de configurations, numérotés à partir de 0. Les ensembles de
configurations joueront le rôle des états.
Chaque configuration hr, qi est composée d’une règle r et d’un nombre q compris entre 0 et
lr indiquant une place dans la partie droite de la règle. On peut noter une configuration sous la
forme
A→α·β
On se donne par ailleurs un nouveau symbole non terminal S 0 qui devient l’axiome de la
grammaire, ainsi que la règle S 0 → S, numérotée 0. On remarquera que Suivants(S 0 ) = {#}.
Un premier ensemble de configurations, numéroté 0, contient la configuration h0, 0i ou
S0 → . S
Pour toute configuration A → α · Bβ appartenant à l’ensemble j, pour toute règle r telle que
B = Ar , on ajoute dans l’ensemble j toutes les configurations hr, 0i. (Opération de fermeture).
Pour tout X appartenant à VT ou VN , et pour toute configuration A → α · Xβ appartenant
à l’ensemble j, on construit un nouvel ensemble contenant toutes les configurations A → αX · β.
(Attention, pour un X donné, on construit un seul nouvel ensemble à partir d’un ensemble
donné.)
Si, après application de l’opération de fermeture, ce nouvel ensemble est identique à un ensemble déjà construit, on identifie les deux ensembles. On obtient ainsi un ensemble k et on écrit
que f (j, X) = aller à k. (Opération de construction).
Pour toute configuration hr, lr i appartenant à j et pour tout a appartenant à Suivants(Ar ),
- si r 6= 0, on écrit f (j, a) = réduction r
- si r = 0, on écrit f (j, a) = reconnaissance.
Si, au cours de ce processus, on veut attribuer deux valeurs différentes à un même f (j, X),
il y a échec dans la construction de la table.
A la fin du processus, tous les f (j, X) n’ayant pas reçu de valeurs reçoivent la valeur erreur.
Si on parvient à construire la table, c’est que la grammaire est LR(0). Cette méthode de
construction de la table est la méthode SLR (simple LR).
6.3.3
Deuxième méthode de construction de la table
Une configuration comportera un troisièmé élément, qui sera soit un symbole de VT , soit le
symbole #. Ce troisième élément jouera le rôle de prédiction. Une configuration sera donc notée
hr, q, ai, avec a ∈ VT ∪ {#} ou encore
A → α · β, a
La configuration initiale sera h0, 0, #i ou S 0 → ·S, #
30
L’opération de fermeture s’applique de la manière suivante:
Pour toute configuration A → α · Bβ, a appartenant à l’ensemble j, pour toute règle r telle
que B = Ar , pour tout b appartenant à Premiers(βa), on ajoute dans l’ensemble j toutes les
configurations hr, 0, bi.
L’opération de construction devient:
Pour tout X appartenant à VT ou VN , et pour toute configuration A → α·Xβ, a appartenant
à l’ensemble j, on construit un nouvel ensemble contenant toutes les configurations A → αX ·β, a.
(Les prédictions sont inchangées dans l’opération de construction.)
L’écriture des f (j, X) = aller à k est par conséquent inchangée.
En revanche, la détermination des réductions est modifiée. Pour toute configuration hr, lr , ai
appartenant à j , on écrit f (j, a) = réduction r; sauf évidemment si r = 0, auquel cas on écrit
f (j, a) = reconnaissance.
Si on parvient à construire la table avec cette méthode, c’est que la grammaire est LR(1).
Cette méthode est la méthode LR(1) canonique.
6.3.4
Troisième méthode
Cette méthode est semblable à la précédente, sauf que l’on identifie deux ensembles de configurations qui ne diffèrent que par les prédictions.
On appelle cette méthode la méthode LA LR. (LA comme lookahead).
31
7 Analyse syntaxique partielle
7.1
Introduction
Il s’agit de répondre aux problèmes posés par l’analyse complète quand elle s’applique à de
(( vraies )) productions langagières :
- comment faire par rapport aux phrases non analysables par les grammaires que l’on construit?
- comment éviter la production d’un trop grand nombre d’analyses?
Il se trouve que si on essaye de résoudre un des deux problèmes (en augmentant par exemple
la couverture des grammaires), on aggrave l’autre. Mais on peut éviter ces problèmes si on se
contente d’analyses partielles. L’idée est d’obtenir des fragments de structures syntaxiques, dans
le cadre de ce qu’on appelle le chunk parsing 8 .
On ne cherchera pas non plus à résoudre certaines ambiguı̈tés, essentiellement les ambiguı̈tés
d’attachement des syntagmes prépositionnels ou des relatives au nom.
Par exemple les deux syntagmes nominaux la voiture de fonction du ministre de la justice
et le mari de la sœur de la voisine de mon boulanger pourraient être représentés par un même
arbre, du type SN(dét,N,SP,SP,SP).
Les structures enchâssées sont remplacées par des structures accolées.
7.2
7.2.1
Quelques techniques élémentaires
L’utilisation des mots délimiteurs
Les mots délimiteurs sont des chinks 9 . Les chunks sont ainsi des séquences de mots délimités
par des chinks.
Un exemple d’utilisation d’une telle technique est la délimitation de syntagme nominaux
du français (à but d’extraction terminologique) en prenant pour mots délimiteurs les catégories
suivantes : verbes, pronoms, conjonctions, prépositions et déterminants, à l’exception de de, de
la, à.
On obtient ainsi, à partir de la phrase
un traitement de texte est installé sur le disque dur de la station de travail
l’extraction des deux syntagmes traitement de texte et disque dur de la station de travail.
7.2.2
L’utilisation de couples d’étiquettes
L’entrée du programme est composée d’une suite d’étiquettes catégorielles. Par exemple pour
le début de phrase :
the prosecuter said in closing that . . .
on aurait la suite d’étiquettes :
8. En anglais, chunk veut dire gros morceau.
9. En anglais, fente, fissure.
32
$ D N V IN N CS
où $ représente le début de la suite.
L’objectif ici serait d’obtenir encore des chunks nominaux, ce qui donnerait sur l’exemple :
$ [ D N ] V IN [ N ] CS
Entre deux catégories on insère soit (( [ )), soit (( ] )), soit (( ][ )), soit rien.
On parcourt la liste d’étiquettes catégorielles de gauche à droite en ayant en mémoire le
dernier symbole qui a été inséré. Afin de savoir si on est à l’intérieur ou à l’extérieur d’un chunk
nominal, quand on n’insère rien, on dit que l’on insère soit I (intérieur), soit O (extérieur).
On obtient ainsi des possibilités de succession et des interdictions :
symbole précédent
[
]
][
I
O
symboles suivants autorisés
], ][, I
[, O
], ][, I
], ][, I
[, O
interdits
[, O
], ][, I
[, O
[, O
], ][, I
Dans la pratique on insère une de ces combinaisons selon une méthode probabiliste.
7.3
7.3.1
Les cascades à nombre fini d’états
Présentation
La méthode proposée est due à Abney, et elle date du début des années 1990. On procède
par niveaux : on reconnaı̂t des syntagmes du premier niveau, puis des syntagmes de deuxième
niveau en se servant des syntagmes de premier niveau reconnus, et ainsi de suite, le nombre
d’étapes étant fini.
Prenons par exemple la phrase en anglais :
the woman in the lab coat thought you were sleeping
Il lui correspond la suite de catégories :
D N P D N N V Pro Aux Ving
Cette suite de catégories constitue le niveau L0 . Les niveaux L1 , L2 et L3 seront constitués
au fur et à mesure, par des regroupements successifs :
L1 : SN(D,N) P SN(D,N,N) SV(V) SN(Pro) SV(Aux,Ving)
L2 : SN SP(P,SN) SV SN SV
L3 : S(SN,SP,SV) S(SN,SV)
On isole deux phrases, sans rechercher comment elles s’articulent.
33
7.3.2
La méthode d’analyse
L’analyse est vue comme une suite de transductions finies :
L0
T1
- L
1
T2
- L
2
T3
- L
3
Chaque transducteur est composé d’un ensemble de schémas, un schéma se présentant comme
une règle de réécriture dans la partie droite de laquelle figure une expression régulière. Ainsi les
schémas permettant d’analyser l’énoncé pris en exemple pourraient être les suivants :
T1 = {SN → D? N∗ N, SN → Pro, SV → V, SV → Aux Ving}
T2 = {SP → P SN}
T3 = {S → SP∗ SN SP∗ SV SP∗ }
Dans les parties droites des règles, D? signifie que le déterminant peut être présent ou pas,
tandis que N∗ signifie qu’il peut y avoir un nombre quelconque de noms, éventuellement zéro.
Chaque transducteur peut être représenté par un automate dans lequel on indique pour les
états terminaux la catégorie de la suite reconnue.
N
T1
N - 2
SN
1
:
> D
N
Pro - 3
- 0 SN
X
ZXXX
X
XXV
Z
XXX
Z
XX
Z
X
Aux Z
z
X
~
5
- 4
SV
Ving
T2
P
- 6
T3
SN SV - 9
10
11
S
SP
SN - 7
8
SP
SP
SP
On parcourt le premier automate à partir de l’état initial (numéroté 0) et on va jusqu’à
l’état terminal qui permet de reconnaı̂tre la plus longue séquence. La catégorie qui étiquette
l’état terminal est alors le prochain symbole de sortie du transducteur.
34
S’il n’y a pas la possibilité d’aller à un état terminal, on sort le premier symbole qui était
examiné, et on recommence le parcours de l’automate à partir du symbole suivant.
On obtient ainsi une suite de symboles de sortie d’un transducteur, qui va servir d’entrée au
transducteur suivant.
Sur l’exemple, on obtient les parcours suivants :
0
0
0
0
0
0
→D→ 1 →N→ 2 → SN
→P
→D→ 1 →N→ 2 →N→ 2 → SN
→V→ 4 → SV
→Pro→ 3 → SN
→Aux→ 5 →Ving→ 4 → SV
6
6
6
6
6
→ SN
→P→ 7 →SN→ 8 → SP
→ SV
→ SN
→ SV
9 →SN→ 10 →SP→ 10 →SV→ 11 → S
9 →SN→ 10 →SV→ 11 → S
7.3.3
Commentaires
1. Grâce à ce type d’analyseur, on arrive à reconnaı̂tre des syntagmes à l’intérieur de phrases
qui n’auraient pas été reconnues. Avec une analyse complète le rejet de la phrase globale entraı̂ne
le rejet de toutes les sous-parties de la phrase.
2. On est dans une philosophie dite de l’(( esay-first parsing )) : on prend d’abord les décisions
les plus faciles, et on laisse pour plus tard les décisions plus difficiles.
3. Les transducteurs ne permettent pas une description linguistique des phrases, mais c’est
un outil informatique permettant d’isoler des fragments de structures syntaxiques.
35
Téléchargement