Bonjour,
je suis sur un projet de moteur de recherche en java.
J'ai un fichier texte contenant 1400 documents (identifiés par ".I" et dont le body est identifié par ".W")
Notre prof' nous a demandé de créer un ArrayList de HashMap pour répertorier chaque terme de chaque document.
Donc je dois créer un ArrayList dont chaque case contient une HashMap, une par document du fichier texte.
Chaque HashMap doit contenir un mot comme key, et le nombre de fois qu'on le rencontre comme value. Le problème est que je n'arrive pas à récupérer mes HashMaps...
Voilà ce que j'ai fait :
Et lors de la lecture du fichier, pour chaque ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public static ArrayList createArrayOfHashtables() { //Those hashtables will be used to count each term in each document. String[] term = new String[1400]; ArrayList<HashMap<String,Double>> wordCountList = new ArrayList<HashMap<String,Double>>(); for (int i=1 ; i<1401 ; i++) { wordCountList.add(new HashMap<String, Double>()); } return wordCountList; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 //dis.available() returns 0 if the file has no more lines. while(dis.available() !=0) { tmp = dis.readLine(); //For each document if (tmp.startsWith(".I")) { counter++; String[] str = tmp.split(" "); //System.out.println(str[1]+ " " + counter); tab[counter] = Integer.parseInt(str[1]); } //Each time we find the body of the document if (tmp.startsWith(".W")) { //We split every word in str2 String[] str2 = tmp.split(" "); HashMap<String, Double> tmp2 = (HashMap<String, Double>) wordCountList.get(counter); int i=0; //For each word in str2 while(i < str2.length) { //We check if the value in str2 exists in the hashtable for (int j=0 ; j<tmp2.size() ; j++) { if (str2[i] == tmp2.get(str2[i])) { } } tmp2.put(str2[i], (double) 0); i++; } } //System.out.println(dis.readLine()); }
J'obtiens cette erreur :
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1400, Size: 1400
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at Main.readFile(Main.java:70)
at Main.main(Main.java:15)
En référence à la déclaration de tmp2, ligne 16 du 2e code.
Donc pour en revenir à ma question, j'aimerai pouvoir comparer les termes splittés dans str2[] avec les keys de la HashMap correspondant au document que je traite. Et si ça correspond, j'aurais plus qu'à incrémenter la value, sinon, j'aurai juste à ajouter le mot comme key, et 1 comme value.
Merci d'avance !!
Partager