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;
}
}