:: Enseignements :: Master :: M2 :: 2007-2008 :: Traitement Automatique des Langues ::
[LOGO]

Mots, textes et moteurs de recherche


Ce TP sera consacré à l'étude de la fréquence des mots dans un grand corpus. Nous verrons aussi l'apport de l'intégration d'un module de racinisation à ces statistiques. Enfin, nous réaliserons un petit moteur de recherche basé sur le modèle à espaces vectoriels.

Ressources

Pour cette séance, vous avez à disposition une archive comprenant une collection de dépêches Reuters. Cette collection de textes bruts a été extraite automatiquement de la collection Reuters-21578. La liste des textes est donnée dans le fichier doc-list.lst se trouvant dans le répertoire principal de la collection. Attention au format d'une ligne de ce fichier : il peut y avoir deux champs !

Exercice 1 - Statistiques sur les mots

  • Ecrire une fonction tokenize(text) qui prend comme paramètre un nom de fichier text et retourne la liste des token-mots de ce fichier. Pour faire cela, vous vous aiderez des modules Python de NLTK (cf. documentation).
  • Ecrire une fonction count_words(list_file) qui prend comme paramètre un nom de fichier list_file qui contient une liste de textes (soit un corpus). Elle retournera un dictionnaire qui, pour chaque mot du corpus, associe son nombre d'occurrences.
  • Ecrire une fonction sort_words(dic) qui prend comme paramètre un dictionnaire dic qui associe à des mots leur nombre d'occurrences dans un corpus. Elle retournera la liste des mots de ce dictionnaire, triés dans l'ordre décroissant en fonction de leur fréquence.
  • Créer un fichier au format gnuplot contenant un ensemble de points associant le rang d'un mot à sa frequence. A l'aide de gnuplot, construire le graphe dessinant la courbe décrivant la fréquence d'un mot en fonction de son rang.
  • Vérifier la loi de Zipf sur la collection Reuters.

Exercice 2 - Racinisation

  • Ecrire une fonction preprocess(file) qui prend comme paramètre un nom de fichier texte file. Cette fonction tokenisera le texte, mettra en minuscule et racinisera tous les token-mots. Elle retournera la liste des racines associées au token-mots du texte. Vous utiliserez le raciniseur utilisant l'algorithme de Porter implémenté dans NLTK.
  • Intégrer cette fonction à l'exercice précédent. Que constatez-vous?

Exercice 3 - Espaces vectoriels et moteurs de recherche

Cet exercice consiste à implémenter en Python un petit moteur de recherche à l'aide du modèle à espaces vectoriels. La base de documents à indexer est la collection Reuters fournie pour le TD. Votre implémentation comprendra:
  • un module d'indexation de la collection (construction de l'index et des vecteurs de termes)
  • un module d'application d'une requête à cette base.
Pour cela, vous définirez deux classes:
  • textVector qui représente un document ou une requête sous la forme d'un vecteur dans l'espace des termes. Les poids dans le vecteur seront calculés par la mesure TF.IDF,
  • textCollection qui représente une collection de textes à laquelle on peut appliquer une requête.

Exercice 4 - Algorithme pseudo-feedback

Implémenter l'algorithme pseudo-feedback vu en cours.