Traducteur

zargooo04 Messages postés 22 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 15 septembre 2010 - 22 juin 2010 à 19:22
edouard333 Messages postés 62 Date d'inscription samedi 23 décembre 2000 Statut Membre Dernière intervention 18 décembre 2011 - 28 juin 2010 à 22:07
bjr, a ce que qu'elle qu'un a une aidée d'un traducteur arab-françai comment ça marche.
merci pour votre attention

1 réponse

edouard333 Messages postés 62 Date d'inscription samedi 23 décembre 2000 Statut Membre Dernière intervention 18 décembre 2011 1
28 juin 2010 à 22:07
Moi, j'utilise un alogithme simple:
Tu m'es chaque mot dans une variable et tu fais des testes de chaques combinaisons, je sais que sait quelque chose de très con et peu être simplifié mais voila comment marche mon traducteur (au niveau de l'algo):
Je mange une pomme.
0 1 2 3

Et en suite je teste chaque possibilité:
0 + " " + 1 + " " + 2 + " " + 3 = Je mange une pomme --> et je vérifie si ça existe.*
0 + " " + 1 + " " + 2 = Je mange une --> et je vérifie si ça existe.*
0 + " " + 1= Je mange --> et je vérifie si ça existe.*
0= Je --> et je vérifie si ça existe.*
Après il faut recommencer si même le dernière élément n'a pas été trouvé:
1 + " " + 2 + " " + 3 = mange une pomme --> et je vérifie si ça existe.*
1 + " " + 2 = mange une --> et je vérifie si ça existe.*
1= mange --> et je vérifie si ça existe.*
0= Je --> et je vérifie si ça existe.*
Après il faut recommencer si même le dernière élément n'a pas été trouvé:
...
Et ainsi de suite.
*Et si ça n'existe pas, alors je continue.

Je te donne le code source, mais il est gréfé à mon traducteur, donc il faut l'adapter:
   import java.io.*;
   import java.io.FileNotFoundException;
   import java.util.Scanner;

    public class Traduire{
   
   //Base de données:
      Base base= new Base();
   
      static int nbmot= 0;
      static String[] txt;
      static int mot_fait= 0;
      static int mot_faire;
      static String ligne;
      static int nbfois;
      static String nom_fichier= null;
      static int nb;
   
      static String cara_1;
      static String cara_2;
   
      static String memoire;
   
      static String premier_mot;
      static String deuxieme_mot;
   
      static PrintWriter entree;
   
       public Traduire() throws IOException{
      
      //Valeurs donnée a des variables:
         nbmot= 0;
         mot_fait= 0;
         mot_faire= 0;
         ligne= "";
         nbfois= 0;
         nom_fichier= null;
         nb= 0;
      
         //System.out.println("");
         //System.out.println("On rentre dans: Traduire du texte");
      
      //Algorithme pour avoir la meilleure traduction possible:
      
      //Préparation:
         entree= new PrintWriter (new FileWriter (base.Lieu_Txt_Trad(Fenetre.saisie.getText())));
      
         {
            Scanner sc= new Scanner(Fenetre.txt.getText());
            try{
               while(true){
                  ligne= sc.next();
                  nbmot++;
               }
            }
                catch(Exception e){
                  System.out.println("Il y a: "+nbmot+" mot(s)");
                  sc.close();
               }
         }
      
         txt= new String[nbmot+1];
      
         {
            Scanner sc= new Scanner(Fenetre.txt.getText());
            for(int nb= 1; nb < nbmot+1; nb++){
               txt[nb]= sc.next();
            //System.out.println("txt["+nb+"]= "+txt[nb]);
            }
            sc.close();
         }
      
         System.out.println("");
         System.out.println("");
      
      //-----------------------------------------------------------------------------------------
      
         try{
         
         TOUT:
            for(mot_faire= nbmot; mot_faire > 0; mot_faire--){
            
               int aff= 0;
               for(nbfois= mot_faire; nbfois > 0; nbfois--){
                  aff++;
               
                  if(aff > (nbmot/7)+5){
                     System.out.println("nbmot: "+nbmot+", mot_fait: "+mot_fait+"[mot_faire: "+mot_faire+"], nbfois: "+nbfois+"\t "+(int)((float)mot_fait/(float)nbmot*100.0)+"%");
                     aff= 0;
                  }
               
                  nb= 0;
               	
                  try{
                     for(nb= 1+mot_fait; nb < (nbfois+1+mot_fait); nb++){
                     
                        if(nb == txt.length)
                           break;
                     
                        if(nom_fichier == null)
                           nom_fichier= txt[nb];
                        else
                           nom_fichier+= " "+txt[nb];
                           
                     }
                  
                  }
                      catch(Exception e){
                        break TOUT;
                     }
               
                  if(".".equals(nom_fichier)){
                     entree.print(".");
                     entree.println("");
                     mot_fait= nb-1;
                  }
                  else
                  Catch:
                     try{
                        if(Lecture_f(nom_fichier))
                           break TOUT;
                     }
                     //Erreur quand le mot n'existe pas:
                         catch(Exception e){
                         
                           if("Oui".equals(base.traduction_intelligente)){
                           
                           //On vérifie s'il n'y a pas ':
                              try{
                              
                              //On ne reprend que le nom du fichier, sans " ' ".
                                 Scanner s= new Scanner(nom_fichier).useDelimiter("\\s*'\\s*");
                              
                                 premier_mot= s.next();
                              //System.out.println("Mot: "+premier_mot);
                              
                                 deuxieme_mot= s.next();
                              //System.out.println("Mot: "+deuxieme_mot);
                              
                                 Lecture_f(premier_mot, 1);
                              
                                 if(Lecture_f(deuxieme_mot))
                                    break TOUT;
                              
                                 s.close();
                              
                              }
                                  catch(Exception ev){
                                    memoire= "false";
                                 }
                              
                           	
                           //System.out.println("On verifie si memoire['"+memoire+"'] est egal a 'true'.");
                              if("true".equals(memoire)){
                              //System.out.println("On oblige de quitter");
                                 memoire= "";
                                 break Catch;
                              }
                              else
                                 memoire= "";
                           
                           //---------------------------------------------------------------------------------
                           //							Revoir le code à partir d'ici, jusque ...
                           //---------------------------------------------------------------------------------
                           
                           //Le nombre de caractère de 'nom_fichier':
                              int nb_cara= nom_fichier.codePointCount(0, nom_fichier.length());
                           	
                           //On vérifie si le mot n'a pas de caractères spéciaux, du style "alors,":
                           //Cette partie met la traduction en doute, c'est "organisé" a qu'il y ait d'abord le plus compliqué puis le plus simple.
                           
                           //On vérifie si le mot n'a pas de caractères spéciaux après, du style "alors,":
                           TRY2:
                              try{
                                 
                              //On affiche le nombre de caractère de 'nom_fichier':
                                 //System.out.println("Nombre de caractere de 'nom_fichier' ('' ?, ''): "+nb_cara);
                                 
                              //On remet le mot 'nom_fichier' dans un String mais sans son dernier caractère.
                                 String nouveau_mot= nom_fichier.substring(0, nb_cara-1);
                                 //System.out.println("Nouveau mot: "+nouveau_mot);
                                 
                                 String cara= nom_fichier.substring(0, 1);
                                 if("/".equals(cara) ^ ".".equals(cara) ^ "!".equals(cara) ^ "#".equals(cara) ^ "(".equals(cara) ^ ")".equals(cara) ^ ":".equals(cara) ^ ",".equals(cara) ^ ";".equals(cara))
                                    break TRY2;
                              //else
                              //System.out.println("Donc la valeur est: "+cara);
                              	
                              //On garde en mémoire le dernier caractère de 'nom_fichier':
                                 String cara_1= nom_fichier.substring(nb_cara-1);	
                                 //System.out.println("Le cara: "+cara_1);
                                 
                                 if(Lecture_f(nouveau_mot, cara_1))
                                    break TOUT;
                                 
                              }
                                  catch(Exception evt){
                                 //System.out.println("Erreur...");
                                 }
                            
                              if("true".equals(memoire)){
                                 memoire= "";
                                 break Catch;
                              }
                              else
                                 memoire= "";
                           
                           //On vérifie si le mot n'a pas de caractères spéciaux avant 2 et après, du style "":
                              try{
                                 
                              //On affiche le nombre de caractère de 'nom_fichier':
                              //System.out.println("Nombre de caractere de 'nom_fichier' ('' </?> ''): "+nb_cara);
                                 
                              //On remet le mot 'nom_fichier' dans un String mais sans son premier et deuxième caractères.
                                 String nouveau_mot_b= nom_fichier.substring(1, nb_cara-1);
                                 String nouveau_mot= nouveau_mot_b.substring(1);
                              //System.out.println("Nouveau mot: "+nouveau_mot);
                              
                              //On garde en mémoire les premiers caractères de 'nom_fichier':
                                 String cara_1= nom_fichier.substring(0, 2); //Le '0' ici c'est pour dire qu'on ne garde que les '2' premiers caractères.
                              //System.out.println("Le cara 1: "+cara_1);
                              
                              //On garde en mémoire le dernier caractère de 'nom_fichier':
                                 String cara_2= nom_fichier.substring(nb_cara-1);
                              //System.out.println("Le cara 2: "+cara_2);
                                 
                                 if(Lecture_f(nouveau_mot, cara_1, cara_2))
                                    break TOUT;
                                 
                              }
                                  catch(Exception evt){
                                 //System.out.println("Erreur: "+evt);
                                 }
                           
                              if("true".equals(memoire)){
                                 memoire= "";
                                 break Catch;
                              }
                              else
                                 memoire= "";
                           
                           //On vérifie si le mot n'a pas de caractères spéciaux avant et après 2 fois, du style "(bonjour):":
                              try{
                                 
                              //On affiche le nombre de caractère de 'nom_fichier':
                              //System.out.println("Nombre de caractere de 'nom_fichier' ('' (?): ''): "+nb_cara);
                                 
                              //On remet le mot 'nom_fichier' dans un String mais sans son premier et (avant- et)dernier caractère.
                                 String nouveau_mot_b= nom_fichier.substring(1, nb_cara-1);
                              //System.out.println("Nouveau mot beta: "+nouveau_mot_b);
                                 String nouveau_mot= nouveau_mot_b.substring(0, nb_cara-3);
                              //System.out.println("Nouveau mot: "+nouveau_mot);
                                 
                              //On garde en mémoire le premier caractère de 'nom_fichier':
                                 String cara_1= nom_fichier.substring(0, 1);	
                              //System.out.println("Le cara 1: "+cara_1);
                              
                              //On garde en mémoire les derniers caractères de 'nom_fichier':
                                 String cara_2= nom_fichier.substring(nb_cara-2);
                              //System.out.println("Le cara 2: "+cara_2);
                                 
                                 if(Lecture_f(nouveau_mot, cara_1, cara_2))
                                    break TOUT;
                                 
                              }
                                  catch(Exception evt){
                                 //System.out.println("Erreur...");
                                 }
                           
                              if("true".equals(memoire)){
                                 memoire= "";
                                 break Catch;
                              }
                              else
                                 memoire= "";
                           
                           //On vérifie si le mot n'a pas de caractères spéciaux avant et après, du style "":
                           TRY2:
                              try{
                              
                              //On affiche le nombre de caractère de 'nom_fichier':
                              //System.out.println("Nombre de caractere de 'nom_fichier' ('' <?> ''): "+nb_cara);
                                 
                              //On remet le mot 'nom_fichier' dans un String mais sans son premier et dernier caractère.
                                 String nouveau_mot= nom_fichier.substring(1, nb_cara-1);
                              //System.out.println("Nouveau mot: "+nouveau_mot);
                                 
                              //On garde en mémoire le premier caractère de 'nom_fichier':
                                 String cara_1= nom_fichier.substring(0, 1);
                              //System.out.println("Le cara: "+cara_1);
                              
                                 String cara_b= nom_fichier.substring(0, 2);
                                 String cara= cara_b.substring(1);
                                 if("/".equals(cara) ^ ".".equals(cara) ^ "!".equals(cara) ^ "#".equals(cara) ^ "(".equals(cara) ^ ")".equals(cara) ^ ":".equals(cara) ^ ",".equals(cara) ^ ";".equals(cara))
                                    break TRY2;
                              //else
                              //System.out.println("Donc la valeur est: "+cara);  
                              
                              
                              //On garde en mémoire le dernier caractère de 'nom_fichier':
                                 String cara_2= nom_fichier.substring(nb_cara-1);
                              //System.out.println("Le cara: "+cara_2);
                                 
                                 if(Lecture_f(nouveau_mot, cara_1, cara_2))
                                    break TOUT;
                                 
                              }
                                  catch(Exception evt){
                                 //System.out.println("Erreur...");
                                 }
                           
                              if("true".equals(memoire)){
                                 memoire= "";
                                 break Catch;
                              }
                              else
                                 memoire= "";
                           
                           //On vérifie si le mot n'a pas de caractères spéciaux avant et après 2 fois, du style "alors...":
                           TRY:
                              try{
                              
                              //Vérification:
                                 try{
                                    Scanner sc= new Scanner(nom_fichier);
                                    String ligne_b= sc.next();
                                    ligne_b= sc.next();
                                    break TRY;
                                 }
                                     catch(Exception evt){}
                              
                              //On affiche le nombre de caractère de 'nom_fichier':
                              //System.out.println("Nombre de caractere de 'nom_fichier' ('' ?... ''): "+nb_cara);
                                 
                              //On remet le mot 'nom_fichier' dans un String mais sans son premier et (avant- et)dernier caractère.
                                 String nouveau_mot= nom_fichier.substring(0, nb_cara-3);
                              //System.out.println("Nouveau mot: "+nouveau_mot);
                              
                              //On garde en mémoire les derniers caractères de 'nom_fichier':
                                 String cara_1= nom_fichier.substring(nb_cara-3);
                              //System.out.println("Le cara: "+cara_1);
                              
                                 if(Lecture_f(nouveau_mot, cara_1))
                                    break TOUT;
                                 
                              }
                                  catch(Exception evt){
                                 //System.out.println("Erreur...");
                                 }
                           
                              if("true".equals(memoire)){
                                 memoire= "";
                                 break Catch;
                              }
                              else
                                 memoire= "";
                           
                           //---------------------------------------------------------------------------------
                           //							... là, pour le simplifier, l'améliorer.
                           //---------------------------------------------------------------------------------
                           }
                        
                        //Toute la procédure pour être sûr qu'on peut donner la valeur par défaut.
                           if(nb == 2+mot_fait){
                              mot_fait++;
                              if(mot_fait+1 > nbmot){
                                 entree.print(nom_fichier);
                                 break TOUT;
                              }
                              else
                                 entree.print(nom_fichier+" ");
                           }
                        }
                        
                  nom_fichier= null;
               
               }
            
            }
         
            entree.close();
         }
         //Quand il y a une erreur:
             catch(Exception e){
            }
      }
    
       private boolean Lecture_f(String nom_fichier) throws IOException{
       
         Fichier_lire(nom_fichier);
      
         mot_fait= nb-1;
      //System.out.println("Nb= "+(nb-1)+", mot fait= "+mot_fait);
      
         if(mot_fait+1 > nbmot){
            entree.print(ligne);
            return true;
         }
         else
            entree.print(ligne+" ");
      
      //System.out.println(" Fin lecture du fichier: '"+nom_fichier+".txt'");
      
         this.memoire= "true";
         return false;
      
      }
   	
       private boolean Lecture_f(String nom_fichier, String cara) throws IOException{
        
         Fichier_lire(nom_fichier);
      
         try{
            String m= "?";
            Scanner l= new Scanner(nom_fichier);
         
            while(m != null){
               m= l.next();
               mot_fait++;
            }
         }
             catch(Exception e){
               System.out.println("Le fichier[erreur]: "+nom_fichier+" -Erreur\n"+e);
            }
      
      
         if(mot_fait+1 > nbmot){
            entree.print(ligne+cara);
          
            if(".".equals(cara) ^ "." == cara)
               entree.println("");
         	
            return true;
         }
         else{
            entree.print(ligne+cara+" ");
            if(".".equals(cara) ^ "." == cara)
               entree.println("");
         }  
      	 
      //System.out.println(" Fin lecture du fichier: '"+nom_fichier+cara+".txt'");
      
         this.memoire= "true";
         return false;
      
      }
   	
       private boolean Lecture_f(String nom_fichier, String cara_1, String cara_2) throws IOException{
      
         Fichier_lire(nom_fichier);
      
         try{
            String m= "?";
            Scanner l= new Scanner(nom_fichier);
         
            while(m != null){
               m= l.next();
               mot_fait++;
            }
         }
             catch(Exception e){
               System.out.println("Le fichier[erreur]: "+nom_fichier+" -Erreur\n"+e);
            }
      
      
         if(mot_fait+1 > nbmot){
            entree.print(cara_1+ligne+cara_2);
          
            if(".".equals(cara_2) ^ "." == cara_2)
               entree.println("");
         	
            return true;
         }
         else{
            entree.print(cara_1+ligne+cara_2+" ");
            if(".".equals(cara_2) ^ "." == cara_2)
               entree.println("");
         }  
      	 
         //System.out.println(" Fin lecture du fichier: '"+cara_1+nom_fichier+cara_2+".txt'");
      
         this.memoire= "true";
         return false;
      
      }
   	
       private void Lecture_f(String nom_fichier, int cara) throws IOException{
        
         Fichier_lire(nom_fichier);
      
         entree.print(ligne+" ");
      
      //System.out.println(" Fin lecture du fichier: '"+nom_fichier+"'.txt'");
      
         Scanner sc= new Scanner(premier_mot+"'"+deuxieme_mot);
      
         String mot_1= sc.next();
      //System.out.println("mot_1: "+mot_1);
      
         try{
         //On modifie le txt[i] qu'on a utilisé:
            for(int a= 0; a < txt.length; a++){
            
               if(mot_1.equals(txt[a])){
               //System.out.println("Trouver");
                  
                  Scanner txt= new Scanner(this.txt[a]).useDelimiter("\\s*'\\s*");
                  
                  String plus_utile= txt.next();
                  
                  this.txt[a]= txt.next();
                  
                  txt.close();
                
                  this.memoire= "true";  
               	
               }
               else{
               //System.out.println("txt["+a+"]: '"+txt[a]+"', mot_1: '"+mot_1+"'");
                  this.memoire= "false";
               }
              
            }
         }
             catch(Exception ev){
               System.out.println("Erreur:\n"+ev);
            }
      
         sc.close();
      
      }
   	
       private void Fichier_lire(String nom_fichier) throws IOException{
         //System.out.println("-- Lien vers le fichier: '"+base.Lieu_Mot(nom_fichier)+"'");
      
         BufferedReader charger= new BufferedReader(new FileReader(base.Lieu_Mot(nom_fichier)));
      
         ligne= charger.readLine();
      
         //System.out.println("Lecture de la ligne: "+ligne);
         charger.close();
      }
   	
   }
0
Rejoignez-nous