Beagle

Beagle est un logiciel libre destiné à indexer les données présentes sur un ordinateur, afin de faciliter les recherches sur divers types de documents. En cela, il est similaire à Google Desktop Search sous Windows ou Spotlight sous Mac OS X.

Il a été écrit en C# avec Mono et GTK+, de plus, il utilise un portage de Lucene en C# intitulé Lucene.Net en tant que moteur d’indexation.

Il est développé pour l’environnement graphique GNOME par des développeurs de Novell dont Dave Camp, Robert Love et Joe Shaw.

Texte disponible sous GNU Free Documentation License.

Lucene

Lucene LogoLucene est une interface de programmation écrite en Java qui permet d’indexer et de rechercher du texte. C’est un projet open source de la fondation Apache mis à disposition sous Licence Apache et également disponible sous Ruby, Perl, C++.

Lucene sous SourceForge

Lucene est un moteur de recherche libre mis en téléchargement sous SourceForge en mars 2000 par Doug Cutting, et publié sous licence publique générale limitée GNU.

L’annonce de son transfert sous Jakarta a été publiée en octobre 2001.[2]

Lucene in Action

Le projet Lucene vient d’abord d’un livre publié en décembre 2004, Lucene in Action (Lucene en action), écrit conjointement par Erik Hatcher, un des responsables des projets open source Ant, Lucene et Tapestry, et par Otis Gospodnetic, un membre actif du projet Apache Jakarta.

Jakarta Apache

Le 14 février 2005, Lucene effectue sa migration vers le projet Apache Jakarta. La base de connaissance formant le code source a été converti au contrôleur de version SVN.

Lucene à l’ApacheCon

Puis le lundi 12 décembre 2005, Grant Ingersol présente un cas d’étude en Java à l’ApacheCon US sur l’utilisation avancé des composants de Lucene[3] en donnant notamment des détails techniques sur le traitement du langage naturel [4].

OpenSolaris propulsé par Lucene

Chandan, ingénieur sécurité chez Sun, a annoncé le 15 juin 2005 sur son blog chandanlog(3C) qu’il avait écrit un moteur de recherche simple en Java, OpenGrok et que « Lucene (avait) été choisi pour être la bibliothèque logicielle servant de noyau de recherche et d’indexation pour le code source, après avoir pris en considération toutes une variété de moteur de recherche et d’outils. » Complété par Exuberant Ctags qui serait utilisé pour extraire les définitions des fichiers sources. Ceci, afin de gagner du temps et d’explorer les millions de lignes du codes sources d’OpenSolaris [5].

Wikipédia propulsé par Lucene
Jusqu’à avril 2005, la fonction recherche de l’encyclopédie wikipédia était indisponible durant les heures de pointes. Dans ces cas là, il était recommandé d’utiliser le moteur de recherche externe Yahoo! ou Google.

Cependant, depuis l’annonce de Brion Vibber dans la liste de diffusion Wikitech, il en est tout autrement[5]. Cette annonce a été également reporté par Michael Snow environ une semaine plus tard dans le Wikipedia Signpost (équivalent anglais du Wikimag) [6].

Kate a écrit le programme en décembre mais celui-ci à été mis aux oubliettes à cause de la machine virtuelle Java qui n’est pas un logiciel libre. Le programme a donc été plus tard totalement réécrit en utilisant GCJ.

Utilisation de Lucene

Indexation

Jusqu’à l’explosion de l’internet, la Classification décimale de Dewey était très efficace pour catégoriser des objets dans une bibliothèque. Cependant, comme la somme des données collectée est devenu trop vaste, il nous faut utiliser des moyens alternatifs et plus dynamique de trouver de l’information.

Au coeur de tous les moteurs de recherche se trouve le concept de l’indexation : en traitant les données brutes en leur donnant de multiples liens hautement efficient, on facilite la rapidité de la recherche. En fait, le concept est assez analogue à l’index terminologique que l’on trouve généralement à la fin d’un livre, qui permet de trouver rapidement les pages qui traitent d’un sujet donné.

Si l’on a besoin de couvrir un large champs de fichiers ou de trouver une chaîne de caractères précise dans un seul fichier, il ne faut pas scanner séquentiellement chaque fichier pour la phrase donné. Car, plus le nombre de fichiers est grand, plus longue est la recherche d’information. Bien plutôt, il vaut mieux établir un index des textes dans un format qui permette la recherche rapide, éliminant par la même la méthode séquentielle.

Recherche

La recherche est l’action de regarder des mots dans un index pour trouver des références à des documents lorsqu’ils apparaissent. La qualité d’une recherche est évalué par le positionnement et la pertinance des résultats. Cependant, il faut aussi prendre en compte d’autres facteurs qui entre en compte dans une recherche. La rapidité, tout d’abord, est un facteur déterminant pour traiter une vaste quantitée d’information. De même, pouvoir supporter des requêtes simples ou complexes, des interrogations de phrases, des caractères, les résultas de positionnement et de tri sont aussi importants qu’une syntaxe facile à prendre ne main pour entrer ces requêtes.

Classes d’indexation

  • IndexWriter – La classe IndexWriter est le composant central du processus d’indexation. Cette classe crée un nouvel index et ajoute des documents à un index existant. On peut se la représenter comme un objet par lequel on peut écrire dans l’index mais qui ne permet pas de le lire ou de le rechercher.
  • Directory – La classe Directory représente l’emplacement de l’index de Lucene. IndexWriter utilise une des implémentations de Directory, FSDirectory, pour crée son index dans un répertoire dans le Système de fichiers. Une autre implémentation, RAMDirectory, prend toutes ses données en mémoire. Cela peut être utile pour de plus petit indices qui peuvent être pleinement chargé en mémoire et peuvent être détruit sur la fin d’une application.
  • Analyzer – Avant que le texte soit dans l’index, il passe par l’Analyser. Celui-ci est une classe abstraite qui est utilisé pour extraire les mots importants pour l’index et supprime le reste. Cette classe tient une part importante dans Lucene et peut être utilisé pour faire bien plus qu’un simple filtre d’entrée.
  • Document – La classe Document représente un rassemblement de champs. Les champs d’un document représente le document ou les métadonnées associées avec ce document. La source originelle (comme des enregistrements d’une base de donnée, un document word, un chapitre d’un livre etc) est hors de propos pour Lucene. Les métadonnées comme l’auteur, le titre, le sujet, la date etc sont indexées et stockées séparément comme des champs d’un document.
  • Field – Chaque document est un index contenant un ou plusieurs champs, inséré dans une classe intitulé Field. Chaque champs (field) correspond à une portion de donnée qui est interrogé ou récupéré depuis l’index durant la recherche.

Classes de recherche

  • IndexSearcher – La classe IndexSearcher est à la recherche ce que IndexWriter est à l’indexation. On peut se la représenter comme une classe qui ouvre un index en mode lecture seule.
  • Term – Un terme est une unité basique pour la recherche, similaire à l’objet field. Il est une chaîne de caractère : le nom du champs et sa valeur. Notez que les termes employés sont aussi inclus dans le processus d’indexation.
  • Query – La classe Query est une classe abstraite qui comprend BooleanQuery, PhraseQuery, PrefixQuery, PhrasePrefixQuery, RangeQuery, FilteredQuery, et SpanQuery.
  • TermQuery – C’est la méthode la plus basique d’interrogation de Lucene. Elle est utilisé pour égaliser les documents qui contiennent des champs avec des valeurs spécifique.
  • QueryParser – La classe QueryParser est utilisé pour générer un décompositeur analytique qui peut chercher à travers un index.
  • Hits – La classe Hits est un simple conteneur d’index pour classer les résultats de recherche de documents qui apparaissent pour une interrogation donné. Pour des raisons de performances, les exemples de classement ne chargent pas depuis l’index tout les documents pour une requête donné, mais seulement une partie d’entre d’eux.

Bibliographie

  • « Introduction to Apache Lucene: Construction of Java Open Source Full Text Retrieval Systems » by Koshi Sekiguti ; Gijutsu-Hyohron Co, Ltd; (ISBN 4774127809)
  • « Lucene In Action » par Erik Hatcher et Otis Gospodnetić; Manning Publications; Decembre 2004; (ISBN 1932394281)(en)[7]
  • Manfred Hardt, Dr. Fabian Theis: « Suchmaschinen entwickeln mit Apache Lucene« ; Software & Support Verlag, Frankfurt/Main, Germany; Septembre 2004; (ISBN 3935042450)

Liens externes

Texte disponible sous GNU Free Documentation License.

Nutch

Nutch logoNutch est une initiative visant à construire un moteur de recherche open source. Il utilise Lucene comme bibliothèque de moteur de recherche et d’indexation. En revanche, le robot de collecte a été créé spécifiquement pour ce projet.

L’architecture de Nutch est hautement modulaire et permet à des développeurs de créer des plugins pour différentes phases du processus: récupération des données, analyse des documents, recherche, etc.

Doug Cutting est l’initiateur et le coordinateur de ce projet.

Il est entièrement développé en Java, mais les données qu’il manipule sont dans un format indépendant de tout langage de programmation. En juin 2003 a été présenté une version opérationnelle d’une démonstration de Nutch sur une base regroupant 100 millions de documents.

L’Oregon State University passe à Nutch

Depuis septembre 2004 l’Oregon State University remplace son pôle de recherche Googletm par Nutch. Cela lui permet de réaliser des réductions de coûts significatives et de promouvoir la transparence de ce moteur de recherche. Cette réduction est estimée à 100 000 $ par an selon l’Open Source Lab ([1]).

CreativeCommons.org s’appuye sur Nutch

Creative Commons inaugure en 2004 une beta version de son moteur de recherche qui parcoure le web à la recherche de texte, de son audio et de vidéo, indexant à cette date un million de page ; tout cela réutilisable librement selon les termes des licences mis à disposition sur leur site web. [2]

Leur moteur de recherche s’appuie le Resource Description Framework (RDF) qui utilise le méta-langage XML , standardisé par le World Wide Web Consortium (W3C).

Cette sortie coïncide avec celle du navigateur Web Mozilla Firefox dans sa version 1.0 rendant par la même possible la recherche de contenu libre.

Nutch rejoint Apache

En janvier 2005, Nutch est un projet de deux ans d’âge qui a d’abord été hébergé par Sourceforge et soutenu par sa propre organisation à but non lucratif. Cette organisation a été fondé dans le but de donner un copyright au projet et de pouvoir garder le droit de changer la licence. L’équipe a décidé que la licence Apache était la plus approprié pour Nutch et qu’il n’avait plus besoin de l’aide d’une organisation extérieure. Les dirigeants et les développeurs sont maintenant soutenus par la fondation Apache.

Après cinq mois d’incubation, Nutch devient un sous-projet de Lucene.

Évaluation du moteurrobot nutch

Publiée le 1er juin 2004, l’étude menée par Lyle Benedict présente une comparaison des résultats du célèbre Google et de son homologue libre Nutch dans le cadre restraint du site internet de l’Université de l’état de l’Oregon sur une base de 100 requêtes ([2]). Pour exemple, sur des notes allant de 0 à 10 où 10 est la meilleure note, elle a trouvé 28 requêtes par lequelles Nutch et Google ont obtenu la note maximale.

Contributions

Les contribution sont basées sur le mérite et le karma. Les contributeurs doivent s’inscire à une liste de diffusion pour savoir qui fait quoi et envoyer un court mail informant les autres de ce qu’ils vont faire. Quand le travail est fini, le bout de code est soumi à la liste de diffusion (ou attaché à un rapport de bug) afin que chaque contributeur puisse examiner sa qualité et sa pertinence ([3]).

Les critères d’acceptations sont:

  • une haute qualité (du code);
  • facilité de lecture;
  • facilité d’intégration;
  • cohérence avec les objectifs de Nutch.

Si tout est correct, le bout de code est inseré par les développeurs dans la base des sources et il devient partie intégrante de Nutch.

Articles connexes

Bibliographie

  • A Search Engine for Natural Language Applications. Michael J. Cafarella, Oren Etzioni. Proceedings of the 14th International World Wide Web Conference (WWW 2005).
  • Thwarting the nigritude ultramarine: learning to identify link spam. Isabel Drost and Tobias Scheffer. Proceedings of the 16th European Conference on Machine Learning (ECML 2005).
  • Query Chains: Learning to Rank from Implicit Feedback. Filip Radlinski and Thorsten Joachims. Proceedings of the ACM Conference on Knowledge Discovery and Data Mining (KDD), ACM, 2005.

Liens externes

  • (fr) Kelforum – Un moteur de recherche basé sur Nutch et PeerFactor.
  • (fr) Misterbot – Un moteur de recherche généraliste francophone basé sur Nutch.

Texte disponible sous GNU Free Documentation License.