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
Salut tu définis quoi par index déjà?
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)
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
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".
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é)
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.
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();
}
}
}
utilise la balise code
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();
}
}
}
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 :/
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))
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.