/**
   * Método que realiza todas las operaciones del algoritmo blindLight nombradas anteriormente:
   * obtiene los n-gramas del texto, sus frecuencias absoluta y relativa, estima su probabilidad
   * mediante el estimador Simple Good-Turing y, por último, aplica el estadístico elegido a cada
   * n-grama para establecer su significatividad (que es, en definitiva, nuestra meta en estos
   * momentos).
   *
   * @throws NGramaException Esta excepción se lanza si la longitud del texto de un n-grama no
   *     coincide con el tamaño de n-grama estipulado
   */
  public void iniciarAlgoritmo() throws NGramaException {
    ong.calcular(ruta, this.sizeNGrama);

    gt = new GoodTuring(ong.getListaNGramas());
    gt.componerPrimerVector();
    gt.componerSegundoVector();

    listaNGramas = gt.cruzarListas(ong.getListaNGramas());
    ep.setN(listaNGramas.size());
    this.aplicarEstadistico();
  }
  /**
   * Recorre la lista que contiene los n-gramas y sus probabilidades estimadas, y para cada uno
   * calcula su "peso" o significatividad, mediante el estimador que haya sido indicado. Una vez
   * realizada la operación, el n-grama se incluye en otra lista de salida.
   *
   * @throws NGramaException Esta excepción se lanza si la longitud del texto de un n-grama no
   *     coincide con el tamaño de n-grama estipulado
   */
  private void aplicarEstadistico() throws NGramaException {
    listaDescomposiciones = ong.getListaDescomposiciones();
    Iterator<NGrama> i = listaNGramas.iterator();
    NGrama aux, nuevo;
    listaSalida = new ArrayList<NGrama>();

    while (i.hasNext()) {
      aux = i.next();
      float probabilidad = aux.getProbabilidadEstimada();
      float resultado = ep.calcularEstadistico(aux, probabilidad, listaDescomposiciones);
      nuevo = new NGrama(aux.getTexto());
      nuevo.setSignificatividad(resultado);
      listaSalida.add(nuevo);
    }
  }