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

avec Java Discussion :

reconnaissance de mot


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 115
    Points : 62
    Points
    62
    Par défaut reconnaissance de mot
    bonjour, je voudrais savoir s'il y a un moyen de reconnaitre un mot dans un String,exemple pour le mot bonjour, je pourrait avoir bonjour dans bjkoknjkoiuytr, la première et la derniere lettre sont déjà correctement identifiable.

    Merci de votre compréhension

  2. #2
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Il suffit de transformer ton string en tableau de caractère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char[] tab = monString.toCharArray();
    ensuite tu parcours ton tableau de caractère et tu compare avec chaque caractère de "bonjour".
    Un truc dans ce style :
    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
     public static void main(String[] arrrrrrrgs){
           String chaine = "bjkoknjkoiuytr";
           String cle = "bonjour";
           char[] tabChaine = chaine.toCharArray();
           char[] tabCle = cle.toCharArray();
     
           int indice = 0;
           for(int i=0;i<tabChaine.length;i++){
               if(tabChaine[i] == tabCle[indice]){
                   indice++;
               }
               if(indice == tabCle.length){//Mot trouvé
                   break;
               }
           }
     
           if(indice == tabCle.length){//Mot trouvé?
              System.out.println("\""+cle +"\" est dans la chaine :"+chaine);
           }else{
               System.out.println("\""+cle +"\" n'est pas dans la chaine :"+chaine);
           }
     
        }
    la première et la derniere lettre sont déjà correctement identifiable.
    Je ne l'ai pas pris en compte ci-dessus. A toi de gérer ça

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 115
    Points : 62
    Points
    62
    Par défaut
    pour gérer "la première et la dernière lettre sont déjà correctement identifiable", j'ai fais quelques modifications au niveau des conditions, je voudrais savoir si ce sont des bonnes modifications

    voici le code :
    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
          public static void main(String []args)
          {
     
        // coment gerer ->> la première et la derniere lettre sont déjà correctement identifiable. 
            String chaine = "bjkoknjkoiuytr";
            String cle = "bonjour";
            char[] tabChaine = chaine.toCharArray();
            char[] tabCle = cle.toCharArray();
     
            int indice = 0;
            for(int i=0;i<tabChaine.length;i++)
            {
              if(tabChaine[i] == tabCle[indice])
              {
                  indice++;
              }
              if( (indice == tabCle.length) && 
                  (tabChaine[0]==tabCle[0]) && 
                  (tabChaine[tabChaine.length-1]==tabCle[tabCle.length-1])//Mot trouvé
                )
              {
                break;
              }
            }
            if( (indice == tabCle.length) && 
                (tabChaine[0]==tabCle[0]) && 
                (tabChaine[tabChaine.length-1]==tabCle[tabCle.length-1])//Mot trouvé?
              )
            {
     
              System.out.println("\""+cle +"\" est dans la chaine :"+chaine);
            }
            else
            {
              System.out.println("\""+cle +"\" n'est pas dans la chaine :"+chaine);
            }
     
          }

  4. #4
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    ça à l'air bon
    J'aurais plutôt encapsulé le tous dans un if mais ça revient au même... les goût et les couleurs
    Je le marque quand même :
    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
            int indice = 0;
     
            if(tabCle[0] == tabChaine[0] && tabCle[tabCle.length-1] == tabChaine[tabChaine.length-1]){
     
                indice = 1;//On commence par la seconde lettre
                for(int i=0;i<tabChaine.length;i++){
                    if(indice >= tabCle.length-1){//On finit par l'avant dernière lettre
                        break;
                    }
                    if(tabChaine[i] == tabCle[indice]){
                        indice++;
                    }
     
                }
            }
     
            if(indice >= tabCle.length-1){//Mot trouvé?
                System.out.println("\""+cle +"\" est dans la chaine :"+chaine);
            }else{
                System.out.println("\""+cle +"\" n'est pas dans la chaine :"+chaine);
            }

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 115
    Points : 62
    Points
    62
    Par défaut
    je voulais recherché un mot dans un tableau de mot de type Araylist
    utilisant le même procédé cependant j'ai des erreurs:
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
    at Dictionnaire.recherche(Dictionnaire.java:83)

    la ligne 83 correspond à :
    if(tabCle[0] == tabChaine[0] && tabCle[tabCle.length-1] == tabChaine[tabChaine.length-1])

    la methode retourne un String (le mot trouver).

    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
     
         //protected ArrayList<String> mot;
        public String recherche(String chaine)
        {
            // String chaine = "bjkoknjkoiuytr";
            //String cle = "bonjour";
            String mot_trouver="";// initialisation
     
            char[] tabChaine = chaine.toCharArray();
     
            for(int i=0;i<mot.size();i++)
            {
                  char[] tabCle = mot.get(i).toCharArray();
     
                  int indice = 0;
     
                  if(tabCle[0] == tabChaine[0] && tabCle[tabCle.length-1] == tabChaine[tabChaine.length-1])
                  {
     
                    indice = 1;//On commence par la seconde lettre
                    for(int j=0;j<tabChaine.length;j++)
                    {
                      if(indice >= tabCle.length-1) //On finit par l'avant dernière lettre
                      {
                        break;
                      }
                      if(tabChaine[j] == tabCle[indice])
                      {
                        indice++;
                      }
     
                    }
                  }
                  if(indice >= tabCle.length-1)//Mot trouvé?
                  {
                    mot_trouver=tabCle.toString(); //transformation en String
                    break;
                    //System.out.println("\""+cle +"\" est dans la chaine :"+chaine);
                  }
                  else
                  {
                    //System.out.println("\""+cle +"\" n'est pas dans la chaine :"+chaine);
                  }
     
            }
            return mot.get(mot.indexOf(mot_trouver));
        }

  6. #6
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    java.lang.ArrayIndexOutOfBoundsException: 0
    ça signifie que tu es sortie du tableau.
    Donne nous le contenu de ton arraylist "mot".

    Je continue dans les explications :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char[] tabCle = mot.get(i).toCharArray();
    Ici tu prend le String contenu à la position i de l'arrayList, que tu transforme en tableau -> pas de problème
    Ici tu regarde le premier caractère du String.
    Et si String = ""? réponse : erreur ArrayIndexOutOfBoundsException: 0
    Idem pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabCle[tabCle.length-1]
    Solution à mettre en place : mettre un petite condition qui vérifie que string.length >=1

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 115
    Points : 62
    Points
    62
    Par défaut
    je met chaque mot d'un fichier dans le ArayList, chaque ligne du fichier je la met dans l'ArayList.
    le fichier contient par exemple
    ...
    ...
    abaissement
    abaisser
    abandon
    abandonnant
    abandonne
    abandonné
    ...
    ...

    Il y a plus de 2000 mots dans le fichier

    j'ai essayer de faire la modification, cependant il y a toujours un problème:
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1

    de plus je pensais que la méthode toString() me permettais de rendre un tableau de caractère en un String, le contraire de toCharArray(),

    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
     
        public String recherche(String chaine)
        {
            // String chaine = "bjkoknjkoiuytr";
            //String cle = "bonjour";
            String mot_trouver="";// initialisation
     
            char[] tabChaine = chaine.toCharArray();
     
            for(int i=0;i<mot.size();i++)
            {
                  char[] tabCle = mot.get(i).toCharArray();
     
                  int indice = 0;
                  if (tabCle.length >=1)
                  {
                    if(tabCle[0] == tabChaine[0] && tabCle[tabCle.length-1] == tabChaine[tabChaine.length-1])
                    {
     
                      indice = 1;//On commence par la seconde lettre
                      for(int j=0;j<tabChaine.length;j++)
                      {
                        if(indice >= tabCle.length-1) //On finit par l'avant dernière lettre
                        {
                              break;
                        }
                        if(tabChaine[j] == tabCle[indice])
                        {
                              indice++;
                        }
     
                      }
                    }
     
                    if(indice >= tabCle.length-1)//Mot trouvé?
                    {
                      mot_trouver=tabCle.toString();
                      break;
                      //System.out.println("\""+cle +"\" est dans la chaine :"+chaine);
                    }
                    else
                    {
                      System.out.println("\""+mot_trouver +"\" n'est pas dans la chaine :"+chaine);
                    }
                }
     
     
            }
            return mot.get(mot.indexOf(mot_trouver));
        }

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    j'ai essayer de faire la modification, cependant il y a toujours un problème:
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
    le problème vient visiblement de ton tabCle.length-1. Visiblement tu as un "mot" qui, transformé en tableau de caractère, donne un tableau de longueur 0.
    Donc quand tu soustrais 1 tu vas chercher l'entrée du tableau à la position -1, et ça crée une erreur.
    Tu n'as qu'à rajouter une condition du genre tabCle.length>0
    ça fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(tabCle.length>0 && tabChaine.length>0 && tabCle[0] == tabChaine[0] && tabCle[tabCle.length-1] == tabChaine[tabChaine.length-1])
    Pour changer un tableau de caractère en String, perso j'utiliserais simplement une boucle for du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String mot = "";
    for(int i = 0; i < tableau.length; i++){
       mot += tableau[i];
    }

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 115
    Points : 62
    Points
    62
    Par défaut
    malgré la modification faite sur la condition, il y a toujours l'erreur suivante :
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1

    l'erreur est dans la méthode recherche, cependant je n'arrive pas à la trouver, peut être est ce que c'est dans l'obtention du mot trouver qu'il y a une erreur, c'est à dire que le mot trouver est mal situé dans le code ? ou bien dans le return?

    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
     
        public String recherche(String chaine)
        {
            // String chaine = "bjkoknjkoiuytr";
            //String cle = "bonjour";
            String mot_trouver="";// initialisation
     
            char[] tabChaine = chaine.toCharArray();
     
            for(int i=0;i<mot.size();i++)
            {
                  char[] tabCle = mot.get(i).toCharArray();
     
                  int indice = 0;
     
                  if(tabCle.length>0 && tabChaine.length>0 && tabCle[0] == tabChaine[0] 
                  && tabCle[tabCle.length-1] == tabChaine[tabChaine.length-1]) 
                  {
                    indice = 1;//On commence par la seconde lettre
                    for(int j=0;j<tabChaine.length;j++)
                    {
     
                          if(tabChaine[j] == tabCle[indice])
                          {
                               indice++;
                          }
                          if(indice >= tabCle.length-1) //On finit par l'avant dernière lettre
                          {
                               mot_trouver=new String(tabCle);
                               break;
                          }
                    }
                }
            }
            if(mot_trouver.equals("")==false)//Mot trouvé?
            {
                System.out.println("\""+mot_trouver  +"\" est dans la chaine :"+chaine);
            }
            if( mot_trouver.equals("")==true || mot.indexOf(mot_trouver)==-1)
            {
                  System.out.println("\""+mot_trouver +"\" n'est pas dans la chaine :"+chaine);
            }
            return mot.get(mot.indexOf(mot_trouver));
        }

  10. #10
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Envoie nous tous ton code + le fichier avec la liste des mots, pour qu'on puisse tester tous ça chez nous.

    A première vu c'est un mot qui bloque. peut-être le premier, peut-être le dernier.... Le mieux à faire dans c'est cas la c'est d'afficher le mot quand il passe dans la boucle et de regarder le dernier mot affiché.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 115
    Points : 62
    Points
    62
    Par défaut
    merci, le problème est résolu , merci encore pour vos aide ....

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

Discussions similaires

  1. Recuit simulé pour la reconnaissance de mots
    Par ChiiChii dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 20/04/2015, 20h51
  2. Reconnaissance de mots arabes en utilisant la distance tangente
    Par adili_n dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 13/11/2011, 22h18
  3. [OpenOffice] reconnaissance des mots anglais et français?
    Par loveflower dans le forum OpenOffice & LibreOffice
    Réponses: 6
    Dernier message: 16/01/2007, 18h44
  4. [langage] Reconnaissance de mots
    Par Flo. dans le forum Langage
    Réponses: 2
    Dernier message: 11/08/2002, 00h34

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