Se lancer dans cette étape suppose que, après exécution des différentes méthodes lookForObj(), lookForSuj(), ... et lookForCoords() :
On se trouve donc dans une situation correspondant au dernier diagramme d'objets de l'aide sur les structures de données (où vous auriez complété le diagramme en ajoutant toutes les dépendances syntaxiques et tokens coordonnés).
Pour chaque triplet (instance de SyntacticDependency) extrait, il faut tester i) si son gouverneur a des tokens coordonnés et ii) si son dépendant a des tokens coordonnés. Le cas échéant, il faut créer une nouvelle instance de SyntacticDependency, qui soit une copie de la précédente, en remplaçant simplement l'un des tokens i.e. même label et même gouverneur (resp. dépendant)), en remplaçant le dépendant par son coordonné (resp. gouverneur). Il faudra ensuite ajouter les nouvelles instances de SyntacticDependency au tableau des dépendances déjà extraites ("dependencies"). Attention, lire la note 1 ci-dessous. Il vous faut donc (dans une méthode de DependenciesBuilder, que vous invoquerez après toutes les méthodes lookForXXX(), et après lookForCoords()) :
Selon les choix d'implémentation que vous aurez fait, seule l'une des deux possibilités décrites ci-dessus est pleinement satisfaisante. Vous me direz pourquoi.
En reprenant l'exemple "la programmation et la modélisation épuisent..." de l'aide sur les structures de données, cela donne l'enchaînement suivant.
Configuration initiale :
Création d'une nouvelle instance de SyntacticDependency
avec la même valeur de label ("suj") :
Affectation du gouverneur dépendant de la nouvelle instance de SyntacticDependency
(le même que celui de la dépendance syntaxique initiale) :
Affectation du dépendant (le token coordonné à la dépendance syntaxique initiale)
de la nouvelle instance de de SyntacticDependency :
Ajout de la nouvelle instance de SyntacticDependency à dependencies :
Note 1 : si vous obtenez une exception de type "ConcurrentModificationException",
relisez la fin du cours sur les listes et les itérations (bas de page).
Il vous faut utiliser un tableau temporaire.
Note 2 : commencez par faire simple !
Avant de vouloir traiter une phrase comme "La modélisation et la programmation procurent joie et bonheur",
commencez par :
<V:procurer;SUJ;NC:programmation>
) : <V:procurer;OBJ;NC:joie>
puis, après distribution de la relation, <V:procurer;OBJ;NC:bonheur>
<V:procurer;OBJ;NC:plaisir>
) : <V:procurer;SUJ;NC:modélisation>
puis, après distribution de la relation, <V:procurer;SUJ;NC:programmtion>