(debutant )Frequence des mots

Signaler
Messages postés
9
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
7 juin 2007
-
Messages postés
9
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
7 juin 2007
-
Salut tout le monde,
Je voudrais savoir comment calculer  la Frequence des mots dans  un corpus composé de plusieurs documents..
la sortie devrait ressembler à ça:
index du document - mot - freqence

Exemple : Doc:1 { salon: 3,table:1}
                  Doc:2 { bilan:1, cheque:4} etc..
Avez vous  svp une idee!?
merci

9 réponses

Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut:

Je ne vois pas où est le problème.

Il faut juste:

1. Créer une structure de données (tableau, liste, ...)
Personnellement je te conseille d'utiliser une liste.
 
2. lire le fichier ligne par ligne
3. Extraire les jetons de chaque ligne:
 - Voir si la liste contient cet élément si oui incrémenter le nombre d'occurence
 - Sinon ajouter une nouvelle entrée de cet élément dans la liste.

4. Répèter ces points.

Ou bien:

Extraire tous les mots du fichier, puis le mettre dans un tableau
Trier ce tableau
Compter le nombre d'occurence de chaque élément.
Messages postés
9
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
7 juin 2007

merci , je veux utiliser au fait un HashMap comme structure de données,  pourquoi trouves tu une liste meilleure?
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut:

Je trouve une liste la structure de données la plus adéquate pour deux choses:

1. On est en train d'ajouter les éléments au fûr et à mesure de notre recherche; création de nouvelles entrées.

2. On est en train de réaliser un accès séquentielle lors des éléments existents.

ça n'empêches pas que d'autres structures de données sont aussi favorables, une liste traduit parfaitement ce que je pense c'est tout.

Remarque:
Tu peux utiliser un HashSet pour unifier le tableaux, enlever les doublons.
Messages postés
9
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
7 juin 2007

Salut :
Cela marche pour un seul et unique fichier, si je veux  obtenir le nombre d'occurence des mots dans plusieurs fichiers simultanément, il faudra implementer une "matrice-document-terme" et ça, ça me depasse!!
Messages postés
9
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
7 juin 2007

Salut :
Cela marche pour un seul et unique fichier, si je veux  obtenir le nombre d'occurences des mots dans plusieurs fichiers simultanément, il faudra implementer une "matrice-document-terme" et ça, ça me depasse!!
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut:

Je ne vois pas où est le problème. Que ce soit un fichier ou plusieurs c'est le même procédé.

Quel problème as tu rencontré?

---------------------------------------------------------------------------------
A.B. : Qui veut faire quelque chose trouve un moyen.
       Qui ne veut faire rien trouve un excuse
Messages postés
9
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
7 juin 2007

D'abord y'a un probleme avec la methode StringTokenizer , j'arrive pas a splitter en tokens tous le fichier. y'a aussi l'indexation des differents documents qui composent le corpus! Encore une fois  chaque document   est representé par son index suivi du nombre d'occurrences des mots ou tokens qu'il contient:.
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut:

C'est ligne par ligne que tu cherches les tokens.
Si le fichier n'est pas long tu peux mettre tout le contenu de ce fichier dans une seul chaine de caractères.
Pour faire ça tu peux utiliser:
1. La méthode readFully ()
2. StringBuffer.
Messages postés
9
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
7 juin 2007

Je me suis mal fait comprendre peut-etre.mon idee etait d'implementer un matrice document-terme zu implementieren! Seulement j'ai des prblemes avec mon code.
<!-- --><!-- Created by AbiWord, a free, Open Source wordprocessor. --><!-- For more information visit http://www.abisource.com. --><!-- --><meta http-equiv="content-type" content="text/html;charset=UTF-8" /><title></title><style type="text/css"><!--
#toc,
.toc,
.mw-warning {
border: 1px solid #aaa;
background-color: #f9f9f9;
padding: 5px;
font-size: 95%;
}
#toc h2,
.toc h2 {
display: inline;
border: none;
padding: 0;
font-size: 100%;
font-weight: bold;
}
#toc #toctitle,
.toc #toctitle,
#toc .toctitle,
.toc .toctitle {
text-align: center;
}
#toc ul,
.toc ul {
list-style-type: none;
list-style-image: none;
margin-left: 0;
padding-left: 0;
text-align: left;
}
#toc ul ul,
.toc ul ul {
margin: 0 0 0 2em;
}
#toc .toctoggle,
.toc .toctoggle {
font-size: 94%;
}@media print, projection, embossed {
body {
padding-top:1in;
padding-bottom:1in;
padding-left:1in;
padding-right:1in;
}
}
body {
font-family:'Times New Roman';
color:#000000;
widows:2;
font-style:normal;
text-indent:0in;
font-variant:normal;
font-size:12pt;
text-decoration:none;
font-weight:normal;
text-align:left;
}
table {
}
td {
border-collapse:collapse;
text-align:left;
vertical-align:top;
}
p, h1, h2, h3, li {
color:#000000;
font-family:'Times New Roman';
font-size:12pt;
text-align:left;
vertical-align:normal;
}
--></style>
<colgroup><col /><col /><col /><col /><col /></colgroup>----
, TERME 1, TERME 2, TERME 3, TERME 4, ----
DOC 1, 2, 5, 8, 5, ----
DOC 2, 1, 4, 3, 7

import java.io.*;
import java.util.*;

 
class CorpVectors
{
    int[][] docVector;
    
    int docAnz;
    int termeAnz;    
    
    CorpVectors(AllDocs Corpus)
    {    docAnz= Corpus.allDocsArray.length;  
        termeAnz= Corpus.indexSetArray.length;  // nbre de Textes
        System.out.println("length: " +termeAnz);
        docVector = new int[docAnz][termeAnz];    
        
    }
 
 
 
   
    void fillDocVector(AllDocs Corpus)
    {    int i;    //doc
        int j;    //term
        
        for(i=0; i<this.docAnz; i++)
        {    for(j=0; j<this.termeAnz; j++)
            {    this.docVector[i][j]= frequence(i, j, Corpus);
 
            }//for
        }//for
        
    }//fillDocVector
  */
    int frequence(int docInd, int termInd, AllDocs Corpus)
    {    int counter=0;
        String Word= (String)Corpus.indexSetArray[termInd];
        AllDocs.Document Doc= (AllDocs.Document) Corpus.allDocsArray[docInd];
        int k;
        
 
        for(k=0; k< Doc.index.length; k++)
        {    if( Doc.index[k].indexOf( Word)!= -1)
            
                counter++;
        }
            //if((termInd==6 || termInd==33)&& counter!=0)    
            //System.out.println(docInd+"/"+suchWort+" ->"+counter);
        return(counter);
    }//frequence()
 
 
 
    void docVectorToFile(AllDocs Corpus)
    {    int i;    //doc
        int j;    //term
        
            
        try
        {                            
            for(i=0; i<this.docAnz; i++)
            {    FileWriter fw= new FileWriter("docVector.txt", true);
                BufferedWriter fwBuff= new BufferedWriter(fw);
 
                
                fwBuff.write("\n \nDOC " + i + ": " + ((AllDocs.Document)Corpus.allDocsArray[i]).title   + "\n");                
                for(j=0; j<this.termeAnz; j++)
                {    fwBuff.write("DOC " + i + " | TERM " + j + "-frequence-->  " + this.docVector[i][j] + "\n");
                    //System.out.println("DOC " + i + " | TERM " + j + "-frequence-->  " + this.docVector[i][j]);
                }//for
                
                fwBuff.close();                    
            }//for
            
        }
        catch (IOException e)
        {    System.out.println("Error docVectorToFile() -- " + e.toString());
        }
 
            
    }//docVectorToFile()
}