Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/01/2013, 22h57   #1
sab113
Membre du Club
 
Inscription : septembre 2009
Messages : 47
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 47
Points : 45
Points : 45
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
Citation:
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:
Citation:
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:
Citation:
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.
sab113 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 00h14   #2
tchize_
Expert Confirmé Sénior
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 18 287
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : Belgique

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

Informations forums :
Inscription : avril 2007
Messages : 18 287
Points : 32 766
Points : 32 766
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
un ficher docx n'est pas une ficheir texte, c'est un fichier binaire, tu ne saura pas le lire avec un Reader java.
__________________
⥀⥁ Чиз 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.
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2013, 22h01   #3
sab113
Membre du Club
 
Inscription : septembre 2009
Messages : 47
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 47
Points : 45
Points : 45
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:
Citation:
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.
sab113 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2013, 22h38   #4
tchize_
Expert Confirmé Sénior
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 18 287
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : Belgique

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

Informations forums :
Inscription : avril 2007
Messages : 18 287
Points : 32 766
Points : 32 766
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
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.
__________________
⥀⥁ Чиз 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.
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h26.


 
 
 
 
Partenaires

Hébergement Web