:: Enseignements :: Master :: M1 :: 2010-2011 :: Ingénierie Linguistique 1 ::
[LOGO]

Alignement mot à mot


Dans ce TP, nous allons écrire un petit programme qui aligne les mots.

Corpus

Pour ce TP, vous disposez d'un corpus parallèle anglais-français aligné en phrases, issu du corpus europarl. Il se situe dans le répertoire suivant: /home/ens/mconstan/corpus/europarl-light (pour téléchargement, ici). Il comporte deux sous-répertoires train et test contenant respectivement un corpus parallèle d'entrainement et un corpus parallèle de test. Chacun d'eux a un répertoire en (pour l'anglais) et un répertoire fr (pour le français). Chaque fichier du répertoire en correspond au fichier de même nom dans le répertoire fr (et vice-versa). Les blocs de textes de chaque ligne des paires de fichiers sont alignés un à un. Les fichiers sont encodés en utf-8.

Exercice 1 - Entrainement

Le but de cet exercice est de créer un index pour chaque langue qui pour chaque token-mot du corpus d'entrainement, associe la liste des phrases (identifiées par un numéro) dans lesquels il apparaît. L'index est une table de hachage (ou dictionnaire) ayant pour clé une chaîne de caractères et pour valeur associée un ensemble de nombres entiers. Pour cela, vous pouvez suivre les instructions suivantes (mais pas obligatoirement) :

  1. Ecrire une fonction tokenize qui prend une chaîne de caractères en paramètre et renvoie la liste de ses tokens-mots.
  2. Ecrire une fonction indexingFile qui prend comme paramètre un nom de fichier texte, un index et le numéro de la dernière ligne traitée. Elle cherchera à lire les lignes du fichier et pour chacune d'elles à compléter l'index. Elle retournera le nombre de lignes déjà traitées au total.
  3. Ecrire une fonction indexCorpus qui prend comme paramètres:
    • le chemin du répertoire du corpus d'apprentissage (i.e. entrainement)
    • les indexes pour l'anglais et le français
    Elle indexera les différents textes du corpus et mettra à jour les deux indexes.
  4. Ecrire une fonction saveIndex qui sauvegarde l'index placé en paramètre dans un fichier (Suggestion: utiliser le module pickle).

Exercice 2 - Alignement

Etant donné un texte aligné avec un autre (deux fichiers textes en paramètres), écrire un programme qui, pour chaque mot de la phrase en langue cible, associe (si possible) un mot en langue source. Vous implémenterez les deux méthodes vues en cours. Pour cela, vous pouvez suivre les instructions suivantes (mais pas obligatoirement):

  1. Ecrire une fonction loadIndex qui charge un index. Indication: utiliser le module pickle
  2. Ecrire une fonction dice qui calcule le coefficient de Dice pour deux mots passés en paramètres. Indication: le nombre de fois que ces deux mots cooccurent est la taille de l'intersection entre les ensembles associés aux deux mots dans les indexes. Le nombre d'occurrences d'un mot dans une langue est la taille de l'ensemble associé dans l'index.
  3. Ecrire une fonction alignBlocks qui prend deux textes (chaînes de caractères) et qui aligne ces deux textes par mots. Elle affiche l'alignement calculé. Implémenter la méthode du maximum (vue en cours).
  4. Ecrire une fonction alignFiles qui prend deux fichiers alignés par phrases en paramètres. Cette fonction alignera les mots des différentes lignes correspondantes.
  5. Reprendre cet exercice en implémentant la méthode "competitive linking algorithm" (vue en cours).