:: Enseignements :: Master :: M2 :: 2007-2008 :: Traitement Automatique des Langues ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | 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.
© Université de Marne-la-Vallée