Se connecter

Informatique

Programmation

Sujet : [Java] Charger un Index
1
H-K-I
Niveau 2
14 décembre 2017 à 11:13:51

Bonjour,
j'aimerai savoir comment peut on charger un index que l'on a précédemment construit ? ( je ne vois pas le code à effectuer pour démarrer)
merci
Cordialement

sentrance
Niveau 10
14 décembre 2017 à 13:35:57

Salut tu définis quoi par index déjà?

H-K-I
Niveau 2
14 décembre 2017 à 13:46:20

on a crée un index à partir d'un fichier texte et on doit pouvoir le charger afin de trouver l'occurence de certains mot présent dans ce texte cependant le mot "charger " me paraissait confus .... j' ai donc chargé mon index grace à deserialize et j'ai récupéré le texte dont j'avais besoin
mais cependant je suis maintenant bloquer à l'occurence.... ( je ne comprens pas vraiment le principe d'occurence)

H-K-I
Niveau 2
14 décembre 2017 à 15:18:54

j'ai compris le systeme d'occurence
maintenant j'ai le principe d'hashmap à réaliser cependant n'ayant pas fait ceci en cours quelqu'un pourrait il m'expliquer ?
merci :)

Bunyan
Niveau 14
14 décembre 2017 à 16:11:20

Une Map en Java est une association clef -> valeur.
Sous d'autre langage, ça porte le nom de "hash". En général -> tableau associatif.

Ce que tu as à faire est simple : pour chaque occurence de mot, la compter.
Donc, si ta Map contient la clef "mot", associe lui une nouvelle valeur valant "valeur courante + 1".
Si ta map ne contient pas la clef "mot", associe lui une nouvelle valeur valant "1".

H-K-I
Niveau 2
14 décembre 2017 à 17:33:41

merci beaucoup,
cependant je tombe sur un nullPointerException et qui est présent dans des classes que je n'ai pas l'opportunité de modifier....
est ce que cette méthode pourrait permettre de passer cette exception ? le but étantd'afficher le texte de tous les documents qui contiennent un terme donné)

Bunyan
Niveau 14
14 décembre 2017 à 22:38:24

Sans code, je ne peux strictement rien dire.
La, je résume ton message à "j'ai un problème", sans que tu ne donnes de matière pour que j'en saisisse les tenants et aboutissants :)

Le seul truc que je peux dire, là, c'est que si tu as une NPE dans une bibliothèque : soit tu l'utilises mal, soit la bibliothèque est pourrie.

H-K-I
Niveau 2
18 décembre 2017 à 14:34:22

bonjour,
excusez moi du retard je n'avais pas le code vu que je n'étais pas retourné à la fac
voici ma javadoc (que j'utilise sans doute mal) : http://www-connex.lip6.fr/~soulier/data/2I002/projet2017/doc/index.html
et le texte associé à mon index : http://www-connex.lip6.fr/~soulier/data/2I002/projet2017/data/cisi/cisi.txt
voici mon code :

import indexation.* ;
import java.io.*;
import core.*;
import java.util.HashMap;

; public class Indexation {
public static void main (String []args) {

Parser p= new ParserCISI () ;
TextRepresenter t = new Stemmer () ;

Index i = new Index ( "Indexation",p,t);

i.index("CISI/cisi.txt");

i.getName() ;
i.getTextRepresenter();

}
}
---------------------------------------------------------------
import indexation.* ;
import java.io.*;
import core.*;
import java.util.HashMap;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
public class Test {

// l'affichage texte de tt doc concerné par un mot
public static void docWithTerm(String mot, Index i) {

for (String Id : i.getTfsForStem(mot).keySet()) {
System.out.println(Id);
try {
System.out.println(i.getDoc(Id).getText());
}
catch (IOException e) {
e.printStackTrace();
}
}
}

public static void main (String []args) {
try {
Index i = Index.deserialize("Indexation");

Document d = i.getDoc("55") ;
//affiche le texte complet
System.out.println(d.getText());
//affiche occurence des mots dans le texte choisi
System.out.println( "\n" + i.getTfsForDoc("55"));

//affiche occurence d'un mots dans le texte choisi
//System.out.println( "\n" + i.getTfsForDoc("55").get("law"));

// affiche occurence d'un dans chaque doc
System.out.println( "\n" + i.getTfsForStem("attempt"));

//nbTermeDifferent dans un Document Choisi "doc"
System.out.println ( i.getTfsForDoc("55").size());

// nombre de document avec le mot "mot"
System.out.println (i.getTfsForStem("law").size());

-) le problème arrivant à ce moment avec la hashmap
// je dois Generer et afficher une Hashmap<String,Double> qui associe a chaque document un score aléatoire
cependant j'arrive à attribuer un score aléatoire mais seulement à une partie d'un document où il y a présence d'un mot donc pas ce qui est demandé :(

HashMap<String,Double> map = new HashMap<String,Double>();

for (String mapKey : i.getTfsForStem("law").keySet()) {
map.put(mapKey,Math.random());
}
for (Map.Entry mapentry : map.entrySet()) {
System.out.println("id: "+mapentry.getKey() + " | score: " + mapentry.getValue());
}

}

// permet de lever l'exception du getDoc
catch (IOException e) {
// affiche l'exception et l'état de la pile d'exécution au moment de son appel
e.printStackTrace();
}

}

}

godrik
Niveau 22
18 décembre 2017 à 16:26:58

utilise la balise code

H-K-I
Niveau 2
18 décembre 2017 à 18:37:26

excusez de pas y avoir penser ...
du coup voici la javadoc pour m'aider : http://www-connex.lip6.fr/~soulier/data/2I002/projet2017/doc/index.html
et le texte associé à mon index : http://www-connex.lip6.fr/~soulier/data/2I002/projet2017/data/cisi/cisi.txt

 import indexation.* ;
import java.io.*;
import core.*;
import java.util.HashMap;

public class Indexation {
public static void main (String []args) {

Parser p= new ParserCISI () ;
TextRepresenter t = new Stemmer () ;

Index i = new Index ( "Indexation",p,t);

i.index("CISI/cisi.txt");

i.getName() ;
i.getTextRepresenter();

}
}

et voici la classe de test :

import indexation.* ;
import java.io.*;
import core.*;
import java.util.HashMap;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
public class Test {

// l'affichage texte de tt doc concerné par un mot
public static void docWithTerm(String mot, Index i) {

for (String Id : i.getTfsForStem(mot).keySet()) {
System.out.println(Id);
try {
System.out.println(i.getDoc(Id).getText());
}
catch (IOException e) {
e.printStackTrace();
}
}
}

public static void main (String []args) {
try {
Index i = Index.deserialize("Indexation");

Document d = i.getDoc("55") ;
//affiche le texte complet
System.out.println(d.getText());
//affiche occurence des mots dans le texte choisi
System.out.println( "\n" + i.getTfsForDoc("55"));

//affiche occurence d'un mots dans le texte choisi
//System.out.println( "\n" + i.getTfsForDoc("55").get("law"));

// affiche occurence d'un dans chaque doc
System.out.println( "\n" + i.getTfsForStem("attempt"));

//nbTermeDifferent dans un Document Choisi "doc"
System.out.println ( i.getTfsForDoc("55").size());

// nombre de document avec le mot "mot"
System.out.println (i.getTfsForStem("law").size());

-) le problème arrivant à ce moment avec la hashmap
// je dois Generer et afficher une Hashmap<String,Double> qui associe a chaque document un score aléatoire
cependant j'arrive à attribuer un score aléatoire mais seulement à une partie d'un document où il y a présence d'un mot donc pas ce qui est demandé :(

HashMap<String,Double> map = new HashMap<String,Double>();

for (String mapKey : i.getTfsForStem("law").keySet()) {
map.put(mapKey,Math.random());
}
for (Map.Entry mapentry : map.entrySet()) {
System.out.println("id: "+mapentry.getKey() + " | score: " + mapentry.getValue());
}

}

// permet de lever l'exception du getDoc
catch (IOException e) {
// affiche l'exception et l'état de la pile d'exécution au moment de son appel
e.printStackTrace();
}

}

}
Bunyan
Niveau 14
18 décembre 2017 à 23:45:49

Essaie simplement de transcrire ce que j'ai écrit, ni plus, ni moins.

Ce que tu as à faire est simple : pour chaque occurence de mot, la compter.

Donc, si ta Map contient la clef "mot", associe lui une nouvelle valeur valant "valeur courante + 1".
Si ta map ne contient pas la clef "mot", associe lui une nouvelle valeur valant "1".

Cherche aussi comment s'utilise une Map. Manifestement, tu n'as pas compris ni cherché à comprendre :/

H-K-I
Niveau 2
19 décembre 2017 à 11:56:16

dac je vais essayer ca merci

j'ai compris le principe d'une hashmap le problème étant plus le code c'est pour cela que je me suis aidé des codes qu'on puisse trouvé sur internet malgré que celà ne cprrespondait pas à ma recherche car ils me donnaient un point de repère ( surtout que c'est la première fois qu'on me donne une javadoc donc j'ai du mal à les lire ( je mets beaucoup de temps à comprendre))

Bunyan
Niveau 14
20 décembre 2017 à 08:09:51

Si tu dois compter le nombre d'occurence des mots dans ton index, pourquoi utilises-tu Math.random ? Au vu du nom de la méthode, ça a l'air voulu.
Ton besoin a-t-il changé ?
Ce n'est plus :

on a crée un index à partir d'un fichier texte et on doit pouvoir le charger afin de trouver l'occurence de certains mot présent

?

Lis ton code :)
"key <- " "
Pour i de 1 à 2459
concatène i avec key <- (résultat " 0123456789101112131415161718192021..2459")
mets dans mon tableau associatif la clef " " avec la valeur "aléatoire(0,20)"
fin pour
"

Ca ne correspond absolument pas à ta demande ^^'

Première étape : charger ton fichier contenant les mots.
Seconde étape : parcourir les mots
Troisième étape : compter les occurences

J'ai l'impression que tu as réalisé la première étape avec docWithTerm, mais je n'en suis pas vraiment sur.

1
Sujet : [Java] Charger un Index
   Retour haut de page
Consulter la version web de cette page