Programmation pour le TAL


Lectures

Les deux articles ci-dessous traitent d'analyse distributionnelle effectuée avec des modèles fréquentiels. Il vous est demandé de lire essentiellement ce qui concerne l'extraction des relations de dépendances syntaxiques et leur "normalisation" :

Objectif de l'exercice

Import des .jar

Documents à rendre et date limite


Étape 1



Étape 2 : traitement des fichiers comportant plusieurs phrases

Étape 3 : autres triplets


Note : vous verrez que vous allez produire des portions de code récurrentes : pensez à factoriser ! Par exemple à chaque fois que vous voulez accéder au token qui gouverne un token donné, pas la peine de vous poser la question à chaque fois "est-ce que je dois ajouter ou retrancher un à l'index de la phrase pour avoir l'indice dans le tableau ?" : écrivez une méthode une fois pour toute.
De la même manière, évitez, à chaque fois que vous voulez tester si un token est un verbe, d'écrire if (token.startsWith "c'est quoi déjà les étiquettes pour les verbes dans Talismane ?"), mais écrivez une méthode public boolean isVerb () qui renvoie true si un token est un verbe et faux sinon. Etc.

Étape 4 : stockage des données dans des listes

Jusqu'ici, vous affichiez dans la console les relations de dépendance que vous trouviez au fur et à mesure. À partir de maintenant, il va falloir se donner les moyens de pouvoir manipuler toutes les relations de dépendance d'une phrase, notamment pour la "distribution des relations" (cf. articles de la section "lecture" ci-dessus et page objectif du projet).

Par exemple, dans la phrase "les puces et les patrons ponctuationnels constituent les marqueurs [...]", vous n'aurez pas de mal à repérer le triplet <V:constituer; suj; NC:puce>. Depuis l'étape 3; vous repérez également le triplet <NC:puce; coord/et; NC:patrons>. Mais il faudra également repérer le triplet <V:constituer; suj; NC:patrons>. Pour cela, vous allez :
  1. stocker la liste des dépendances

    Note : dans ce diagramme, la représentation de la relation d'agrégation est redondante avec la mention du membre dependencies dans la classe DependenciesBuilder. En toute rigueur, il faudrait choisir de représenter l'une ou l'autre.

  2. chercher et stocker la liste des coordonnés
    Note : dans ce diagramme, seule la relation d'agrégation réflexive sur Token est représentée : on n'a pas de détail sur l'implémentation, en Java, de cette relation au sein de la classe (e.g. tableau statique, liste, ou autre). Ça n'est pas nécessaire pour réfléchir à l'architecture globale du système. Ça n'est pas nécessaire non plus pour l'utilisateur de la classe. Pour le concepteur de la classe Token en revanche, cela peut avoir un intérêt.

    Le diagramme ci-dessous (qui comporte des redondances) récapitule les deux précédents.

Aide : représentation sous forme de diagrammes d'objets des structures de données lors du déroulement de la méthode lookForCoords().

Étape 5 : distribution des relations

Une fois que vous avez repéré et stocké les relations de dépendance syntaxique et que vous avez repéré, pour chaque token, l'ensemble de ses coordonnés, vous pouvez vous lancer dans la "distribution des relations". Ne cherchez pas à tout faire en même temps !&nbso;:

C'est une bonne idée de s'aider de diagrammes d'objets : pour une relation donnée et une paire de token coordonnés donnée, représentez vos objets au stade initial, après repérage des coordonnés, puis après distribution de la relation.
Aide : description des étapes et illustration.

Étape 6 : liste de fréquences des relations de dépendances

Jusqu'ici, vous écriviez dans la console les triplets extraits au fur et à mesure, ou à la fin de l'extraction de toutes les dépendances d'une phrase. C'est ce qu'il vous faut continuer à faire pour produire les sorties attendues dans le format 1 décrit dans la page objectif du projet.
Pour obtenir le format 2, i.e. une table de fréquence des triplets pour l'ensemble du corpus, il faut procéder autrement. En effet, si vous traitez un corpus très volumineux, vous ne pouvez pas stocker l'ensemble des triplets (des objets Java les représentant) sous peine de saturer la mémoire. Une solution peut être de produire une sortie au format 1 (c'est-à-dire un fichier potentiellement très volumineux) et d'utiliser les outils Unix en ligne de commande pour générer une table de fréquence (sort |uniq -c|sort).
Mais nous allons réaliser l'ensemble des opérations en Java en utilisant un tableau associatif (cf. cours correspondant) dont les clés seront les représentations textuelles (String) des triplets et les valeurs les fréquences (Integer) de ces triplets.

Étape 7 : écriture des résultats dans un fichier

Pour produire les fichiers de triplets, il « suffit » d'écrire les résultats un fichier au lieu de les écrire dans la console. Il n'y a rien de plus à implémenter dans les classes Token ou SyntacticDependency : tout se joue dans DependenciesBuilder.

Remarques



Retour page U.E. ]

Mention légale ]