Compter les nombres d'occurrences des mots d'un texte

 

Objectifs : Manipulation de fichiers. Utilisation des classes Enumeration et Hashtable du paquetage java.1ang.

 

Reprise Gestion des exceptions. Manipulation d'objets Integer et String.

 

A noter : http://www.cict.fr/app/java.html  http://java.sun.com

 

Nous allons lister les différents mots d'un fichier en comptant pour chaque mot son nombre d'occurrences. Les mots ne seront pas triés par ordre. Pour exécuter le programme, il faudra indiquer sur la ligne de commande le nom d'un fichier contenant le texte à analyser.

 

Pour réaliser cette application, nous vous proposons d'utiliser :

 

·         Pour lire les mots du fichier, la classe BufferedReader du paquetage java.io.

 

Rappel : Il y a quatre classes "mères" abstraites, pour traiter les flots de données héritant directement d'Object :

·         pour traiter des flots d'octets : la classe InputStream et la classe OutputStream

·         pour traiter des flots de caractères : la classe Reader et la classe Writer.

 

·         Pour extraire un mot d'une ligne lue, la classe StringTokenizer du paquetage java.util.

 

·         Pour stocker les compteurs d'occurrences des mots, la classe Hashtable du paquetage java.util.

 

Une table de hachage sert à associer des objets à d'autres objets; les premiers servent de clé, ce qui signifie essentiellement qu'ils doivent être tous distincts ; nous les appellerons donc les clés ; on retrouvera un objet et la clé associée en donnant la valeur de la clé. En Java, tous les objets, clés ou accédés par les clés, doivent être de la classe Object  ou d'une sous‑classe de la classe Object. L'organisation interne d'une telle structure fait que les objets sont retrouvés avec une grande rapidité. Pour qu'une table de hachage puisse fonctionner, il faut que la classe des clés redéfinisse les méthodes hashcode() et equals() de la classe java.lang.Object. Dans notre programme, les clés seront de la classe string et cette classe redéfinit les méthodes hashCode() et equals().

Application : Les clés seront les mots du texte; l'objet rangé selon une clé (un mot) sera une instance de Integer donnant le nombre d'occurrences du mot correspondant.

 

·         Pour parcourir la table de compteurs afin d'afficher les résultats, la classe Enumeration du paquetage java.util.

 

 

1.   Consultez à l'adresse http://www.javasoft.com/products/jdk/1.3/docs/api/index.html les classes citées ci‑dessus et découvrez les méthodes à utiliser pour l'application.

 

Classe BufferedReader : le constructeur avec un argument , readLine()

 

Classe StringTokenizer : le constructeur, nextToken(), hasMoreTokens()

 

Classe Hashtable : le constructeur sans paramètre, put(), get(), containsKey(...), keys()

 

Classe Enumeration : hasMoreElement(), nextElement(...)

 

 

2.   Complétez le code de la classe CompterMots :

 

import java.io.*;

import java.util.*;

 

class CompterMots {

 

     public static void main (String[] argv) {

 

Hashtable table = new Hashtable();

       BufferedReader entree = new BufferedReader(?????);

String ligne;

StringTokenizer st;

 

while ((ligne = entree.readLine()) != null) {

st = new StringTokenizer(ligne, " ,.;:_-+*/\\.;\n\"'{}()=><\t!?");

 

       while (st.hasMoreTokens()) {

 

/* ENREGISTREMENT DANS LA TABLE DE HACHAGE : si le mot figure déjà, il faut incrémenter le nombre d'occurrences, et s'il ne figure pas, il faut l'ajouter avec un nombre d'occurrence égal à 1 */

            }

 

Enumeration lesMots = table.keys();

 

while (lesMots.hasMoreElements()) {

           //AFFICHAGE DES MOTS ET DE LEURS NOMBRES D'OCCURRENCES

    }

       }

   }

}

   

 

3.   Repérez les exceptions susceptibles d'être levées et traitez‑les dans la classe CompterMots.

 

4.   Rajoutez dans la classe CompterMots, la création d'un fichier texte résultat stockant les mots et leur nombre d'occurrence.