Accueil > Bases de données relationnelles et indexation du contenu > Indexer avec Lemur Indri

Indexer avec Lemur Indri

mercredi 9 septembre 2009, par Yoann Moreau

Marche à suivre pour la construction d’un index avec Indri, mise en avant des différents paramètres utilisables.

Introduction

Indri fait partie du projet Lemur, ce projet permet d’utiliser différents index, ici nous ne parlons que de Indri. Vous trouverez une comparaison des index de Lemur sur cette page.

Les trois programmes exécutables de Indri (IndriBuildIndex buildindex, IndriDaemon indrid, et IndriRunQuery runquery) acceptent leurs paramètres aussi bien directement en ligne de commande qu’au travers d’un fichier XML dont la balise globale est nommée parameters.

Remarque : Indri est une partie indépendante du projet Lemur et peut être installé seul, mais si vous utilisez Lemur il faudra alors utiliser les programmes indribuildindex et indrirunquery au lieu de ceux cités ci dessus.

Premier essai

Un exemple simple de création d’index Indri sur un fichier HTML nommé Indri.html, on précise le type du fichier à indexer avec l’option corpus.class, et on doit également indiquer le chemin dans lequel sera créé l’index (un répertoire que l’on nomme index, il sera créé).
$ buildindex -corpus.path=./Indri.html -corpus.class=html -index=./index

Un répertoire "index" est créé. Voici le résultat de la commande ci dessus :
0:00 : Created repository ./index
Adding document to html as an indexed field
Adding docno to html as a forward indexed metadata field
0:00 : Opened ./Indri.html
0:00 : Documents parsed : 1 Documents indexed : 1
0:00 : Closed ./Indri.html
0:00 : Closing index
0:00 : Finished

Une fois l’index créé on peut exécuter une requête avec runquery.
$ runquery -index="index" -query="indri"

Le résultat affiché est le suivant :
-4.26268 ./Indri.html 0 142

La première colonne correspond au score du document, la seconde au document, la troisième à la position (en nombre de termes) où commence l’extent retourné (lors de la sélection de passages, sinon l’extent est en fait la totalité du document), et la quatrième à la position suivant la fin de l’extent.

Récupérer des passages

En plus d’afficher la liste des documents correspondants à une requête, il est possible d’afficher la liste des passages de documents correspondants à la requête, par exemple en se basant sur une hiérarchie XML. Pour pouvoir utiliser les balises XML dans nos requêtes, il va falloir indexer en spécifiant quelles balises utiliser.

Avant de recréer un index avec buildindex, il faut supprimer le répertoire créé au préalable, sinon le nouvel index n’écrasera pas l’ancien.

Pour indiquer qu’on veut indexer une balise on utilise l’option field.name :
buildindex -corpus.path=./Indri.html -corpus.class=html -index=./index -field.name=p

Dans l’affichage on peut remarquer la ligne suivante par rapport au premier essai :
Adding p to html as an indexed field

On peut ensuite faire appliquer la requête sur le contenu de chaque paire d’une balise donnée, et obtenir un résultat pour chaque passage (voir langage de requête Indri). On peut également demander à afficher le contenu complet du passage sur lequel est appliqué la requête avec l’option printPassages :
runquery -index="index" -query="#combine[p](cooperative)" -printPassages=true

Le résultat affiché est le suivant, d’abord la ligne normale avec le score, puis le texte complet contenu par les balises p :
- 3.41101 ./Indri.html 6 35
Indri is a new search engine from the <a href="http://www.lemurproject.org">Lemur</a> project ; a
cooperative effort between the <a href="http://ciir.cs.umass.edu">University of Massachusetts</a>
and <a href="http://www.lti.cs.cmu.edu">Carnegie Mellon University</a>
to build language modeling information retrieval tools

Sources

http://www.lemurproject.org/lemur/indexing.php
http://www.lemurproject.org/tutorials/begin_indexing-1.php
Le fichier README contenu dans l’installation de Indri 2.8