def test_count_tags(self):
        # Los valores esperados para el assertEqual son sacados de sp.dic
        an = AnalisisSentimiento()
        # 13, 16, 18, 19, 66
        tags = ["Posemo", "Negemo", "Anger", "Sad", "Swear"]

        tokens = senti.getTokens("bueno bueno bueno", an.d[0], an.d[1])
        self.assertEqual(an.count_tags(tokens, tags), [3, 0, 0, 0, 0])

        tokens = senti.getTokens("malo malo mala mal", an.d[0], an.d[1])
        self.assertEqual(an.count_tags(tokens, tags), [0, 4, 3, 0, 0])

        tokens = senti.getTokens("Me siento abandonado por la sociedad", an.d[0], an.d[1])
        self.assertEqual(an.count_tags(tokens, tags), [0, 1, 0, 1, 0])

        tokens = senti.getTokens("Puros bastardos bobalicones en este país!", an.d[0], an.d[1])
        self.assertEqual(an.count_tags(tokens, tags), [0, 2, 1, 0, 2])

        # Profesora/Ayudante: disculpen el lenguaje de este test, pero lo creo necesario, ya que twitter no es una instancia formal y se van a analizar algunos así.
        # La palabra "hueón" y sus derivados son tan comunes y ambivalentes en sentido en el lenguaje coloquial, que solo lo dejé como Swear.
        tokens = senti.getTokens("Tendrá cara de hueón, pero igual es sensato", an.d[0], an.d[1])
        self.assertEqual(an.count_tags(tokens, tags), [1, 0, 0, 0, 1])
    def Analyze(self, str):
        """
        Descripcion: De los tweets recolectados, este metodo se encarga de identificar palabras clave
        para su analisis de sentimiento
        PreCondiciones: String obtenido corresponda a un tweet en su formato correcto. Que tweet tenga relacion a
        algun candidato del proceso constituyente
        PostCondiciones: Se entregue un sentimiento definido del tweet con su factor correspondiente.
        """
        # str es el contenido del tweet, retornado por getDB
        # Se ejecutaria getDB (con mongo) afuera, con esa informacion se llama a analyze, que dentro usa saveDB (con postgres).

        # TODO: ver negacion

        # Tablas que hay que tener en Postgres:
        #   (1) Top3 tweets por candidato, por emocion (1 tabla en total, con campo id_tweet (debe ser bigint!!), idCandidato, emocion, tagCount, autor, link, tweet)
        #   (2) Count de tweets analizados por candidato(1 tabla en total, con campos idCandidato y count)
        #   (3) Promedio de tagCount por emocion, por candidato (1 tabla en total, con campos idCandidato, emocion y promedio (debiese ser double))

        # Abrir conexión con psql
        try:
            conn = psycopg2.connect(
                database=self.pos_db, user=self.pos_user, password=self.pos_pass, host=self.pos_host, port=self.pos_port
            )
            cur = conn.cursor()
        except:
            return False

        # posemo 13, negemo 16, anger 18, sad 19, swear 66

        # Contar las ocurrencias de los tags en el tweet.
        tags = ["Posemo", "Negemo", "Anger", "Sad", "Swear"]
        tokens = senti.getTokens(str, self.d[0], self.d[1])
        tags_count = self.count_tags(tokens, tags)

        # Modificar, si es necesario, la base de datos.
        self.update_tops(cur, tags, tags_count, str)
        self.update_proms(cur, tags, tags_count)

        # Commitear los cambios y cerrar conexión
        conn.commit()
        cur.close()
        conn.close()

        return True