[JAVA] Aide pour le démarrage d'un projet

Fermé
Pauleta - 3 juin 2006 à 16:52
 Pauleta - 7 juin 2006 à 23:45
Bonjour,

j'aurais besoin d'aide pour commencer mon projet car j'ai du mal
En espérant que vous puissiez m'apporter une aide.


Merci par avance

Description du Projet

Le programme Foogle (foo-google) est un programme qui crée un index à partir d'un fichier et qui permet de faire des requètes de recherche de mots en utilisant les opérateurs ET et OU pour trouver l'ensemble des lignes satisfaisant la requète.


Ligne de Commande du Logiciel

Le logiciel doit se présenter sous la forme d'un jar exécutable.
La ligne de commande permet de créer l'index ou d'effectuer des requètes sur un
index déjà crée
java -jar foogle.jar [index|query] [option spécifique dépendant de index ou query]
index :
java -jar foogle.jar index [-strategy name] [-minlength length]fichier.ext
crée un index à partir d'un fichier.ext, le nom du fichier sera fichier.ext.idx
-minlength indique le nombre de lettre minimum du mot pour qu'il appartienne
à l'index.
-strategy permet de spécifier une stratégie de contexte par son nom.
Le contexte correspond aux mots avant et après un mot recherché.
(par défaut: none)

La stratégie "none" indique que le contexte (la ligne ou une partie de la ligne n'est pas stockée dans l'index.
La stratégie "near" indique que le contexte correspond au mot précédent ainsi qu'au mot suivant le mot courant.

Exemple de résultat avec un contexte "near", avec le fichier :
hello toto how are you ?
well, i'm fine, well Dee fine.


Pour la requète toto & how (les contextes sont agglomérés):
line 1: hello toto how are

Pour la requète fine (le mots fine est présent plusieurs fois):
line 2: well fine well ... Dee fine

De façon optionnel vous pouvez ajouter un contexte intelligent.

query :
java -jar foogle.jar query [-n count] fichier.ext.idx expr
effectue une requète expr sur l'index fichier.ext.idx et affiche l'ensemble
des lignes satisfaisant la requète.
-n permet de spécifier le nombre de résultat voulu.

Les requètes sur l'index correspond à un arbre au format préfixé,
exemple "& toto | titi @t?t?" est équivalent à l'arbre
	
                          &
	toto 				|
				titi 		@t?t?


L'opérateur[B] ET[/B] ('&') reporte la ligne uniquement si les deux mots
appartiennent à la ligne.
L'opérateur OU ('|') reporte la ligne si un des deux mots appartient
à la ligne.
L'opérateur @ permet d'indiquer une expression régulière (au format PERL) pour rechercher les mots.

De façon optionnel, il est possible dans le cas des OU lorsque l'on fixe le
nombre de résultat voulu de ne pas calculer l'ensemble de tous les résultats
possibles. De plus, lors de requète concernant beaucoup de résultat possible, il est possible de manipuler des itérateurs plutôt que des listes pour éviter d'avoir de grosses structures de données intermédiaires.


Architecture du Logiciel

Pour vous aidez et nous permettre de tester automatiquement votre logiciel,
un ensemble d'interface est imposée, vous ne devez en aucun cas toucher leur code.
Exemples d'utilisation des interfaces :
Création d'un index :
FoogleFacade foogle=new FoogleFacadeImpl();
ContextStrategy contextStrategy=
    foogle.getContextStrategyMap().get("none");

Index index=foogle.createIndex(
    new File("bbe.txt"),contextStrategy);

foogle.saveIndex(index,new File("bbe.idx"));


Recherche dans un index :
Index index2=foogle.loadIndex(new File("bbe.idx"));
System.out.println("indexed filename:"+index2.getFilename());

QueryFactory factory2=foogle.createQueryFactory(index2);
Query query2=factory2.and(factory2.query("God"),
    factory2.query("solid"));

ContextStrategy contextStrategy2=index2.getContextStrategy();
for(Result result2:query2.execute(10)) {
    System.out.println("line:"+result2.getLine());
    System.out.println("ctx:"+contextStrategy2.getContext(result2));
}
A voir également:

7 réponses

Voici les différentes interfaces qui sont fournis avec l'énoncé

import java.util.Collection;

/** Represents a context strategy i.e. how to obtain a context
 *  of the indexed words.
 *  
 * 
 * @see FoogleFacade#getAllContextStrategies()
 * @see FoogleFacade#createIndex(ContextStrategy)
 */
public interface ContextStrategy {
  /** Retruns the name of the Strategy.
   * @return the name of the current strategy.
   */
  public String getName();
  
  /** Returns the context of a result,
   *  this result must be created by a query on an
   *  index that use the current strategy.
   * 
   * @param result of a qery on an index that
   *  used this strategy.
   * @return an unmodifiable list of words representing
   *  the context of the result.
   *  
   * @throws IllegalArgumentException if the result is not created
   *  with an index using this strategy.
   *  
   *@see Index#getContextStrategy()
   */
  public Collection<? extends CharSequence> getContext(Result result);
}



import java.io.File;
import java.io.IOException;
import java.io.Reader;

import java.util.Map;
import java.util.regex.Pattern;

/** Access point for creating, loading, saving foogle index and
 *  performs some queries on it.
 * 
 */
public interface FoogleFacade {
  /** Creates an in-memory index with a specified strategy
   *  and appends all words extracted of a specific file.
   * @param strategy the context strategy used to create the index.
   * @param file all words of the file will be appended in the index. 
   * @return a new in-memory index.
   * @throws IOException if the file doesn't exists or is unreadable.
   */
  public Index createIndex(File file,ContextStrategy strategy) throws IOException;
  
  /** Creates an in-memory index with a specified strategy
   *  and appends all words extracted of a specific file.
   *  All words are appended with the line of the reader and the specifed filename. 
   *  
   *  Words are separated using the java whitespace rule
   *  (code)\p{javaWhitespace}(/code) (see {@link Pattern})
   *  and word are indexed is its length is greater or equals to 3. 
   *  
   * @param strategy the context strategy used to create the index.
   * @param filename filename used for all word from the reader.
   * @param reader all words contained in the reader will be appended line by line
   *  in the index. 
   * @return a new in-memory index.
   * @throws IOException if the file doesn't exists or is unreadable.
   * 
   */
  public Index createIndex(String filename,Reader reader,ContextStrategy strategy) throws IOException;
  
  /** Creates an in-memory index with a specified strategy
   *  and appends all words extracted of a specific file in the specified index.
   *  All words are appended with the line of the reader and the specifed filename. 
   * @param strategy the context strategy used to create the index.
   * @param filename filename used for all word from the reader.
   * @param reader all words contained in the reader will be appended line by line
   *        in the index. 
   * @param accepter specifies how to separate word in the reader and
   *        which words are indexable.
   * @return a new in-memory index.
   * @throws IOException if the file doesn't exists or is unreadable.
   * 
   * @see 
   */
  public Index createIndex(String filename,Reader reader,WordAccepter accepter,ContextStrategy strategy) throws IOException;

  
  /** Loads an index stored in a file in memory.
   * @param indexFile file that store the index.
   * @return an in-memory index corresponding to the file.
   * @throws IOException raised if there is input/output problems.
   */
  public Index loadIndex(File indexFile)  throws IOException;
  
  /** Saves an index in a spacific file.
   * @param index the index to store.
   * @param indexFile file that will store the index.
   * @throws IOException raised if there is input/output problems.
   */
  public void saveIndex(Index index,File indexFile) throws IOException;
  
  /** Returns a query factory specific to an index.
   * @param index the queries will be created on this index.
   * @return a new query factory.
   * 
   * @see Query#execute(int)
   */
  public QueryFactory createQueryFactory(Index index);
  
  /** Returns all context strategies understood by the facade.
   *  This method must returned at least the "none" context strategy.
   * @return an unmodifiable map of context strategies associated
   *  with their names.
   */
  public Map<String,? extends ContextStrategy> getContextStrategyMap();  
}



/** Represents an index of Foogle.
 * 
 * 
 */
public interface Index {
  /** Returns the name of the indexed file.
   * @return the name of the indexed file.
   */
  public String getFilename();
  
  /** Returns the context startegy used by the current index.
   * @return the context strategy.
   * 
   * @see FoogleFacade#createIndex(ContextStrategy)
   * @see FoogleFacade#getAllContextStrategies()
   */
  public ContextStrategy getContextStrategy();
}





/** Represents a query to an index.
 *  The query is specific to an index.
 *  
 * 
 * @see QueryFactory
 * @see FoogleFacade#createQueryFactory(Index)
 */
public interface Query {
  /** Query the index to find results corresponding to a
   *  specific query.
   * 
   * @return the result of the query.
   * 
   * @see Query#execute(int)
   */
  public Iterable<? extends Result> execute();
  
  /** Query the index to find results corresponding to a
   *  specific query.
   *  
   *  @param maxCount a positive integer 
   * 
   * @return the result of the query.
   * 
   * @see QueryFactory
   * @see FoogleFacade#createQueryBuilder(String)
   */
  public Iterable<? extends Result> execute(int maxCount);
}



import java.util.regex.Pattern;

/** Factory used to create index queries,
 *  The factory is specific to an index.
 *  
 *  All results returned by {@link Query#execute()}
 *  on these queries are garanteed to have distinct
 *  line numbers (see {@link Result#getLine()}).
 *
 */
public interface QueryFactory {
  /** Creates a query for a simple word.
   * 
   * @param word the queried word.
   * @return a new query.
   */
  public Query query(CharSequence word);
  
  /** Creates a query for a regex.
   * 
   * @param pattern the queried regex.
   * @return a new query.
   */
  public Query query(Pattern pattern);
  
  /** Create a new query by oring query1 and query2.
   *  
   * @param query1 the first query.
   * @param query2 the second query.
   * @return the new query.
   */
  public Query or(Query query1,Query query2);
  
  /** Create a new query by anding query1 and query2.
   * @param query1 the first query.
   * @param query2 the second query.
   * @return the new query.
   */
  public Query and(Query query1,Query query2);
}



/** Result of a query, represents a location in a line of a file.
 * 
 *  A result can have a specific context value associated with it
 *  depending on the index strategy, use 
 *  {@link ContextStrategy#getContext(Result)} to obtain such context.
 * 
 * 
 * @see Index#executeQuery(Query)
 */
public interface Result {
  /** Returns the line number containing
   *  the result
   * @return a line number.
   */
  public int getLine();
}






import java.util.Scanner;
import java.util.regex.Pattern;

/** This interface specifies
 *  how words are delimited in a text
 *  using a regex pattern
 *  {@link #getDelimiterRegex()}
 *  and which word are indexed
 *  {@link #isIndexable(CharSequence)}.
 * 
 */
public interface WordAccepter {
  /** Returns the regex pattern used to separate words.
   * @return a regex pattern.
   * 
   * @see Scanner#useDelimiter(Pattern)
   */
  public Pattern getDelimiterRegex();
  
  /** Indicates if a word should be indexed or not.
   * @param word the word
   * @return true if the word is indexable, false otherwise.
   */
  public boolean isIndexable(CharSequence word);
}
0
Bonjour,

est-ce que quelqu'un pourrait m'aider svp?

Merci par avance
0
Salut,

d'une part, l'énoncé ne m'est pas clair et d'une autre, je ne vois pas très bien si les classes qui doivent implémentées les interfaces doivent être abstraites, concrètes...

Si quelqu'un pouvait m'indiquer des pistes, des classes qu'il me faudrait utiliser,etc... pour que je puisse m'avancer.

Merci d'avance
0
Bonjour,

est-ce que quelqu'un pourrait m'aider svp car je n'y arrive pas

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Salut,

est-ce qu'une personne pourrait m'aider svp

merci
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
7 juin 2006 à 23:11
En gros cest à toi de faire toutes les fonctions données cest bien ca?

Moi je veux bien tenter de t'aider,mais je vais pas avoir trop le temps cette semaine i la semaine prochaine. C'est pour quand ton projet?
0
Salut,

c'est ça : à partir des interfaces données, il faut coder toutes les fonctions.

Mon projet est à rendre le 26 juin.
0