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.