import java.util.StringTokenizer; import java.util.Map; import java.util.Collection; import java.util.Iterator; import java.util.AbstractMap; import java.util.HashMap; public class mapa extends HashMap { /* Almacenaremos un mapa que tendra una palabra, y la cantidad de veces que aparece en el texto, además, un contador de palabras ingresadas */ public HashMap llave; int elementos; /* El constructor vacio */ public mapa() { this.llave = new HashMap(); this.elementos = 0; } /* El constructor a partir de un mapa */ public mapa(mapa m) { this.llave = m.llave; this.elementos = m.elementos; } /* El constructir a partir de un HashMap y el numero de elementos de este */ public mapa(HashMap h) { this.llave = h; this.elementos = h.size(); } /* Con este metodo procesamos una linea de texto separada por espacios en blancos y la metemos en un mapa */ public void Procesatexto(String texto) { String aux=null; Integer i=null; /* Usamos un Tokenizer para separar la palabra en espacios */ StringTokenizer st = new StringTokenizer(texto," "); while(st.hasMoreTokens()) { aux = st.nextToken(); /* Si la llave ya esta, tenemos que sumarle uno al numero de veces que sale esta palabra */ if(this.containsKey(aux)) { i = (Integer)this.get(aux); this.put(aux,new Integer(i.intValue()+1)); } else { /* Si la llave no esta, simplemente la agregamos */ this.put(aux,new Integer(1)); this.elementos++; } } return; } /* Este metodo nos entregara un iterador para poder correr sobre el mapa */ public Iterator MakeIterator() { Collection col = null; Iterator iterator = null; /* Con values() obtenemos una coleccion y con la coleccion obtenemos el iterador */ col = this.values(); iterator = col.iterator(); return iterator; } /* Este metodo nos dice cuantas palabras en total tengo en el mapa */ public int calculaPalabras() { Integer in = null; int i = 0; Iterator iterator = this.MakeIterator(); while(iterator.hasNext()) { in = (Integer)iterator.next(); i += in.intValue(); } return i; } /* Calcula la probabilidad de que una palabra se encuentre en el mapa */ public double calculaFrecuencia(String x) { int totales = this.calculaPalabras(); double prob = 0; if(this.containsKey(x)) { Integer aux = (Integer)this.get(x); prob = aux.doubleValue() / (double) totales; } return prob; } }