1 Indexation des Films

Transcription

1 Indexation des Films
IG5
TP TILE – Introduction à la Recherche D’information
2014
TP -TILE
L’objectif de ce TP est d’apprendre les bases du fonctionnement d’Apache Lucene, un
moteur de recherche. Il est notamment intégré dans le paquet ElasticSearch utilisé par Foursquare
ou encore SoundCloud.
Lors de ce TP vous devrez réaliser un moteur de recherche de films :
Avant de commencer le TP, il est nécessaire de télécharger le paquet suivant :
http://www.lirmm.fr/~servajean/TP_IG5.zip
Afin de réaliser chacune des étapes, vous pouvez vous aider de la documentation de
Lucene en ligne : http://lucene.apache.org/core/4_0_0/
1 Indexation des Films
Cette première étape consiste à indexer tous les films présents dans le fichier
« movies.dat ».
L’indexation dans Lucene se fait de la manière suivante :
Directory directory = new RAMDirectory();
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_43);
IndexWriterConfig config=
new IndexWriterConfig(Version.LUCENE_43, analyzer);
IndexWriter iwriter = new IndexWriter(directory,config) ;
Field f = new Field("title", « star wars », TextField.TYPE_STORED);
Document doc = new Document();
doc.add(f);
iwriter.addDocument(doc); //on indexe le document a ce niveau
iwriter.close();
Dans notre cas de figure, un document (film) se compose de deux champs : le titre et le genre.
-
À quoi sert le champ TextField.TYPE_STORED ?
Que veut dire RAMDirectory ?
IG5
TP TILE – Introduction à la Recherche D’information
2014
2 Recherche des films
Cette seconde étape consiste à exploiter l’indexation précédemment réalisée afin de trouver
les films les plus pertinents par rapport à une requête.
Dans Lucene, la recherche se fait de la manière suivante :
Query q = parser.parse(« star wars »);//creation de la requete
ScoreDoc[] hits = isearcher.search(q, null, 10).scoreDocs;//Il s’agit de
la recherche en question. Les resultats sont stockes dans le tableau hits.
Si on souhaite récupérer le titre d’un film dans le tableau hits, cela s’effectue de la manière
suivante :
Document hitDoc = isearcher.doc(hits[i].doc) ; //Le document hitDoc contient
tous les champs TYPE_STORED dont le titre.
3 Suggestion de requêtes/termes clés
En vous aidant de la documentation en ligne et du code déjà réalisé, vous devez proposer
un outil de recommandation de requête :
Si la requête courante possède des résultats, on ne fait rien. Par contre, si il n’y a aucun
résultat, on propose une autre requête.
Par exemple, si je tape la requête « Staar Warrs », le moteur de recherche ne trouvera
aucun résultat. Il doit alors proposer une nouvelle requête « Star Wars ».
Dans un premier temps, suggérer des requêtes en utilisant l’outil de correction de Lucene
(Spell).
4 Question Bonus
Tenir compte uniquement de la requête pour récupérer des contenus peut parfois s’avérer
extrêmement limitant. Par exemple du fait d’un film très peu populaire qui match mieux la requête
qu’un film très populaire.
Pour résoudre ce problème, nous allons tenir compte de la popularité de chacun des films.
Pour cela, il est demandé de télécharger le paquet MovieLens complet :
http://files.grouplens.org/datasets/movielens/ml-100k.zip
Dans ce paquet, un fichier contient tous les ratings soumis par 1 000 utilisateurs à propos
des films qu’ils ont regardés.
Le but de cette question est, lors de l’indexation, de tenir compte de la popularité de
chacun des films.
Comment tenir compte de la popularité ?
Comment calculer la popularité ?