C’est dans ta tête » Mise à l’index

23 février 2007

Mise à l’index

Il y a quelques temps, j’ai créé un index pour Trinités. C’est un moteur de recherche capable d’indiquer à quelles pages de quels ouvrages de la gamme, papier comme électronique, vous trouverez un mot donné. Pratique pour les auteurs quand il s’agit, par exemple, de retrouver toutes les mentions à Mordred pour pas se contredire d’un livre à l’autre. Le principe de fonctionnement est simple, mais nécessite d’avoir à disposition les pdf de toute la gamme.

Si un éditeur le souhaite, je peux mettre à sa disposition un outil sembable pour une de ses gammes.

Et vous, quelle gamme vous aimeriez voir indexée ?

Pour les informaticiens parmis vous qui êtes curieux de savoir ce qui se trouve sous le capot, voici le principe de fonctionnement.

C’est d’abord un projet d’intégration : j’ai simplement adapté l’existant. L’idée de départ m’a été soufflée par Loïc Péron, des Héritiers de Babel. Mon principal problème est que les outils existant indexent les documents, pas les pages individuelles. Pour s’en sortir, il suffit de créer un document pour chaque page à indexer.

La première phase consiste à créer autant de fichiers .txt qu’il y a de pages dans chaque ouvrage. J’utilise pour cela l’utilitaire pdtotext. Une commande DOS automatise tout ça. Par exemple, pour un Bréviaire de Trinités :

extractBreviaire.bat :

for %%p in (2,3,4,5,6,7) do pdftotext -f %%p -l %%p %1 pages\%1.p%%p.txt

où “2,3,4,5,6,7″ est la liste des pages à indexer. Je n’indexe pas la première, c’est inutile. De la même façon, je n’indexe pas les en-têtes de chapitre dans le Livre I. Je lance cette commande pour tous les Bréviaires :

extractAll.bat :


start /b for %%f in (*Breviaire*.pdf) do extractBreviaire %%f

J’exploite ensuite le moteur d’indexation Lucene. Il propose un outil pour indexer automatiquement le contenu d’un répertoire. Je place donc tous mes fichiers .txt dans le même répertoire, et j’adapte un peu l’outil pour qu’il déduise du nom du fichier le nom de l’ouvrage concerné et surtout le numéro de la page. Je procède à quelques ajustement pour prendre en compte les spécificités du français : les accents et les mots courants à ne pas indexer, et quelques noms propres un peu particutliers comme Jibr’il. Une fois le programme lancé, j’ai quelques secondes plus tard un beau fichier d’index qui contient tout ce dont j’ai besoin. Je n’ai plus qu’à proposer une interface web.

L’hébergeur des 12 singes m’impose de la développer en PHP. C’est là que le framework Zend vient à ma rescousse. Il propose une librairie PHP de lecture des fichiers d’index Lucene. Quelques problèmes de compatibilité plus tard, j’ai un premier résultat probant. Reste à trier les réponses par ordre de parution des ouvrages, puis présenter les pages trouvées dans l’ordre croissant.

L’index Trinités

Et voilà ! C’est un ensemble plutôt artisanal, qui a le mérite de fonctionner. J’ai détecté quelques oublis dans l’indexation cependant. Des mots que je sais pertinemment trouver dans 3 pages et qui n’apparaissent que dans 2. Un mystère à éclaircir, lorsque j’aurai un moment.





Un mot à dire ?




Safari hates me



C'est dans ma tête ?

Oui, c’est dans ta tête ces histoires de jeux de rôles, de magiciens, de Nephilim, de Trinités, d’elfe, de dragons, etc. Par chance, c’est aussi dans la mienne. C’est dans ta tête est un site de MJ, pour les MJ !