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 :

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;
	}
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
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 !!