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
De la même manière, la relation "extrait" qu'il existe entre "depBuilder"
et les différentes instances de
Enfin, la représentation d'une relation "coordonné à" entre deux instances de
Après exécution de
Après exécution de
Après exécution de
Après exécution de
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
Ajout de tok2 à la liste des coordonnés de tok5 (par l'instruction
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.