Bonsoir,


J'ai un fichier texte (il contient un mot sur chaque ligne), je parcours ce dernier et à chaque ligne je fais un traitement sur ce mot. Puis, je transforme ce mot en une suite de sous mot (dans une liste: ArrayList<String> )
D'autre part j'ai une map qui contient l'ensemble de sous chaine de tout le fichier LinkedHashMap<String, Integer[]> = une chaine (key) + un tableau d'entier.

Mon objectif , c'est de parcourir ces deux structures de données (map et liste), pour chaque sous chaine de la liste , je cherche son existance dans le map. Un compteur s'incrémente et un calcul se fait (le produit des trois fonctions mentionnées)pour chaque sous mot.

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
 
public static void GenerationFicher(String fichier, int x, LinkedHashMap<String, Integer[]> m, BufferedWriter pw) throws FileNotFoundException, IOException {
        ArrayList<String> motExtré = new ArrayList<>();
        Scanner sc = new Scanner(new File(fichier));
        String s = "";
        while (sc.hasNextLine()) {
            String line = sc.nextLine();
            String mot = sousChaine(line);
            motExtré = ExtraNgram(mot, x);
            String ss = "";
            int compteurGram = 1;
            //comparer le contenu de la liste et de la map
            for (String me : motExtré) {
                for (Map.Entry<String, Integer[]> e : m.entrySet()) {
                    if (me.equals(e.getKey())) {
                        s = compteurGram + ":" + (nbrFqGram(mot, me) * chiffreGram(me) * positionGram(mot, me));
                        compteurGram++;
 
                    }
                    ss = ss + " " + s;
                }
                ss = target(line) + ss + " #" + mot;
                pw.write(ss);
                pw.newLine();
            }
 
        }
 
    }
Mon problème c'est que le traitement éffectué se fait seulement pour la première sous chaine du mot (dans notre cas la taille de sous chaine =1)
la taille peut vari entre 1 et 3 carcatères.

Pour chaque ligne du fichier : par exemple pour le mot: bjr
Résultat souhaîté: -1 1:2 2:4 3:1 #bjr
Résultat obtenu: -1 1:2 #bjr
Donc le traitementest fait seulement pour le prmier gram (dans nore cas 1 seul caracteres) --> b

Merci de m'aider à resoudre ce problème (normalement il réside au niveau de l'une des boucles for)