/*
   * (non-Javadoc)
   * @see uni.edu.pe.analisisSentimental.service.TweetManagerService#recuperarTweets()
   */
  public void recuperarYPersistirTweets() {
    logger.debug("<==== Inicio Method recuperarTweets a las " + new Date() + " ====>");
    List<String> lstfuerteNegativa = new ArrayList<String>();
    List<String> lstFuertePositiva = new ArrayList<String>();
    List<PistaSubjetividad> lstPistaTotales =
        (ArrayList<PistaSubjetividad>) obtenerPistasFuertementeSubjetivas();
    Utilitario.obtenerPistaSubjetividadFuertementeSubjetivas(
        lstPistaTotales, lstfuerteNegativa, lstFuertePositiva);

    List<Status> tweets = null;
    List<String> lstSQueryNegativa = new ArrayList<String>();
    List<String> lstSQueryPositiva = new ArrayList<String>();
    Set<String> setQueryNegativa = new HashSet<String>();
    Set<String> setQueryPositiva = new HashSet<String>();
    String query = null;
    for (String s : lstfuerteNegativa) {
      query = SIMBOLO_TAG + s + CARACTER_VACIO + QUERY_EXPRESIONES_NEGATIVAS;
      lstSQueryNegativa.add(query);
    }

    for (String s : lstFuertePositiva) {
      query = SIMBOLO_TAG + s + CARACTER_VACIO + QUERY_EXPRESIONES_POSITIVAS;
      lstSQueryPositiva.add(query);
    }

    for (int i = 0; i < NRO_LLAMADAS; i++) {
      int pos = (int) Math.floor((Math.random() * lstfuerteNegativa.size()));
      setQueryNegativa.add(lstSQueryNegativa.get(pos));
      pos = (int) Math.floor((Math.random() * lstSQueryPositiva.size()));
      setQueryPositiva.add(lstSQueryPositiva.get(pos));
    }
    if (logger.isDebugEnabled()) {
      logger.debug(
          "setQueryNegativa: size: " + setQueryNegativa.size() + " data: " + setQueryNegativa);
      logger.debug(
          "setQueryPositiva: size: " + setQueryPositiva.size() + " data: " + setQueryPositiva);
    }

    for (String s : setQueryNegativa) {
      tweets = ejecutarQueyEnBaseAConsulta(s);
      persistirTweets(tweets, s, COD_OPINION_NEGATIVA, COD_FINALIDAD_DATA_ENTRENAMIENTO);
    }
    tweets = null;
    for (String s : setQueryPositiva) {
      tweets = ejecutarQueyEnBaseAConsulta(s);
      persistirTweets(tweets, s, COD_OPINION_POSITIVA, COD_FINALIDAD_DATA_ENTRENAMIENTO);
    }
    tweets = null;
  }
  public void tratarLenguajePostRM(Map<String, String> mapJergas, String codFinData) {
    List<TweetProcesado> ltp =
        tweetProcesadoDAO.obtenerTweetsParaTratamientoLenguajePostRM(codFinData);
    for (TweetProcesado tp : ltp) {
      String msg = tp.getTextoActual();

      logger.debug("Parrafo antes: " + msg);
      msg = Utilitario.corrigeParrafo(msg, mapJergas);
      logger.debug("Parrafo despues: " + msg);

      tp.setTextoActual(msg);
      tp.setCodFaseTwitter(COD_FASE_TRATAMIENTO_LENGUAJE_JAVA_2);
    }
    tweetProcesadoDAO.guardarTweetsTratadosPorFaseTwitterBatch(ltp);
  }
  /*
   * (non-Javadoc)
   * @see uni.edu.pe.analisisSentimental.service.TweetManagerService#tratarLenguajeTwitter()
   */
  public void tratarLenguajeTwitter(String codFinData) {
    List<TweetProcesadoDto> ltpDto = obtenerTweetsParaTratamientoLenguaje(codFinData);
    List<TweetProcesadoDto> ltpExitosoDto = null;
    List<Long> lstNs = new ArrayList<Long>();
    if (CollectionUtils.isNotEmpty(ltpDto)) {
      ltpExitosoDto = new ArrayList<TweetProcesadoDto>();
      for (TweetProcesadoDto tpdto : ltpDto) {
        String mensaje = tpdto.getTextoInicial();

        Set<String> setStr = Utilitario.generaSetFromString(mensaje);

        if (COD_FINALIDAD_DATA_ENTRENAMIENTO.equals(codFinData)) {
          // Eliminando los RT
          boolean isRt = Utilitario.isRetweet(setStr);
          if (isRt) {
            lstNs.add(tpdto.getIdTweet());
            continue;
          }

          // Eliminando los positivos y negativos a la vez
          boolean isPosNeg = Utilitario.contieneEmoticonosPositivosNegativosEnSubString(mensaje);
          if (isPosNeg) {
            lstNs.add(tpdto.getIdTweet());
            continue;
          }

          // Eliminando los ambiguos
          boolean isEmAmbiguo = Utilitario.contieneEmoticonoAmbiguoEnSubstring(mensaje);
          if (isEmAmbiguo) {
            lstNs.add(tpdto.getIdTweet());
            continue;
          }
        }

        // Eliminando los emoticonos
        mensaje = Utilitario.removerMarcasDeTexto(mensaje, Utilitario.obtenerEmoticonosTotales());

        // Convirtiendo a minuscula
        mensaje = mensaje.toLowerCase();

        // Eliminando @marcas de usuario, #HashTags y Url
        String txtSinMarcas = Utilitario.removerMarcasDeTexto(mensaje, tpdto.getMarcasMensaje());
        tpdto.setTextoProcesado(txtSinMarcas);
        ltpExitosoDto.add(tpdto);
      }
      guardarTextoProcesadoTratamientoTwitter(ltpExitosoDto);
      tweetProcesadoDAO.descartarTweetsNSBatch(lstNs);
    }
  }