IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Créer une matrice binaire


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 63
    Points : 86
    Points
    86
    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 : 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
    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 éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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.

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 63
    Points : 86
    Points
    86
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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 éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/03/2009, 06h07
  2. [Macro-Word] Créer une matrice d'exigences
    Par Matespace dans le forum VBA Word
    Réponses: 5
    Dernier message: 24/05/2007, 10h56
  3. Créer une matrice symétrique à partir de 3 colonnes
    Par vincent550 dans le forum MATLAB
    Réponses: 3
    Dernier message: 10/04/2007, 13h35
  4. Créer une matrice en manipulant un vecteur
    Par bernard6 dans le forum MATLAB
    Réponses: 3
    Dernier message: 07/04/2007, 11h34
  5. Créer une matrice k-diagonale
    Par Mathusalem dans le forum MATLAB
    Réponses: 6
    Dernier message: 29/05/2006, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo