/** @author Adriano Luchetta @version 6-Nov-2004 classe eseguibile. Legge un testo da standard input e lo memorizza in un oggetto di classe AnalizzatoreDiTesto. Esegue successivamente la seguente elaborazione - separa il testo in parole - elimina dalle parole del testo i caratteri non alfabetici - rende minuscoli tutti i caratteri del testo - stampa a standard output * il testo originale * il numero delle parole contenute nel testo * la prima e l'ultima parola secondo l'ordine lessicografico * le 5 parole che compaiono piu' volte nel testo in ordine di occorrenza decrescente */ import java.util.Scanner; public class AnalisiTesto { public static void main(String[] args) { //lettura da standard input Scanner in = new Scanner(System.in); //definizione oggetto di classe AnalizzatoreDiTesto AnalizzatoreDiTesto testo = new AnalizzatoreDiTesto(); //memorizzazione del testo while (in.hasNextLine()) { String riga = in.nextLine(); testo.aggiungi(riga); } //System.out.println("\n***MESSAGGI DI DEBUGGING***\n"); //separazione delle parole e verifica relativa AnalizzatoreDiTesto testoSeparato = testo.separa(); //System.out.println("messaggio di debugging: testo con parole separate"); //System.out.println(testoElaborato); //eliminazione dei caratteri non alfabetici e verifica relativa AnalizzatoreDiTesto testoAlfabetico = testoSeparato.soloLettere(); //System.out.println("messaggio di debugging: testo solo alfabetico"); //System.out.println(testoElaborato); //conversione in caratteri minuscoli e relativa verifica AnalizzatoreDiTesto testoMinuscolo = testoAlfabetico.minuscolo(); //System.out.println("messaggio di debugging: testo minuscolo"); //System.out.println(testoElaborato); //stampa del testo originale System.out.println("***TESTO ORIGINALE***"); System.out.println(testo); System.out.println("***FINE TESTO ORIGINALE***"); //analisi del testo System.out.println("\n***ANALISI DEL TESTO***"); System.out.println("Testo di " + testoMinuscolo.conta() + " parole"); System.out.println(testoMinuscolo.minimo() + ": prima parola in ordine lessicografico"); System.out.println(testoMinuscolo.massimo() + ": ultima parola in ordine lessicografico"); /* l'algoritmo per ordinare le parole secondo la loro frequenza non è efficiente! Studieremo algoritmi efficienti. Per ora elenchiamo le parole in ordine decrescente di frequenza seplicemente estraendo dal testo la parola di frequenza massima e cancellandola successivamente (cancella restituisce l'occorrenza della parola) */ AnalizzatoreDiTesto tmpTesto = testoMinuscolo.copia(); int i = 0; while (i < 5 && !tmpTesto.vuoto()) { String tmpStr = tmpTesto.frequenzaMax(); int n = tmpTesto.frequenza(tmpStr); if (n == 1) System.out.println(" > " + tmpStr + ": " + n + " occorrenza"); else System.out.println(" > " + tmpStr + ": " + n + " occorrenze"); tmpTesto = tmpTesto.elimina(tmpStr); i++; } } }