• Aucun résultat trouvé

accepter la propri´et´e distributionnelle N0 =: N-hum, il n’est pas possible de le sp´ecifier dans les tables avec un seul intitul´e succinct, or c’est pr´ecis´ement ce que permettent de faire les structures de traits.

7.1.2 Particularit´e de l’outil LGExtract

LGExtract a vocation `a transformer les tables en un lexique syntaxique pour le TAL, reposant sur les mˆemes concepts linguistiques que ceux qui sont `a l’œuvre dans les tables. C’est-`a-dire que le format du lexique LGLex est ce qu’on appelle un format d’´echange. Il a vocation `a d´ecrire les tables avec les concepts manipul´es par celles-ci, en un format directement exploitable dans les applications de TAL. L’une des utilisations informatiques possibles est la conversion en un autre format, par exemple au format Lefff, ce qui suppose de manipuler d’autres concepts linguistiques, ceux manipul´es par le Lefff.

En effet, contrairement `a LGLex, qui liste toutes les constructions accept´ees par une entr´ee telles qu’elles existent dans les tables, le Lefff regroupe dans une repr´esentation unique des constructions qu’il consid`ere comme ´etant des variantes l’une de l’autre. Ainsi, l’effacement d’un argument dans une construction est consid´er´e comme une variante de cette construction. Cette repr´esentation est adapt´ee pour certains formalismes d’analy- seurs syntaxiques, tel que TAG utilis´e dans l’analyseur frmg et LFG dans l’analyseur SxLFG (cf. 2.1.3).

Il y a donc deux ´etapes bien distinctes, puisqu’il ne semble pas souhaitable que le format LGLex manipule des concepts issus du Lefff ou de Dicovalence : le format LGLex doit ˆetre utilisable par tous les connaisseurs des tables du Lexique-Grammaire, y compris ceux qui refusent totalement la notion de fonction syntaxique (du Lefff) ou de paradigme (de Dicovalence). La construction du lexique LGLex n’a rien `a voir avec ses utilisations, comme par exemple sa conversion en un autre format.

LGExtract se concentre sur l’explicitation de certaines colonnes, sans utiliser d’autres concepts que ceux des tables du Lexique-Grammaire. On obtient ainsi dans LGLex, une repr´esentation plus explicite des tables, ce qui sert (entre autres) `a produire plus simplement une repr´esentation au format Lefff.

7.2 L’outil LGExtract

Les propositions ant´erieures pour transformer les tables du Lexique-Grammaire en un lexique syntaxique pour le TAL consistaient en des param`etres sp´ecifiques pour chaque classe : la s´election des propri´et´es pertinentes, l’ajout de propri´et´es manquantes et la restructuration de donn´ees (Hathout et Namer, 1998; Gardent et al., 2006). Comme plusieurs propri´et´es apparaissent dans plusieurs classes, la d´efinition d’un mˆeme ensemble d’op´erations peut ainsi se r´ep´eter dans plusieurs classes, ceci rendant cette approche p´enible pour l’encodage et la maintenance.

Nous proposons une approche plus globale, en utilisant pour l’ensemble des classes d’une mˆeme cat´egorie les deux ressources suivantes :

– un script unique de configuration couvrant toutes les classes ;

– une table des classes fournissant des informations non d´efinies dans les classes d’ori- gine.

Pour impl´ementer cette approche, nous avons d´evelopp´e en Java un outil g´en´erique nomm´e LGExtract2, qui fonctionne de la mani`ere suivante :

– il prend en entr´ee un script de configuration et une table des classes ;

– il analyse ce script `a l’aide d’un analyseur g´en´er´e par l’outil Tatoo (Cervelle et al.,

2006) ;

– il produit l’ensemble des entr´ees lexicales encod´ees dans les classes couvertes par la table des classes et dans le format d´ecrit par le script.

Les deux instructions principales interpr´et´ees par notre outil sont les suivantes : – define : l’information est encod´ee dans des objets linguistiques d´efinis dans le

script. Ils sont repr´esent´es par des listes et des structures de traits, qui peuvent ˆetre combin´ees. Ces objets d´efinissent par exemple, des constituants syntaxiques, des distributions de constituants syntaxiques, des constructions, des repr´esentations pr´edicat-argument, des transformations. Les objets peuvent ˆetre param´etr´es par les propri´et´es syntaxiques disponibles dans la table des classes ;

– prop : chaque propri´et´e de la table des classes est associ´ee `a un ensemble d’op´erations qui combinent les objets linguistiques entre eux. Ainsi, quand la pro- pri´et´eN0 =: Nhum est vraie pour une entr´ee donn´ee, un objet d´efinissant un groupe nominal humain est ajout´e `a la distribution de N0 (c’est-`a-dire l’argument 0 du pr´edicat).

Cela implique que chaque propri´et´e a une et une seule interpr´etation pour toutes les classes, si tel n’´etait pas le cas, notre outil fournirait des informations incorrectes.

Un objet linguistique est constitu´e de listes et de structures de traits. Une instance d’un tel objet est d´efinie par l’instruction define, en indiquant son type, son nom et sa valeur. Par exemple, les instructions ci-dessous instancient chacune un composant (comp) nomm´e N-hum, qui est un groupe nominal non humain, un groupe nominal humain (Nhum), une compl´etive au mode indicatif (Qu Pind), une compl´etive au mode subjonctif (Qu Psubj) ou une infinitive (V-inf W) :

define comp N-hum [cat="NP",nothum="true"]; define comp Nhum [cat="NP",hum="true"];

define comp completive [cat="comp",mood="ind"]; define comp completiveSubj [cat="comp",mood="subj"]; define comp inf [cat="inf"];

Ces diff´erents objets peuvent ˆetre combin´es : par exemple, la distribution d’un consti- tuant (const) est un ensemble de composants syntaxiques. Dans l’instruction ci-dessous, le constituant N0 contient la distribution de l’argument 0 :

2. Il est compos´e de 118 fichiers .java et est disponible sur le sitehttp://infolingu.univ-mlv.fr/

7.2 L’outil LGExtract

define const N0 [pos="0",dist=()];

avec dist() qui pourra contenir un groupe nominal humain (Nhum) et un groupe no- minal non humain (N-hum)3 :

comp=[cat="NP",nothum="true"],comp=[cat="NP",hum="true"]

Comme dans tout langage orient´e objet, un m´ecanisme d’h´eritage existe. Par exemple, une infinitive contrˆol´ee par l’argument 0 (objet inf0) h´erite des traits de l’objet inf (d´efinissant une infinitive) d´ecrit ci-dessus, et poss`ede un trait suppl´ementaire indiquant le contrˆole par l’argument 0 :

define comp inf0 inf[contr="0"];

Tous ces objets peuvent ˆetre param´etr´es avec les propri´et´es de la table des classes (no- tation @...@). Les param`etres sont de deux types : bool´een ou chaˆıne de caract`eres. Par exemple, le code ci-dessous d´efinit un pr´edicat verbal nomm´epredV, en l’ajoutant dans les informations lexicales li´ees `a l’entr´ee (lexical-info). Son lemme est la valeur de la propri´et´e<ENT>V(c’est-`a-dire la valeur lexicale d’une entr´ee) dans la classe correspon- dante. Le code d´efinit ensuite l’auxiliaire avoir (respectivement, ˆetre), o`u la propri´et´e Aux =: avoir (respectivement, Aux =: ˆetre) est encod´ee par sa valeur bool´eenne :

define lexical-info predV [cat="verb",verb=[lemma="@<ENT>V@"],aux-list=()]; define aux avoir {avoir="@Aux =: avoir@"};

define aux etre {^etre="@Aux =: ^etre@"};

Pour chaque entr´ee lexicale, les param`etres des objets linguistiques associ´es sont ´etablis comme suit. Chaque param`etre, correspondant `a une propri´et´e, poss`ede une valeur lexi- cale ou bool´eenne. Le programme parcourt d’abord la table des classes. Si la propri´et´e a une valeur constante sur toute la classe `a laquelle l’entr´ee appartient, la propri´et´e re¸coit cette valeur. Si la valeur de la propri´et´e est variable selon les entr´ees lexicales (la valeur de la propri´et´e est o pour la ligne correspondant `a cette classe), le programme r´ecup`ere la valeur de la propri´et´e de cette entr´ee dans la classe concern´ee. Par exemple, le verbe alarmer appartient `a la classe 32H, qui contient les verbes transitifs avec sujet humain : @<ENT>V@est donc remplac´e par la valeur lexicalealarmer, ce qui permet de savoir de quel lemme il s’agit pour cette entr´ee. La propri´et´eAux =: avoir est cod´ee + dans la table pour ce verbe : @Aux = : avoir@est remplac´e par true. En revanche, la propri´et´eAux =: ˆetre est cod´ee −, donc le programme ne r´ecup`ere pas cette information (voir plus loin). Les trois objets param´etr´es montr´es ci-dessus deviennent alors les deux objets suivants pour cette entr´ee :

define lexical-info predV [cat="verb",verb=[lemma="alarmer"],aux-list=()]; define aux avoir {avoir="true"};

3. Nous verrons plus loin que cela est obtenu grˆace `a l’op´eration d’ajout : add N0-hum in N0.dist ;

Ainsi, si une contradiction survient entre la table des classes et une classe particuli`ere, la priorit´e est donn´ee `a l’encodage de la table des classes.

Pour chaque entr´ee lexicale, le programme peut ensuite appliquer des op´erations pour chaque propri´et´e de la table des classes `a ces objets lexicalis´es, avec l’instruction prop. Il y a seulement un type d’op´eration : l’ajout (add) d’un objet `a un autre. Par exemple, l’ajout d’une paire attribut-valeur ou d’une liste dans une structure de traits. Ces op´erations sont ind´ependantes de leur ordre d’application, c’est-`a-dire qu’elles sont non destructrices et ne d´ependent pas les unes des autres. Ainsi, lors de l’insertion d’une paire attribut-valeur (a,v) dans une structure de traits, si une autre valeur ov pour l’at- tribut a existe d´ej`a, la nouvelle valeur est une disjonction de v et ov. C’est pourquoi l’op´eration est dite non destructrice. Les listes sont en fait des ensembles car le r´esultat des deux additions doit ˆetre ind´ependant de leur ordre d’application. Avant d’ins´erer un nouvel ´el´ement dans une liste, le programme v´erifie s’il existe ou non. S’il existe, il n’est pas ins´er´e. Par exemple, le code suivant indique que, si la propri´et´eN0 =: Nnr(signifiant que N0 est un groupe nominal libre, une compl´etive ou une infinitive) est cod´ee + , le programme ajoute les objets N-hum, Nhum, completive, completiveSubj et inf `a la distribution de N0 (N0.dist) et ins`ere N0 dans la liste des arguments (args) :

prop @N0 =: Nnr@{ add N0 in args;

add N0-hum in N0.dist; add N0hum in N0.dist; add completive in N0.dist; add completiveSubj in N0.dist; add inf in N0.dist;

}

Si la propri´et´e est cod´ee − (que ce soit dans la table des classes ou dans la table), aucune op´eration n’est r´ealis´ee. En effet, pour chaque entr´ee, seules sont effectu´ees les op´erations concernant les propri´et´es accept´ees par l’entr´ee. C’est ce qui permet dans l’exemple pr´ec´edent d’ajouter dans le lexique (dans la liste aux-list de predV) l’objet param´etr´e avoir=”@Aux = : avoir@”, sans le faire pour ˆetre=”@Aux = : ˆetre@”, avec le code suivant :

prop @Aux =: avoir@{

add avoir in predV.aux-list; }

prop @Aux =: ^etre@{

add etre in predV.aux-list; }

Le lexique g´en´er´e est au format XML. Les ´el´ements et attributs XML peuvent ˆetre mis en correspondance dans le script avec les objets linguistiques. Ce lexique XML ´etant quasiment illisible par un humain, une version texte compress´ee a ´et´e ´egalement d´evelopp´ee (voir les exemples de la section 7.3).

Documents relatifs