//chapitre("Consignes",5);?>
TP2 - Recherche d'information
Pour accéder au corrigé, ajoutez "correction" entre "TP2" et ".php" dans l'adresse de la page.
Le but de ce TP est de manipuler des documents sous la forme de vecteurs et d'implémenter un petit moteur de recherche.
Préliminaires
Pour cette séance, vous avez à disposition une collection de dépêches
Reuters
à cette adresse.
Le fichier
collection.lst contient la liste des textes de la collection.
Exercice 1 - Représentation d'un texte
question(); ?>Écrivez une classe Text
qui représente un texte ou une requête sous une forme vectorielle
(un dictionnaire Python qui a pour clés les token-mots du texte et pour valeurs leurs
nombres d'occurrences dans le texte).
Le texte se trouve soit dans un fichier soit dans une chaîne de caractères.
Son constructeur prend donc deux paramètres optionnels (par défaut
None) :
le nom du fichier texte et une chaîne de caractères.
Elle possède plusieurs méthodes :
-
getName() qui renvoie le nom du fichier (None si c'est une requête)
-
getWordTokens() qui renvoie l'ensemble des différents token-mots du texte
-
getWeight(word) qui renvoie la fréquence du token-mot word
-
cosine(t) qui renvoie le cosinus du texte avec un autre texte t.
Exercice 2 - Représentation d'une collection
question(); ?>Écrivez une classe TextCollection
qui représente une collection
de documents sous la forme d'une liste (de Text).
Son constructeur prend comme paramètre le nom du fichier définissant la collection.
Elle contient la méthode getTexts() qui renvoie la liste des textes.
Exercice 3 - Moteur de recherche
À partir des classes précédentes, vous allez écrire
un moteur de recherche simple qui lit en entrée standard les requêtes.
-
question(); ?>Écrivez une méthode search dans la classe
TextCollection, qui prend comme paramètres la requête
et le nombre N maximal de documents à renvoyer.
Elle renvoie la liste des documents triés par ordre décroissant
selon le degré de pertinence des documents par rapport à la requête.
Cette liste contient au maximum N textes et ces textes doivent
avoir un cosinus non nul avec la requête.
-
question(); ?>Utilisez cette méthode pour écrire un petit moteur de recherche simple (voir cours).
Exercice 4 - Bonus
- question(); ?>Optimisez le moteur de recherche en utilisant un index.
- question(); ?>Faites en sorte que le poids d'un token-mot dans un texte soit la mesure TF.IDF
vue en cours.
- question(); ?>Optimisez le tri des documents pertinents par rapport à une requête.