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 :

Compter le nombre de bigrammes avec tokeniseur


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Femme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2015
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Compter le nombre de bigrammes avec tokeniseur
    Bonjour,

    J'ai fait un tokeniseur qui compte le nombre de fois ou un mot apparait dans un texte(cas unigramme). J'aimerais continuer pour compter le nombre de bigramme aussi pour àprès pour estimer les log probabilités. Est-ce que quelqu'un peut m'expliquer comment continuer sinon me donner un petit coup de main. Voici mon code :

    *****classe pour compter le nombre d'occurence************

    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
    package fil;
     
    public class Element {
        private String mot;
        private int nbOcc;
        public Element(String mot) {
            this.mot = new String(mot);
            nbOcc=1;
            }
        public String getMot() {
           return mot;
        }
        public void setMot(String mot) {
            this.mot = mot;
        }
        public int getNbOcc() {
            return nbOcc;
        }
        public void setNbOcc(int nbOcc) {
            this.nbOcc = nbOcc;
        }
        public boolean equals(String unMot){
            return mot.equals(unMot);
           }
        public void inc(){
            nbOcc++;
         }
     
      public void afficher(){
       System.out.println (mot+ "->" +nbOcc);
     
        }
    }
    *********classe pour le parcours des mots**********

    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
    package fil;
    public class ListeC {
        int queue;
        int max;
        Element[] tab;
        public ListeC(){
                            max=1000000;
                            tab= new Element[max];
                             queue=-1;
                                }
     
        public void adjq(Element v){
                            tab[queue+1]=v;
                            queue=queue+1;
                             }
     
        public void supq(){
                            queue=queue-1;
                             }
     
        public void afficher(){
     
            for(int i=0; i<queue+1; i++){
     
                tab[i].afficher();
                   }
            }
       public void ajouter (String mot){
                        int p=0;
                        boolean trouve = false;
                        while (p<=queue && !trouve){
                        if (tab[p].equals(mot)){
                               trouve=true;
                                                }
                        else{
                            p=p+1;
                              }
                                        }
     
            if (trouve) {
     
                tab[p].inc();
     
            }
     
            else {
     
                adjq(new Element(mot));
            }
        }
    }
    *********classe pour l'ouverture du fichier contenant les mots*************

    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
    52
    package fil;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;
    import java.util.StringTokenizer;
    import javax.swing.JFileChooser;
    public class tester {
     public static void main(String [] t){
     
            lirefichier();
        }
     
        public static void lirefichier(){
           ListeC l = new ListeC();
            try {
     
           JFileChooser dialogue = new JFileChooser("lexique.fr");
            File fichier;
                if (dialogue.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
                {
     
                   fichier = dialogue.getSelectedFile();
                           }
     
                else{
                fichier = new File("exemple"); //attention si le fichier n'existe pas !!
                     }
                Scanner sc = new Scanner(fichier);
                while (sc.hasNext())
                       {
                    String uneligne = sc.nextLine();
                  StringTokenizer st = new StringTokenizer(uneligne);
                while (st.hasMoreTokens())
                    {
                       l.ajouter(st.nextToken());
     
                    }
     
                }
     
            } catch (FileNotFoundException e) {
     
                System.out.println("pas de fichier");
     
                e.printStackTrace();
     
            }
     
            l.afficher();
        }
     
    }

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bonjour,

    Déjà en tout premier lieu, la convention de nommage java veut que les noms des classes commencent par une lettre majuscule.

    Donc, ici, ta classe ester devrait porter le nom : Tester.

    Qu'appelles tu, s'il te plaît les bigrammes ?

    les lettre "ph", "ch" etc ??

    Je jette un oeil et je te ré-écris
    OS : LinuxMint 20

  3. #3
    Candidat au Club
    Femme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2015
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    sa me feras vraiment plaisir et donner moi coups de main d'ici le 7(lundi) s'il vous plait

  4. #4
    Candidat au Club
    Femme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2015
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    exemple de bigramme: les bigramme d'un texte c'est les mots pris 2 à 2
    phrase: je vais a la maison
    les bigrammes de cette phrase sont: ''je vais'' ''vais a'' ''a la'' ' 'la maison''

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    L'ordre des mots compte dans un bigramme ? (je, vais) et (vais, je) sont 2 bigrammes distincts ou 1 seul ?

    En tout cas, pour la base de ce que tu veux faire, fais d'abord une classe Bigramme, qui a pour attribut les 2 mots. Et la liste sera List<Bigramme> listeDeBigrammes=new ArrayList<>();.

    Ensuite, le principe en gros, c'est d'utiliser la même méthode que tu utilises pour créer les unigrammes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    StringTokenizer st = new StringTokenizer(uneligne);
                while (st.hasMoreTokens())
                    {
                       l.ajouter(st.nextToken());
     
                    }
     
                }
    Simplement, il faut mémoriser tout token pour l'associer à son suivant, dans une variable.


    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
     
    String token1 = null;
    StringTokenizer st = new StringTokenizer(uneligne);
    while (st.hasMoreTokens()) {
         String token2 =  st.nextToken()
     
         // ...
     
         // créer le brgramme
         Bigramme bigramme = new Bigramme( token1, token2 );
         // tester si ce bigramme existe déjà (voir ma question du début)
         if  ( ... ) {
             listeDeBigrammes.ajouter(bigramme);
         }
     
         token1 = token2; // le token courant devient le premier pour le token suivant
     
    }
    le // ... c'est parce que lors de la récupération du premier token dans token2, on n'a pas encore de premier token pour le bigramme : token1 est null. On ignore donc ce cas :


    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
     
    String token1 = null;
    StringTokenizer st = new StringTokenizer(uneligne);
    while (st.hasMoreTokens()) {
         String token2 =  st.nextToken()
     
         if( token1!=null) {
     
            // créer le brgramme
            Bigramme bigramme = new Bigrammed( token1, token2 );
            // tester si ce bigramme existe déjà si necessaire (voir ma question du début)
            if  ( ... ) {
                listeDeBigrammes.ajouter(bigramme);
            }
         }
     
         token1 = token2; // le token courant devient le premier pour le token suivant
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Candidat au Club
    Femme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2015
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    on delimite les bigramme dans l'odre dans lequel il est donnée dans le texte meme.
    Exemple: je vais a la maison
    les bigrammes sont: '' je vais" "vais a " "a la" "la maison"
    on compte seulement: je vais => 1 bigramme
    vais a=>1 bigramme
    a la => 1 bigramme
    la maison=> 1 bigramme
    (on ne compte pas en sens inverse comme "vais je")

    donc dans cette phrase on a 4 bigramme

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je n'ai pas parlé de sens inverse : j'ai demandé si dans un même texte on avait 2 fois le même couple de mots dans un ordre différent, on comptait ça comme 1 bigramme ou 2 bigrammes distincts ! C'est par phrase ou par texte les bigrammes, parce que les unigrammes c'est par texte dans ton code !

    "Je vais à la maison ! Y vais-je seul ?" (je, vais) et (vais, je), un bigramme ou 2 bigrammes ?
    "Je cire la chaussure droite à la cire d'abeilles !" (cire, la) et (la, cire), un bigramme ou 2 bigrammes ?
    "Je ne peux pas mettre de point de suspension à la fin de cette phrase. C'est une interrogation !" (de, point) (point, de) !
    "Je m'effraie de savoir que cette effraie m'irrite à tel point". (m, effraie) et (effraie, m)....
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Candidat au Club
    Femme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2015
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    desoler j'avais pas bien c'est saisie oui c'est cas compter comme 2 bigrammes different parceque l'ordre des mots compte donc: "je vais" et "vais je" sont bien 2 bigrammes differents

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ok, tant mieux, parce que c'est le cas le plus simple, et c'est ce que je t'ai montré, sans le test évidemment :

    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
     
    String token1 = null;
    StringTokenizer st = new StringTokenizer(uneligne);
    while (st.hasMoreTokens()) {
     
         String token2 =  st.nextToken()
     
         if( token1!=null) {
     
            // créer le brgramme
            Bigramme bigramme = new Bigramme( token1, token2 );
            listeDeBigrammes.ajouter(bigramme);
     
        }
     
        token1 = token2; // le token courant devient le premier pour le token suivant
     
    }
    Avec une classe Bigramme avec 2 attributs String (et les getters qui correspondent).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Problème : Compter un nombre de documents avec la fonction FSO
    Par Gaetan31 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/10/2014, 08h51
  2. compter le nombre d'éntree avec critére sur un champ
    Par gastoncs dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/03/2012, 07h47
  3. Compter le nombre de champs avec condition
    Par 73brunette73 dans le forum IHM
    Réponses: 3
    Dernier message: 31/05/2010, 06h27
  4. Compter le nombre d'entrée avec condition
    Par Seta-san dans le forum Langage
    Réponses: 5
    Dernier message: 17/02/2009, 12h20
  5. Compter nombre d'éléments avec valeur X dans un formulaire
    Par p0Kep0K dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/11/2005, 15h49

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