Programmation pour le TAL

Extraction de triplets syntaxiques : gestion des structures de données

Construction des objets Dépendances Syntaxiques

Dans les premières étapes, vous affichiez les triplets syntaxiques extraits dans la console. Il va désormais vous falloir créer, pour chaque triplet extrait, une instance de SyntacticDependency, et stocker, pour une phrase donnée, l'ensemble de ces instances dans l'objet ArrayList de DependenciesBuilder (dependencies) : dans chacune des méthodes lookForXXX, vous pouvez continuer à afficher dans la console les relations trouvées si vous le souhaitez, ou commenter l'affichage. Mais il vous faut désormais créer pour chaque triplet une instance de SyntacticDependency et l'ajouter à dependencies.

On illustre ci-dessous l'analyse de la phrase : » La programmation et la modélisation épuisent les étudiants endurants mais néanmoins fourbus. » dont Talismane donne l'analyse suivante :

      1	La	la	DET	DET	n=s|g=f	2	det	2	det
      2	programmation	programmation	NC	NC	n=s|g=f	6	suj	6	suj
      3	et	et	CC	CC		2	coord	2	coord
      4	la	la	DET	DET	n=s|g=f	5	det	5	det
      5	modélisation	modélisation	NC	NC	n=s|g=f	3	dep_coord	3	dep_coord
      6	épuisent	épuiser	V	V	n=p|t=P,S|p=3	0	root	0	root
      7	les	les	DET	DET	n=p	8	det	8	det
      8	étudiants	étudiant	NC	NC	n=p|g=m	6	obj	6	obj
      9	endurants	endurant	ADJ	ADJ	n=p|g=m	8	mod	8	mod
      10	mais	mais	CC	CC		9	coord	9	coord
      11	néanmoins	néanmoins	ADV	ADV		12	mod	12	mod
      12	fourbus	fourbu	ADJ	ADJ	n=p|g=m	10	dep_coord	10	dep_coord
      13	.	.	PONCT	PONCT		12	ponct	12	ponct
    

Les diagrammes d'objets ci-dessous (que vous devriez faire !) ci-dessous illustrent la construction des structures de données à mesure de l'analyse de la phrase (i.e. à mesure de l'exécution de votre programme). En effet, la relation d'agrégation entre l'objet "sentence" de type Sentence et les objets de type Token se matérialise dans l'implémentation par le fait que ces tokens sont indexés dans le tableau "tokenList" (de type Token[]) de "sentence".
De la même manière, la relation "extrait" qu'il existe entre "depBuilder" et les différentes instances de SyntacticDependency que vous aurez construites matérialise le fait que, dans l'implémentation, ces instances de SyntacticDependency seront stockées dans (réféfencées par) l'ArrayList "dependencies" de "depBuilder".
Enfin, la représentation d'une relation "coordonné à" entre deux instances de Token se matérialiase dans l'implémentation par le fait qu'un des deux tokens est référencé dans l'ArrayList "coordinates" de l'autre token.

Après exécution de Sentence sent = reader.getSentence(); :

Après exécution de depBuilder.setSentence(sent);

Après exécution de depBuilder.lookForNmodAdj();

Après exécution de depBuilder.lookForSuj();

Recherche des coordonnés

On souhaite chercher quels sont les tokens coordonnés à d'autres tokens pour deux raisons :

Il s'agit d'une part de créer une nouvelle instance de SyntacticDependency (ou plutôt d'IndirectDependency) :


Il s'agit ensuite d'enregistrer que tok5 est coordonné à tok2 et pourquoi pas, que tok2 est coordonné à tok5 (ce sera à vous de décider ce qui est souhaitable : si tokC1 et tokC2 sont coordonnés, vaut-il mieux seulement ajouter tokC1 à la liste de coordonnés de tokC2, ou ajouter également tokC2 à la liste de coordonnés de tokC1 ?). Il vous faut pour cela ajouter dans la classe Token un moyen de stocker, pour un token donné ses tokens coordonnés (également des objets de la classe Token) :


Ainsi, dans la méthode lookForCoords(), lorsque vous trouvez qu'un token tokDep est coordonné à une token tokGov, non seulement vous allez créer une instance de type SyntacticDependency qui aura comme gouverneur et comme dépendant tokGov et tokDep, mais vous allez également ajouté tokDep à la liste des coordonnés de tokGov et tokGov à la liste des coordonnés de tokDep.

Ajout de tok2 à la liste des coordonnés de tok5 (par l'instruction tok5.addCoord (tok2);) :

Puis, éventuellement, ajout de tok5 à la liste des coordonnés de tok2 :

Ainsi, remis dans le diagramme d'objets global, l'enchaînement de l'exécution de la méthode lookForCoords(), lorsqu'elle itère sur tok5, est le suivant :




Puis, (un peu plus tard...) la méthode lookForCoords() itère sur tok12. Je vous laisse dérouler l'algortithme et compléter les diagrammes d'objets qui suivent.

Retour page U.E. ]

Mention légale ]