Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Membre du Club
    Inscrit en
    septembre 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 61
    Points : 53
    Points
    53

    Par défaut Créer une matrice binaire

    Bonsoir à tous,

    J'ai un fichier qui contient plusieurs lignes, chaque ligne contient un ensemble de mots clés, séparé par des espaces vides.
    Par exemple
    fichier1
    mot1 mot2
    mot1 mot3 mot4
    mot2 mot4 mot1
    mot4
    mot5 mot2
    D'un autre coté, j'ai un tableau contenant également un ensemble de mots.
    Par exemple
    Tableau:
    mot1 mot2 mot3 mot4 mot5 mot6 mot7 mot8

    Je voudrais comparer une matrice d'occurrence binaire. C'est à dire lire le fichier1 line par line, parcourir le tableau, si je trouve le mot je mets un 1 sinon je mets un 0.

    Avoir un résultat comme suit:
    1 1 0 0 0 0 0 0
    1 0 1 1 0 0 0 0
    0 0 0 1 0 0 0 0
    0 1 0 0 0 0 0 1
    J'ai essayé de le faire mais je n'obtient aucun résultat.
    Code :
    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
    31
    32
     
        int [][] matriceBin= new int [5][8]; // 5 lignes du fichier1 et 8 mots dans le tableau
        String  TabC [] = {"mot1", "mot2", "mot3", "mot4", "mot5" , "mot6" ,"mot7" , "mot8"};
     
        int i,j,k;
      String mot = null;
     
        String filePath="fichier1.docx";
     
         for (i=0; i<matriceBin.length; i++){
            for (j=0; j<matriceBin.length;j++){
     
           // lire le fichier1 ligne par ligne
                for (k=0;k<TabC.length;k++){
     
                try{
                    BufferedReader buff;
                        buff = new BufferedReader(new FileReader(filePath));
     
                 try {
                 String line=buff.readLine();
                  while (line != null) {       
                       if (mot.matches(TabC[k]) ) {
                               System.out.println(matriceBin[i][j]=1  );
                         } else {
                              System.out.println (matriceBin[i][j]=0);}
                           line=buff.readLine();              
    }
    } finally {
    // dans tous les cas, on ferme nos flux
    buff.close();
    }
    Je vous remercies à l'avance.

  2. #2
    Expert Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    21 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Service public

    Informations forums :
    Inscription : avril 2007
    Messages : 21 461
    Points : 35 325
    Points
    35 325

    Par défaut

    un ficher docx n'est pas une ficheir texte, c'est un fichier binaire, tu ne saura pas le lire avec un Reader java.
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et
    Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.

  3. #3
    Membre du Club
    Inscrit en
    septembre 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 61
    Points : 53
    Points
    53

    Par défaut matrice binaire

    Bonsoir à tous,
    Merci tchize_
    J'ai un peu corrigé mon programme mais j'ai toujours un petit soucis ma matrice binaire me retourne que des zéros:
    0
    0
    ......
    0
    0
    ....
    Alors que ce que obtenir :

    Code :
    1
    2
    3
    4
    5
     
    1 1 0 0 0 0 0 0
    1 0 1 1 0 0 0 0
    0 0 0 1 0 0 0 0
    0 1 0 0 0 0 0 1
    Code :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
     
    int [][] matriceBin= new int [5][8];
        String  TabC [] = {"mot1", "mot2", "mot3", "mot4", "mot5", "mot6", "mot7", "mot8"};    
        int i1,j1,j;
     
        //String []concept;
        String filePath="C:\\t.txt";
     
         for (i1=0; i1<matriceBin.length; i1++){
            for (j1=0; j1<matriceBin.length;j1++){ 
           // lire le fichier transactions ligne par ligne       
     
                for (j=0;j<TabC.length;j++){
                    //String con=TabC[j];
                       try{
                           BufferedReader buf = new BufferedReader(new FileReader(filePath));
                           try {
                           String line;
    // Lecture du fichier transaction ligne par ligne. Cette boucle se termine quand la méthode retourne la valeur null.
                           while ((line = buf.readLine()) != null) {  
                      java.util.StringTokenizer token = new java.util.StringTokenizer(line, ""); 
                      while ( token.hasMoreTokens() ) {
                        //System.out.println(token.nextToken());
                        if (token.equals(TabC[j])){
                            System.out.println(matriceBin[i1][j1]=1);
                        }else {
                              System.out.println (matriceBin[i1][j1]=0);}
                  }    
                          // concept=line.split("");      
                      // if (concept.equals(con)){
                              // System.out.println(matriceBin[i1][j1]=1);
                        // } 
                       //else {
                              //System.out.println (matriceBin[i1][j1]=0);}  
                     //line=buff.readLine();  
    }
    } finally {
    // dans tous les cas, on ferme nos flux
    buf.close();
    }
    } catch (IOException ioe) {
    // erreur de fermeture des flux
    System.out.println("Erreur --" + ioe.toString());
    }
     
                }
     
     
            }
            }
    Je vous remercies à l'avance.

  4. #4
    Expert Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    21 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Service public

    Informations forums :
    Inscription : avril 2007
    Messages : 21 461
    Points : 35 325
    Points
    35 325

    Par défaut

    Ton code n'a ni queue ni tête:

    Ton j1 utilise le nombre de ligne (5) alors qu'il devrais utilise le nombre de colonnes
    Tu parcoure au final 3 boucles imbriqué (5x5x8 =200 itération) et dans chaque itération tu lit l'intégralité de ton fichier source.
    Enfin, pour chaque ligne du fichier, tu compare toujours au même élément de tabC et tu tappe le résultat toujours dans la même cellule (i1,j1).

    Tu lit donc 200 fois le fichier et, à supposer qu'il y a 5 lignes dans le fichier tu fais 1000 comparaison

    tes comparaisons ne peuvent jamais réussir puisque ton StringTokenizer ne tokenize rien (tu n'a pas mis de séparateur).

    Faire un programme, ce n'est pas mélanger du code n'importe comment et espérer ue ça va faire quelque chose. Il faut donner un enchainement logique aux choses.

    Tu dois lire ton fichier ligne par ligne poue le tapper dans ta matrice => Ca doit être ta boucle extérieur et non ta boucle intérieur
    pour chaque ligne du fichier
     .... faire quelque chose
    fin pour
    
    Maintenant, tu veux faire quoi dans ta boucle? Séparer ta ligne en mots. Pour chaque mot de tabC, si il est présent dans la ligne du fichier, mettre la colonne correspondante à 1 sinon la metre à 0
    pour chaque ligne du fichier
     Mettre à jour le numéro de ligne 
     Splitter la ligne en mots
     Pour chaque mot du dictionnaire 
        Si le mot était présent dans la ligne lue
          matrice[i,j] = 1
        Sinon 
          matrice[i,j] = 0
     fin pour
    fin pour
    
    Reste plus qu'à définir 'était présent dans la ligne'. Pour ça, j'ai ma préférence sur l'utilisation de HashSet, qui fait déjà le travail de tri et de recherche.

    pour chaque ligne du fichier
     Mettre à jour le numéro de ligne (i)
     Splitter la ligne en mots et mettre dans un Hashset (pour sa méthode contains)
     Pour chaque mot du dictionnaire appelé tabC (index j)
        Si le mot était présent dans la ligne lue (tonHashSet.contains(tabC[j])
          matrice[i,j] = 1
        Sinon 
          matrice[i,j] = 0
     fin pour
    fin pour
    
    Voilà, avec ça t'as plus qu'à écrire le code qui va avec.
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et
    Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •