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é ?