// ----------------------------------------------- // MODULE: URLTest.java // AUTEUR: felipe IFT1010 // OBJET: montrer que l'on peut lire une URL // aussi facilement qu'un fichier texte // ET montrer les HTables (hors programme) // ----------------------------------------------- import java.io.*; import java.net.*; import java.util.*; // ========================================================== // une classe static avec quelques outils // ========================================================== class Outils { // decouper une ligne de texte en "mots" static String [] tokenise(String ligne) { StringTokenizer tokens = new StringTokenizer (ligne," ,;:!?-()[]\n\t\r"); String [] ret = new String [tokens.countTokens()]; for (int i=0; tokens.hasMoreTokens(); i++) ret[i] = tokens.nextToken().toLowerCase(); return ret; } } // ============================================================================ // La classe principale // ============================================================================ public class URLTest { // des variables de classe private static String urlString = "http://www.iro.umontreal.ca/~felipe/IFT1010-Automne2000/Exemples/verne.fr"; private static Hashtable hm; private static Integer ref,un = new Integer(1); private static int nbFormes = 0; // nb de mots differents dans le texte lu private static int nbMots = 0; // nb de mots dans le texte lu private static int nbLignes = 0; // nb de lignes dans le texte lu // le traitement d'une ligne : on joue avec les hashtables private static void traitement(String ligne) { String [] mots = Outils.tokenise(ligne); nbLignes++; if ((nbLignes % 100) == 0) System.err.println("traitement de la ligne " + nbLignes); nbMots += mots.length; for (int i=0; i < mots.length; i++) { // chaque mot de la phrase ref = (Integer) hm.put(mots[i],un); if (ref == null) nbFormes++; else hm.put(mots[i], new Integer(ref.intValue()+1)); } } // la methode principale public static void main(String [] args) { String ligne; BufferedReader in; // un exemple de lecture d'une URL, inutile ici de s'attacher // aux details que nous ne verrons pas en cours comme les exceptions // ou les specificites des classes URL... try { URL urlAddress = new URL(urlString); URLConnection lien = urlAddress.openConnection(); in = new BufferedReader(new InputStreamReader(lien.getInputStream())); hm = new Hashtable(); while ((ligne = in.readLine()) != null) traitement(ligne); } catch (MalformedURLException e) { System.err.println("Pas tres fraiche ton URL: " + urlString + e); System.exit(1); } catch (IOException e) { System.err.println("Impossible d'acceder a l'URL: " + e); System.exit(1); } finally { // le reste du traitement System.out.println("Nombres de lignes lues " + nbLignes); System.out.println("Nombres de formes differentes " + nbFormes); System.out.println("Nombres de mots differents " + nbMots); } // le reste du traitement Enumeration enumKey = hm.keys(); Enumeration enumInfo = hm.elements(); int freq,max = 0; String mot, leMotPlusFrequent = "pas de mot"; while (enumKey.hasMoreElements() && enumInfo.hasMoreElements()) { freq = ((Integer)(enumInfo.nextElement())).intValue(); mot = (String) (enumKey.nextElement()); if (max < freq) { max = freq; leMotPlusFrequent = mot; } } System.out.println("Le mot le plus frequent est \"" + leMotPlusFrequent + "\" qui est apparu " + max + " fois"); } // fin du main }