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