19 Projet Professionnel J2EE : Développement du moteur de recherche IFIND C.FALCOU-H.LAANAIT-D.ZAHAL Tuteur M.THOMAS Projet professionnel J2EE Développement du moteur de recherche IFIND
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
Projet professionnel J2EEDéveloppement du moteur de
recherche IFIND
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
Table des matières
1. Etat de l’art des technologies et algorithmes candidats.........4
1.1. Le système de recherche d’information (SRI).................4
1.2. Les composants d’un SRI.....................................5
1.2.1. Le modèle d’indexation...................................5
1.2.2. Le modèle de recherche...................................6
1.3. Les API de recherche d’information IR.......................8
1.3.1. Critères de choix (Source A Comparison of Open Source Search Engines : Christian Middleton, Ricardo Baeza-Yate)......9
1.3.2. L’API retenue...........................................11
1.4. API Lucene 3.1.............................................12
1.4.1. Le principe.............................................12
1.4.2. Les classes d’indexation................................12
1.4.3. Les classes de recherche................................13
2. Tableau des charges............................................14
3. Atelier génie logicielle.......................................15
3.1. Développement & Tests......................................15
3.2. Outils de modélisation.....................................15
3.3. Management de projet.......................................15
3.4. Gestionnaires de version & wiki............................15
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
4. Présentation de l’application Ifind Crawler....................15
4.1. Principe...................................................15
4.2. Digrammes..................................................15
5. Présentation de l’application Ifind Indexer....................16
5.1. Principe...................................................16
5.2. Digramme des classes.......................................16
5.2.1. Package org.esgi.ifind.indexer..........................16
6. Présentation de l’application IfindSearcher....................23
6.1. Principe...................................................23
6.2. Architecture...............................................23
6.2.1. Architecture générale.....................................23
6.2.2. Diagramme de classe.......................................24
6.2.3. Digramme de séquence......................................25
7. Présentation de l’interface de recherche IFIND.................26
8. Diagramme de GANT..............................................28
8.1. Decoupage par lot..........................................28
8.2. Decoupage par sous lot.....................................29
8.2.1. Sous lot HLT.1 – Etat de l’art des technologies et algorithmes candidats..........................................29
8.2.2. Sous Lot DZL.1 D.ZAHAL – Choix de l’atelier de génie logiciel.......................................................29
8.2.3. Sous lot CFU.1 C.FALCOU – Architecture logicielle du système à concevoir............................................29
8.2.4. Sous lot HLT.2 H.LAANAIT – Conception et développement Ifind Indexer..................................................29
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
8.2.5. Sous lot CFU.2 C.FALCOU – Conception et développement Ifind SearchEngine.............................................30
8.2.6. Sous lot DZL.2 D.ZAHAL – Réingénierie et développement Ifind Crawler..................................................30
8.2.7. Lot Test_Doc C.FALCOU – H.LAANAIT – D.ZAHAL – Test & Validation & Documentation.....................................30
1.Etat de l’art des technologies et algorithmescandidats
1.1. Le système de recherche d’information (SRI)
Le système de recherche d’information permet de chercher dans unebase documentaire l’information pertinente à un besoin exprimé parune requête utilisateur.
Un moteur de recherche WEB est une application permettant deretrouver des ressources (pages web, fichiers, images vidéosetc...), associées à des mots clés.
Le fonctionnement d’un moteur de recherche se décompose en troisparties principales :
- L’exploration: se fait à l’aide d’un Crawler:
Cette étape permet de parcourir le web à la recherche deressources pertinentes, l’exploration est lancée depuis une listede ressources pivot, et le crawler se charge de collecter les
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
documents à distance en parcourant récursivement tous leshyperliens qu’il trouve.
- L’indexation: Quand il s’agit de scanner des documents afin detrouver un mot clé ou une phrase, la recherche séquentielle peutêtre un moyen de recherche efficace mais cette dernière montrerapidement ses limites quand le nombre de sources collecté par lecrawler augmente considérablement. En effet le parcours d’un grandnombre de fichier de manière séquentielle devient rapidement unetâche très lourde et inadaptée, c’est là que l’indexation rentreen jeu.
Le processus d’indexation consiste à analyser les mots considéréscomme significatif afin de les extraire et les convertir dans unformat de données simple et rapide à requêter appelé Index,éliminant ainsi le lent processus de balayage séquentiel.
Dans un processus d'indexation une notion de filtrage estintroduit, cette dernière permet de spécifier une liste de motsnon significatifs “stoplist”, il s’agit des mots fonctionnels.
- La recherche: La dernière partie est celle de la recherche et dela restitution des résultats, lors de cette étape le moteurrecherche les mots clés de la requête dans l’Index afind’identifier les documents qui correspondent le mieux. la méthodela plus fréquemment utilisé est TF-IDF (Term Frequency - InverseDocument Frequency) , cette méthode de pondération permet demettre en relation le poids des mots dans une requête avec ceuxcontenus dans le document en créant des vecteurs de mots quipermettent de définir le coefficient de similitude.
1.2. Les composants d’un SRI
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
Document : Le document constitue l’ensemble de l’informationstockée, On distingue deux types de bases documentaires : lesréférothèques et bibliothèques.
Requêtes : la requête est l’expression du besoin en information,de l’utilisateur. Une requête peut être décrite soit par une listede mots clés, en langage naturel, ou encore par des expressionsbooléennes.
1.2.1. Le modèle d’indexation
Un modèle d’indexation défini l’ensemble des règles permettant larestructuration d’un document ou d’une requête. Ainsi lerésultat de l’indexation constitue le descriptif du document oude la requête, assorti à un poids il est ensuite stocké dans unestructure appelé « Index » qui peut être facilement interrogée.
L’indexation est une étape fondamentale dans la conception d’unSRI puisqu’elle est à l’origine de la constitution desreprésentants de documents qui sont susceptibles de s’apparieravec les requêtes des utilisateurs.
Le processus d’indexation passe par trois étapes fondamentales :
-Définition des mots de la Stop List :
Les termes fréquents tels que les articles, les propositions,doivent être explicitement omis. On forme alors ce qu’on appelle
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
une Stop List , c’est-à-dire une liste de termes qui sont toujoursomis.
-Troncature & lemmatisation
L’objectif de cette étape est d’éviter les variantesorthographiques qui se présentent souvent en fin du mot.
-Création de l’index inversé :
La dernière étape de l’indexation consiste en la création d’unestructure de données organisée facilement interrogeable, c’est cequi est appelé l’index inversé, ce dernier peut être défini commesuit : Donner pour chaque terme la liste des documents où il setrouve.
La complexité de recherche O(1)
La complexité d’insertion O(n)
1.2.2. Le modèle de recherche
Un modèle de recherche Permet d’associer une requête à l’ensembledes documents contenu dans le référentiel.
Un modèle de recherche d’information peut être décrit par lequadruple :
[D, Q, F, R(qi,dj)]
D : Ensemble des représentants de documents de la collection
Q : Ensemble de représentants des requêtes
F : Schéma du support théorique de représentation des documents,requêtes et relations associées
R(qi , dj ) : Fonction d’ordre associée à la pertinence
1.2.2.1. Le modèle booléen
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
Le modèle booléen représente la requête sous forme d’une équationlogique, ainsi les termes d’indexation sont reliés par desconnecteurs logiques ET, OU, NON.
1) x ET y : est vrai si et seulement si x et y sont vrais.
2) x OU y : est vrai si et seulement si x ou y, ou les deux, sontvrais.
3) x NON y : est vrai si et seulement si x est vrai et y est faux.
Un processus de recherche booléen traite une requête comme uneexpression logique. Si D est un document et T un terme, on définitl’expression R(D,t) comme étant vraie si le terme se trouve dansle document et comme fausse, s’il en est autrement.
Avantages:
Simplicité de la conception du modèle
Possibilité de structurer une requête avec des opérateurslogiques
Inconvénients:
Difficulté d’utilisation du modèle (complexe)
Difficulté d’inclure une pondération des termes
1.2.2.2. Le modèle vectoriel
Le modèle vectoriel peut être décrit comme suit. Pour chaquedocument D dans un ensemble, on compte le nombre d’occurrences duterme T (« TF» Term Frequency).
Cette vérification des occurrences forme un vecteur pour chaquedocument et l’ensemble des vecteurs forme une matrice.
Le TF-IDF (Term Frequency-Inverse Document Frequency) est uneméthode de pondération statistique qui permet d'évaluerl'importance d'un terme contenu dans un document, relativement àune collection.
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
Le facteur idf qui sert à tenir compte de la rareté relative decertains termes est défini par la formule idf=log(|D|/df) où |D|est le nombre de documents et df , le nombre de documents où unterme donné apparaît
Avantages:
Utilisation facile des modèles
Aptitude des modèles à bien fonctionner
Inconvénients:
Fondements purement empiriques : peu de fondementsthéoriques
1.3. Les API de recherche d’information IR
Une API IR, est une bibliothèque d’algorithme de recherched’information qui fournit des classes permettant d’implémenter uneapplication de recherche d’information.
Les API étudiées ci-dessous, sont exclusivement des API JAVA.
Lucene est une API de recherche d’inforamtion libre écrite enJava qui permet d'indexer et de rechercher du texte. C'est unprojet open source de la fondation Apache mis à disposition souslicence Apache. Il est également disponible pour les langagesRuby, Perl, C++, PHP.
MG4J (Managing Gigabytes for Java), est une librairie de rechercheen texte intégrale, ce n’est pas tout à fait une API IR, mais ellefournit des implémentations algorithmiques permettant de développéune API IR, c’est un projet open source développé dansl’université de milan,Italie.
Xapian est une API IR open source, diffusé sous licence GPL. Ilest écrit en C++, avec des extensions qui permettent de l'utiliserà partir de langages tels que Perl, Python, PHP, Java, Tcl, C#, etRuby.
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
Terrier (TERabyte RetrIEve) est une librairie de recherched’information développé en java au sein de l’université deGlasgow, c’est un projet open source permettant l’implémentationd’application de recherche d’information.
1.3.1. Critères de choix (Source A Comparison of Open Source SearchEngines : Christian Middleton, Ricardo Baeza-Yate)
Le choix de l’api IR est primordial, c’est de cela que dépend laqualité de l’indexation des documents, et la cohérence de larecherche.
Le choix d’une API IR est orienté par 4 facteurs principaux, quisont le temps d’indexation d’une collection de documents, lataille que les indexes crées occupent dans l’espace disque,l’utilisation des ressources matérielles, et enfin le temps quel’api met pour répondre à une requête utilisateurs.
(a) 1:HTML, 2:plain text, 3:XML, 4:PDF, 5:PS(b) 1:phrase, 2:boolean, 3:wild card, 4:Fuzzy(c) 1:C, 2:C++, 3:Java, 4:Perl, 5:PHP(d)
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
1.3.1.1. Le temps d’indexation
Pour la collection 750Mo, la durée d’indexation est comprise entre1 et 32 minutes. Puis, avec la collection 1.6GB, cette durée variede 2 minutes à 1 heure. Enfin, avec la collection 2.7Go, àl'exception d'Omega (Xapian), le temps, est compris entre 5minutes et 1 heure. Omega (Xapian) a montré un comportementdifférent de celui des autres API, puisque le temps d'indexationpour la plus grande collection a été de 17 heures et 50 minutes.
Les meilleurs temps d’indexation :
Lucene
MG4J
Terrier
1.3.1.2. La taille des index
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
Le tableau ci-dessus présente la taille de l'index créé par chacundes moteurs de recherche qui ont été en mesure d'indexer les troiscollections en un temps raisonnable. Nous pouvons observer troisgroupes: les Index dont la taille varie entre 25% -35%, un groupeutilisant 50% -55%, et le dernier groupe dont la taille de l’indexest supérieur à la taille de la collection.
25% à 30% : Lucene, MG4J
50% à 55% : Terrier
>50% : Xapian
1.3.1.3. L’utilisation des ressources matériels
Usage constant :
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
MG4J
Usage linéaire par rapport à la taille de lacollection :
Terrier
Lucene
1.3.1.4. Le temps de recherche
Après avoir soumis l'ensemble des requêtes (1-mot et 2-mots) (chaquesérie a consisté en 100 requêtes), nous avons pu observer le tempsmoyen de recherche pour chaque collection et le pourcentage derécupération. Sur la figure ci-dessus, nous présentons unecomparaison graphique du temps moyen de recherche de chaque moteurpour la collection 2.7Go.
Les plus rapides des moteurs de recherche sont Indri, IXE, Lucene,et XMLSearch. Puis MG4J, et Zettair.
Les meilleurs temps de recherche :
Lucene
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
MG4J
1.3.2. L’API retenue
Après les différentes études établies ci-dessus, il apparait quel’API Lucene permet l’indexation de grande collection de documentet cela en un temps très raisonnable, Lucene permet aussid’optimiser la taille de ses Index et de fait ne pas saturerl’espace de stockage disque.
L’API Lucene fournit aussi un moteur de recherche trèsperformant, qui permet de répondre à une requête utilisateur en untemps très convenable.
De plus, cette API dispose d’une communauté de développeurs etd’utilisateurs très importante, ce qui a permet à cettebibliothèque d’évoluer et de se positionner en quelques années entant que API phare de la recherche d’information.
1.4. API Lucene 3.1
1.4.1. Le principe
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
1.4.2. Les classes d’indexationIndexWriter
C’est la classe principale d’indexation, elle permet derajouter un Document à un Index.
Constructeur IndexWriter
IndexWriter(Directory d, IndexWriterConfigconfig)
Fermeture IndexWriter
IndexWriter.close()
Ajour d’un Document
IndexWrite.addDocument(Document d)
IndexWriter.updateDocument(Term t,Document d)
Directory
Représente l'emplacement de l'index de Lucene.
FSDirectory : Stockage physique.
RAMDirectory : Stockage en mémoire
Constructeur Directory :
FSDirectory.open(String DirIndex)
Analyzer
C’est la classe qui permet d’analyser et d’extraireles mots signifiants à indexer.
Constructeur Analyzer
FrenchAnalyzer(Version MatchVersion)
Document
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
La classe Document représente un rassemblement dechamps.
Constructeur Document:
Document()
Ajour d’un Field :
Document.add(Field f)
Field
Un Document est composé de champ (field). Chaque champ(field) correspond à une portion de donnée qui estinterrogé ou récupéré depuis l'index durant larecherche.
Constructeur Field :
Field(String name,String value,Field.Store store,Field.Index index)
1.4.3. Les classes de recherche
IndexSearcher
C’est la classe principale de la recherche, elle permetd’ouvrir un Index en lecture seule.
Constructeur IndexSearcher
IndexSearcher(Directory d)
Récupérer les documents requêtés
IndexSearcher.search (Query q, int nbResult)
Récupérer un document
IndexSearcher.doc(int idDoc)
Query
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
La classe Query est une classe abstraite qui comprendBooleanQuery, PhraseQuery, PrefixQuery,PhrasePrefixQuery, RangeQuery, FilteredQuery, etSpanQuery
Term
Un terme est une unité basique pour la recherche,similaire à l’objet field
Constructeur Term
Term(String name, String query)
2.Atelier génie logicielle
2.1. Développement & Tests
2.2. Outils de modélisation
2.3. Management de projet
2.4. Gestionnaires de version & wiki
3.Présentation de l’application Ifind Crawler
3.1. Principe
3.2. Digrammes
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
4.Présentation de l’application Ifind Indexer
4.1. PrincipeL’application Ifind Indexer est basée sur le framework Lucene 3.1,cette dernière permet d’indexer des documents de format différents(HTML, XML, DOC, DOCX, XLS, PDF…), et les stocker par la suitedans un répertoire.
iFind Indexer est une application de type SystemTray.
Sur un click droit de la souris, l’application affiche le menuprincipal :
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
-Start indexing service : Permet de lancer le processusd’indexation, en surveillant tout ajout de fichiers au répertoirede données à indexer, défini par l’utilisateur.
-Stop indexing service : permet d’arrêter le service d’indexationsi ce dernier est lancé.
-Configuration : permet d’afficher la fenêtre de paramètrage del’application, cette fenêtre est composée de trois onglets(Path,PageRank,Dmoz)
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
-Path : Cet onglet Permet à l’utilisateur de spécifier les cheminsd’accès au données et de suvegarde.
-Datas directory : Est le répértoire que l’application vasurveiller, afin d’indexer tous les nouveaux fichiers crées.
-Indexes destination : Est le chemin de suvegarde des index.
-PageRank : Cet onglet permet de definir l’affectation duPageRank, à une page html, il existe de strategie differente :
-Google PageRank : Cette methodologie ce base sur les serveursGoogle pour récupérér le PageRank d’une page, ainsi le PageRankd’une page lui est attribué lors de la création d’index.
-iFind PageRank : Cette option permet de calculé le PageRank d’unepage en se basant sur l’algorithme du PageRank suivant :
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))
- PR(A) le PageRank de la page A
- PR(Tn)le PageRank de la page Tn
- C(Tn) le nombre de liens émis sur la page Tn
- d tous les « votes » sont additionnés, mais pour en limiterl’importance, le total est multiplié par ce coefficientd’amortissement (0.85)
- 1 - d Un petit peu de « magie mathématique » qui permet degarantir que la moyenne des PageRank de l’ensemble des pages duWeb sera de 1.
Par ailleurs le PageRank iFind affecté à une page html, ne peutêtre calculé qu’à la fin du processus d’indexation, il sera lancévia le menu pricipale de l’application, par le bouton IfindDance : Calculate PageRank.
-Dmoz : Cet onglet permet de parser un fichier .rdf de type ODP(Open Directory Project), afin de l’intégrer dans une base dedonnées Mysql, ce qui simplifie l’exploitation des données qu’ilcontient.
-Test connection : Ce bouton permet de tester la connexion auserveur de base de données spécifié.
-Extract to Mysql : Si la connexion est établie au serveur de basede données, et si le fichier rdf spécifié dans le chemin Dmz Filename est valide, l’extraction de données débute.
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
-Le projet ODP, est un projet open source qui propose une basedocumentaire complète sur la déscription des sites web.
-L’application recherche la meta balise « description » dans lapage à indexer, si cette dernière est inexisatante une requête estalors envoyé à la base de données afin de récupérer ce champs.
4.2. Architecture générale
4.3. Digramme des classes
4.3.1. Package org.esgi.ifind.indexer
w atcher
pagerankdm oz
configuration
indexergui
Configuration D ire ctory W a tche r
savePathProperties()setIfindPr(in ifindpr : string)getIfindPr():stringsetG ooglePr(in googlepr : string)getG ooglePr():stringsetSqlPassword(in password : string)getSqlPassword():stringsetSqlU sernam e(in userNam e : string)getSqlU sernam e():stringsetSqlH ost(in hostNam e : string)getSqlH ost():stringsetD m ozPath(in dm ozFilenam e : string)getD m ozPath():stringsetIndexPath(in indexPath : string)getIndexPath():stringsetD ataPath(in dataPath : string)getD ataPath():stringgetInstance():C onfigurationC onfiguration()PR O PER TIES_D IR : string= "config/config.properties" historyPath : string= "config/history.ser"
isR un : booleanD irectoryW atcher(in fileR oot : File)run()watch(in file : File):booleanserializeH istoryM ap()getH istoryM ap():Long[1..*] onChange( in fi le : F ile )
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
4.3.1.1. Package org.esgi.ifind.indexer.gui
controller
view
indexer
System TrayViewSystem TrayView()init():booleanupdateG ui(in isStarted : boolean)getIndexerService():IndexerServiceinitIndexerService():IndexerServicegetIfindD anceItem ():M enuItem
indexerService
1
1
StopClickControllerStartClickController M onitorClickController
IfindD anceClickControllerExitClickControllerConfigClickController
M onitoringView
IndexerService
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
4.3.1.1.1. Package org.esgi.ifind.indexer.gui.controller
view
1
1
parent
1
1
parent
1
1
parent
1
1
parent
1
1
parent
0..1
*
configurationV iew
instance
0..1
*
M onitorClickController
StartClickController
StopClickController
System TrayView
ExitClickController
ConfigClickController
TestSqlClickController
Subm itPRClickController
Subm itPathClickController
Subm itD m ozClickController
ParseD m ozClickController
ConfigurationView
CancelPRClickController
CancelPathClickController
CancelD m ozClickController
Brow serFileClickController
Brow serClickController
M onitorC lickC ontroller(in parent : System TrayView)actionPerform ed(in arg0 : ActionEvent)
StartC lickC ontroller(in parent : System TrayView)actionPerform ed(in arg0 : ActionEvent)
StopC lickC ontroller(in parent : System TrayView)actionPerform ed(in arg0 : ActionEvent)
ExitC lickC ontroller(in parent : System TrayView)actionPerform ed(in arg0 : ActionEvent)
C onfigC lickC ontroller(in parent : System TrayView)actionPerform ed(in arg0 : ActionEvent)
actionPerform ed(in e : ActionEvent)TestSqlC lickC ontroller(in parent : D m ozTabView)
actionPerform ed(in e : ActionEvent)Subm itPR C lickC ontroller(in parent : PageR ankTabView)
actionPerform ed(in e : ActionEvent)Subm itPathC lickC ontroller(in parent : PathTabView)
actionPerform ed(in e : ActionEvent)Subm itD m ozC lickC ontroller(in parent : D m ozTabView)
actionPerform ed(in e : ActionEvent)ParseD m ozC lickC ontroller(in parent : D m ozTabView)
actionPerform ed(in e : ActionEvent)C ancelPR C lickC ontroller(in parent : PageR ankTabView)
actionPerform ed(in e : ActionEvent)C ancelPathC lickC ontroller(in parent : PathTabView)
actionPerform ed(in e : ActionEvent)C ancelD m ozC lickC ontroller(in parent : D m ozTabView)
actionPerform ed(in e : ActionEvent)BrowserFileC lickC ontroller(in parent : D m ozTabView)
actionPerform ed(in e : ActionEvent)BrowserC lickC ontroller(in parent : PathTabView, in id : integer)id : integer
0..1*
m onitoringV iew
*
0..1
instance
parent*
0..1
parent
*
0..1
parent*
0..1
parent *0..1
parent* 0..1
parent*
0..1
parent*
0..1
parent
*
0..1
parent*
0..1
parent* 0..1
M onitoringView
PageRankTabView
D m ozTabView
PathTabView
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
4.3.1.1.2. Package org.esgi.ifind.indexer.gui.view
instance0..1
*
instance0..1
*
pathTabView
*
0..1
pageRankTabView
*
0..1
dm ozTabView
*
0..1
ConfigurationView
PageRankTabViewD m ozTabViewPathTabView
M onitoringView
getInstance():C onfigurationViewC onfigurationView()serialVersionU ID : integer= 1L
razTextPath()saveTextPath()PageR ankTabView()serialVersionU ID : integer= 1L
getBtnParseR df():JButtonraz()save()getTextSqlPassword():stringgetTextSqlU sernam e():stringgetTextSqlH ostNam e():stringgetTextD m ozPathNam e():stringsetTextSqlPassword(in txtPassword : string)setTextSqlU sernam e(in txtU sernam e : string)setTextSqlH ostNam e(in txtH ost : string)setTextD m ozPathNam e(in txtPath : string)D m ozTabView()serialVersionU ID : integer= 1L
razTextPath()saveTextPath()setTextD ataPathNam e(in txtPath : string)setTextIndexerPathNam e(in txtPath : string)PathTabView()serialVersionU ID : integer= 1L
setTextAreaM onitoring(in s : string)getInstance():M onitoringViewM onitoringView()serialVersionU ID : integer= 1L
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
4.3.1.2. Package org.esgi.ifind.indexr.indexer
parser
0..1*item
0..1
*
indexer
dm oz
configuration
pagerank
gui
w atcher
Thread
Item s
Indexer
IndexerService
indexData(in f : File, in url : string, in extension : string, in pageRank : real):booleancreateIndexW riter(in extension : string):booleanIndexer()doc : undefineddirectory : undefinedconfW riter : undefinedfrAnalyer : undefinedwriter : undefinedindexPath : stringserialVersionUID : integer= 1L
serialVersionU ID : integer=1LdataPath : stringisR un : boolean= trueIndexerService()run()runIndexer(in file : File)stopIndexer()
nam e : stringurl : stringtitle : stringbody : stringdescription : stringkeywords : stringauthor : stringItem s()getAuthor():stringsetAuthor(in author : string)getKeywords():stringsetKeywords(in keywords : string)getNam e():stringsetNam e(in nam e : string)setU rl(in url : string)setTitle(in title : string)setBody(in body : string)setD escription(in description : string)getUrl():stringgetTitle():stringgetBody():stringgetDescription():string
iFindPR
*
0..1
TikaParserD m ozService
Configuration
IfindPageRank
G ooglePageRank
System TrayView
D ir e cto r y W atch e r
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
4.3.1.2.1. Package org.esgi.ifind.indexer.indexer.parser
*
0..1instanceTikaParser
C ontentHandler< < inte rface> >
TikaParser()getInstance():TikaParsergetItem s(in f : File):Item s
4.3.1.3. Package org.esgi.ifind.indexer.pagerank
gui
indexer
0..1*
prService
*
0..1instance
0..1*
pageRank
ThreadG ooglePageRank
IfindPageRank
PageRankService
getPR (in url : string):integergetInstance():G ooglePageR ankG ooglePageR ank()
getR everseValues(in reverseKey : string, in m ap : [1..*] ArrayList):string[1..*] setInboundM ap(in m ap : [1..*] ArrayList)getO utboundLinks(in pageId : string):string[1..*] getInboundLinks(in pageId : string):string[1..*] generateParam List(in pageId : string):booleangetM ultiFactor(in sourceId : string, in linkId : string):realgenerateM atrix():real[1..*] rank(in pageId : string):realrankU rls():D ouble[1..*] setO utboundM ap(in url : string, in file : File)getO utboundM ap():ArrayList[1..*] serializeO utboundM ap()IfindPageR ank()param s[1..*] : string= new ArrayList< String> ()outboundPath : string= "config/outbound.ser"D AM PING _FAC TO R : real= 0.85
PageR ankService(in parent : System TrayView)run()
indexer
*
0 ..1
parent
*
0 ..1
System TrayView
Indexer
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
4.3.1.4. Package org.esgi.ifind.indexer.dmoz
0..1
*
ifindSearcherD ao*
0..1instance
*
0..1instance
configuration
rdf
D m ozService
D m ozD ao
D m ozService()getInstance():D m ozServicegetD escriptionFrom D m oz(in url : string):string
hostnam e : stringusernam e : stringpassword : stringD m ozD ao()getInstance():D m ozD aogetD escriptionFrom D m oz(in url : string):stringgetC onnection():C onnection
Configuration
D m ozContentH andler
4.3.1.4.1. Package org.esgi.ifind.indexer.rdf
dm ozC ontentH andler
0 ..1
D m ozSaxParser
D m ozContentH andler
Thread
D m ozD ao
buffer : stringurl : stringtitle : stringdescription : stringtopic : stringSQ L_INSER T : string="INSER T INTO dm oz(url, title, description, topic) VALU ES(?,?,?,?)"Dm ozC ontentHandler()setD ocum entLocator(in value : Locator)startDocum ent()endD ocum ent()startPrefixM apping(in prefix : string, in U R I : string)endPrefixM apping(in prefix : string)startElem ent(in nam eSpaceU R I : string, in localNam e : string, in rawNam e : string, in attributs : Attributes)endElem ent(in nam eSpaceU R I : string, in localNam e : string, in rawNam e : string)characters(in ch : [1..*] char, in start : integer, in end : integer)ignorableW hitespace(in ch : [1..*] char, in start : integer, in end : integer)processingInstruction(in target : string, in data : string)skippedEntity(in arg0 : string)setLocator(in locator : Locator)getLocator():LocatorsetC onnection(in connection : C onnection)getC onnection():C onnection
uri : stringD m ozSaxParser(in uri : string, in parentButton : JButton)run()
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
5.Présentation de l’application IfindSearcherL’interface de recherche, « IfindSearcher » représente la partieweb de la plateforme. C’est grâce à celle-ci que l’utilisateurpourra bénéficier des donnés indexées et classées en fonction de sarequête.
5.1. PrincipeL’utilisateur dispose d’une interface simple lui permettant desaisir les mots clés à rechercher selon la rubrique :
Ifind Web Search : affiche les données sous forme delien/description de chaque page trouvée, paginées etclassées par ordre de pertinence
Ifind Pictures : affiche un aperçu de chaque image trouvée,et offre la possibilité de rediriger l’utilisateurdirectement sur l’image grâce à son lien hypertexte
Ifind Actuality : permet à l’utilisateur de récupérer lesinfos à la une
5.2. ArchitectureVoici l’architecture de l’application. Dans un premier temps voicil’architecture globale, puis une partie comprenant les diagrammes declasses et séquence afin de mieux comprendre le fonctionnement et laconception de l’interface web
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
5.2.1. Architecture générale
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
5.2.2. Diagramme de classe
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
5.2.3. Digramme de séquenceAfin de mieux comprendre l’enchainement des interactions, voici lediagramme de séquence depuis la requête d’un utilisateur jusqu’à laréception des résultats
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
6.Présentation de l’interface de recherche IFINDVoici maintenant différentes captures d’écran des vues principalesde la partie web d’Ifind. Ces captures illustrent les différentesfonctionnalités de l’interface web. Voici donc dans un premier tempsla page d’accueil de l’application :
L’interface dispose d’une zone de texte dans laquelle l’utilisateurva pouvoir saisir les mots clés de sa requête. Voici maintenant lerésultat de la requête d’un utilisateurs qui a tapé comme mot clé lemot Société :
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
On peut donc voir ici les différents résultats paginés et classéspar ordre de pertinence. On peut apercevoir aussi des méta-moteurs(Google, Bing et Yahoo), qui permettent de lancer la requête sur cesmêmes moteurs afin d’obtenir et de comparer les résultats.
Voici maintenant le résultat d’une requête dans la rubrique image :
Voici le résultat de la requête « img » de l’utilisateur. Lesaperçus des images sont affichés. Voici maintenant la rubrique« actualité » qui affiche le fil de l’actualité à la une :
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
Cette rubrique contient aussi des widgets qui permettent de serendre sur un site d’actualité sportive, mais aussi sur la page d’un
journal sur l’économie :
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
7.Tableau des chargesNom de la tâche Durée Début Fin
Prédécesseurs
Noms ressources
L'état de l'art destechnologies et algorithmes
9jours
Mar03/05/11
Ven13/05/11 H.LAANAIT
Etudes Algorithmes IR 1 jour Mar03/05/11
Mar03/05/11 H.LAANAIT
Lucene 1 jour Mer04/05/11
Mer04/05/11 2 H.LAANAIT
MG4J 1 jour Jeu05/05/11
Jeu05/05/11 3 H.LAANAIT
Terrier 1 jour Ven06/05/11
Ven06/05/11 4 H.LAANAIT
Xapian 4jours
Lun09/05/11
Ven20/05/11 5 H.LAANAIT
Etude approfondie de Lucene 4jours
Mar10/05/11
Ven13/05/11 6 H.LAANAIT
Choix de l'atelier de génielogiciel
6jours
Mar03/05/11
Mar10/05/11 D.ZAHAL
Choix des outils de gestionde projet
2jours
Mar03/05/11
Mer04/05/11 D.ZAHAL
Choix des outils demodélisation UML
2jours
Jeu05/05/11
Ven06/05/11 9 D.ZAHAL
Choix des outils degestionnaires de versions
2jours
Lun09/05/11
Mar10/05/11 10 D.ZAHAL
Architecture logicielle dusystème à concevoir
9jours
Mar17/05/11
Ven27/05/11 1;8 C.FALCOU
Analyse technique 3jours
Mar17/05/11
Jeu19/05/11 C.FALCOU
Diagrammes de classes 1 jour Ven20/05/11
Ven20/05/11 13 C.FALCOU
Diagrammes de séquences 1 jour Lun23/05/11
Lun23/05/11 14 C.FALCOU
Intégration du moteur derecherche dans l'architecture
4jours
Mar24/05/11
Ven27/05/11 15 C.FALCOU
Conception et développementIfind Indexer
15jours
Mer01/06/11
Mar21/06/11 12 H.LAANAIT
Analyse technique 3jours
Mer01/06/11
Ven03/06/11 H.LAANAIT
Implémentation du moteurd'indexation
3jours
Lun06/06/11
Mer08/06/11 18 H.LAANAIT
Implémentation des parsers(HTML,PDF,RTF,WORD)
3jours
Jeu09/06/11
Lun13/06/11 19 H.LAANAIT
Implémentation du PageRank 2jours
Mar14/06/11
Mer15/06/11 20 H.LAANAIT
Développement del'interface graphique
2jours
Jeu16/06/11
Ven17/06/11 21 H.LAANAIT
Développement de lapolitique de communication(Ifind Crawler & IfindIndexer) DirectoryWatcher
2jours
Lun20/06/11
Mar21/06/11 22 H.LAANAIT
Finalisation desdéveloppements
2jours
Mer15/06/11
Jeu16/06/11 23 H.LAANAIT
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
Conception et développementIfind SearchEngine
15jours
Mer01/06/11
Mar21/06/11 12 C.FALCOU
Analyse technique 4jours
Mer01/06/11
Lun06/06/11 C.FALCOU
Implémentation du moteur derecherche
4jours
Mar07/06/11
Ven10/06/11 26;19 C.FALCOU
Implémentation du FrameworkMVC
3jours
Lun13/06/11
Mer15/06/11 27 C.FALCOU
Développement del'interface graphique
3jours
Jeu16/06/11
Lun20/06/11 28 C.FALCOU
Développement Css + js 1 jour Mar21/06/11
Mar21/06/11 29 C.FALCOU
Finalisation desdéveloppements
2jours
Mer15/06/11
Jeu16/06/11 30 C.FALCOU
Conception et développementIfind SearchEngine
12jours
Mer01/06/11
Jeu16/06/11 D.ZAHAL
Analyse de l'existant 2jours
Mer01/06/11
Jeu02/06/11 D.ZAHAL
Réingénierie de l'existant 4jours
Ven03/06/11
Mer08/06/11 33 D.ZAHAL
Implémentation du parsingdu fichier rdf
2jours
Jeu09/06/11
Ven10/06/11 34 D.ZAHAL
Implémentation del'intégration des fichiers rdfdans une base MySql
2jours
Lun13/06/11
Mar14/06/11 35 D.ZAHAL
Finalisation desdéveloppements
2jours
Mer15/06/11
Jeu16/06/11 36 D.ZAHAL
Test & Validation 1 jour Jeu02/06/11
Jeu02/06/11
17;25;32
C.FALCOU;H.LAANAIT;D.ZAHAL
Documentation 2jours
Mar05/07/11
Mer06/07/11 38 C.FALCOU;H.LAANAIT
;D.ZAHAL
8.Diagramme de GANT
8.1. Decoupage par lot
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
8.2. Decoupage par sous lot
8.2.1. Sous lot HLT.1 – Etat de l’art des technologies et algorithmescandidats
8.2.2. Sous Lot DZL.1 D.ZAHAL – Choix de l’atelier de génie logiciel
8.2.3. Sous lot CFU.1 C.FALCOU – Architecture logicielle du système àconcevoir
19
Projet Professionnel J2EE : Développement du moteur de rechercheIFIND
C.FALCOU-H.LAANAIT-D.ZAHALTuteur M.THOMAS
8.2.4. Sous lot HLT.2 H.LAANAIT – Conception et développement IfindIndexer
8.2.5. Sous lot CFU.2 C.FALCOU – Conception et développement IfindSearchEngine
8.2.6. Sous lot DZL.2 D.ZAHAL – Réingénierie et développement IfindCrawler