|
IFT1010 Programmation
I
Département d'informatique et de
Hiver 2002
|
![]() |
Devoir 2: mini moteur de recherche sur le web
Ce devoir est à faire en équipe de deux.
I- Objet du devoirVotre programme (MonMoteur) doit réaliser un moteur de recherche très simplifié qui obéit au scénario suivant:L'utilisateur a un besoin d'information qu'il formule par une requète (suite de caractères). Elle ou il a de plus une idée de l'endroit sur le web (page html) où trouver cette information (nous appelons cette page la page frontale). Votre programme doit analyser la page frontale pour y rechercher la requête, puis afficher le contexte dans lequel la requête apparaît, dans le cas où cette requête apparaît effectivement dans le texte. Éventuellement, votre programme analyse les pages liées à la page frontale pour aller y chercher la requête. Exemple:Un utilisateur recherche de l'information sur Java 2 Platform: c'est la requête faite à votre programme. Il a l'idée que cette requête devrait exister sur une des pages web accessibles depuis votre page préféree: http://java.sun.com; cette page consistue la page frontale.Votre programme va donc analyser la page frontale (et éventuellement les pages web qui y sont référencées) pour y chercher le contexte d'occurrence de la requête. NoteDans ce travail, vous devez faire certains traitements sur des pages html accessibles à travers le web. Une classe vous permettant d'accéder facilement à une page disponible sur le web vous est fournie pour simplifier votre travail.II- Instructions généralesUn certain nombre d'informations sont demandées à ou spécifiées par l'utilisateur; certaines de ces informations sont obligatoires, d'autres sont facultatives et possèdent des valeurs par défaut:
Note:Pour décider si votre programme doit fonctionner en mode interactif ou en mode ligne de commande, vous pouvez par exemple consulter le nombre d'arguments donnés à la ligne de commande. Si ce nombre est nul, alors votre programme fonctionne en mode interactif, s'il est au moins égal à deux, votre programme fonctionne en mode ligne de commande; sinon, votre programme affiche un message d'erreur et explique à l'utilisateur comment utiliser le programme.III - Instructions spécifiquesNotion de contexte d'occurrenceNous appelons contexte d'occurrence une fenêtre de texte dans laquelle apparaît la requête. Par exemple, à la requête "java est simple" depuis la page frontale http://www.ensta.fr/java/java_simple.html correspond au moins le contexte suivant (la requête est indiquée en rouge); on a demandé ici un recherche ne dépend pas de la casse.Le code source en JAVA est simple. Il n'y a plus de preprocesseur, plus de #define, de typedef, plus de recours aux fichiers header, car JAVA permet la définition d'autres classes et de leurs méthodes. Dans ce projet, le contexte est définit comme la requête plus les 100 caractères (au plus) qui précèdent la requête et les 100 caractères qui suivent (au plus) la requête dans la page. Ce que votre programme doit afficher:Lorsqu'une occurrence de la requête est trouvée dans une page, vous devez afficher: 1) son contexte, 2) l'adresse de la page où cette occurrence a été trouvée (ex: http://www.ensta.fr/java/java_simple.html).Principe de la rechercheRechercher les occurrences d'une requête doit se faire comme suit:
Comment trouver une page accessible depuis une page ?Il vous faut pour cela rechercher le tag html suivant où la chaine entre guillemets est une page html:<a href="lien vers une page html">
Il est très possible (et cela fait partie de votre travail de le
gérer) qu'un lien soit spécifié sur autre chose qu'une page html (vous
rechercherez donc les liens se terminant par l'extension .html
ou encore .htm. De même, un lien peut très bien être fait sur
la même page que celle qui contient le lien (ex: Les éléments jouent contre-vous: il est possible qu'un lien soit
exprimé à l'aide d'une adresse html et d'une étiquète (ex:
IV - JAVA et le webEn langage web, URL est un acronyme pour Uniform Resource Locator. Une page web accessible sur le web est une de ces ressources; une image ou votre chanson mp3 préférée sont d'autres exemples de ressources. On vous demande dans ce devoir de vous intéresser uniquement aux ressources: pages html.Afin de faciliter votre travail, nous vous fournissons une classe
URLReader qui permet de manière
transparente d'aller lire une URL dont le nom est spécifié. Vous
accéder alors au texte de la page html en invoquant la méthode
La classe URLReader est installée (c'est à dire compilée) dans le
répertoire habituel auquel vous avez accès (voir démo 1 :-) et dans
lequel se trouvent les classes comme Pour utiliser cette classe, il suffit de créer un objet de cette
classe en spécifiant l'adresse internet de la page. Votre TP peut
aller lire le contenu de n'importe quelle page sur internet à l'aide
de cette classe.
En pratique, lorsque vous mettrez au point votre TP, vous
préférerez sans doute utiliser des documents dans votre répertoire
plutôt que d'aller les chercher sur internet (ce qui prend plus de
temps à l'exécution, et nécessite un accès à l´internet). La classe
URLReader permet également d'aller lire des documents locaux
(voir URLTest.java pour un exemple
concret).
Voici un exemple qui utilise la classe URLReader pour aller
lire, ligne par ligne le texte d'un document se trouvant sur la page
web du cours: URLTest.java
Vous devez remettre électroniquement un ou plusieurs fichiers
java. La contrainte (tant pis pour vous si vous ne la suivez
pas) est la suivante: le fichier qui contient la méthode principale
( Tous vos fichiers doivent obligatoirement contenir en
commentaire les noms et les codes d'usagers des deux auteurs.
La commande pour la remise est: remise ift1010 tp2
MonMoteur.java autres fichiers (éventuellement) Si vous avez un doute, utilisez la commande de vérification pour
vérifier l'état de votre remise (relire le cas échéant la démo 1).
Nous vous conseillons de rédiger un mini rapport qui figurera en
entête de votre programme et qui spécifiera tous les points saillants
de votre programme.
La notation de ce projet dépendra aussi bien de la qualité de votre
code, de son bon découpage (et autres critères habituels) que de la
pertinence de la réalisation finale.
Notez qu'il vous est tout à fait possible de remettre un programme qui
fonctionne bien, mais qui parce qu'il n'est pas bien pensé ne vous
donnera pas la note maximale.
|