def processa():
    '''
        Realiza a classificação dos tweets armazenados utilizando
        o Filtro Bayesiano treinado e armazena o resultado em um
        formato de dados legível pela biblioteca gráfica D3.js.
    '''
    g = thomas.Bayes()
    g.load('treinamento/treino.dat')

    dias = {"Domingo": ('dom.professor.pickle', 'dom.professora.pickle'),
            "Segunda": ('seg.professor.pickle', 'seg.professora.pickle'),
            "Terça": ('ter.professor.pickle', 'ter.professora.pickle'),
            "Quarta": ('qua.professor.pickle', 'qua.professora.pickle'),
            "Quinta": ('qui.professor.pickle', 'qui.professora.pickle'),
            "Sexta": ('sex.professor.pickle', 'sex.professora.pickle'),
            "Sábado": ('sab.professor.pickle', 'sab.professora.pickle'),
    }
    tweets = {"name": "", "children": []}
    total_tw_dias = 0

    for dia in dias:
        m = dias[dia][0]
        f = dias[dia][1]

        dados_m = [d for d in pickle.load(open('tweets/' + m)) if hora(d[-1])]
        dados_f = [d for d in pickle.load(open('tweets/' + f)) if hora(d[-1])]
        tweets_dia = len(dados_m + dados_f)
        total_tw_dias += tweets_dia

        classif_m = {'POS': 0, 'NEG': 0, 'NEU': 0}
        classif_f = {'POS': 0, 'NEG': 0, 'NEU': 0}

        for t in dados_m:
            classif = thomas.classifica(g.guess(t[1]))
            total = t[2]
            classif_m[classif] += total

        for t in dados_f:
            classif = thomas.classifica(g.guess(t[1]))
            total = t[2]
            classif_f[classif] += total       

        l = {"name": "{0} ({1})".format(dia, tweets_dia), "children": [
               {"name": 'Professor ({0})'.format(len(dados_m)), "children": [{"name": "Positivo: {0} tweets".format(classif_m['POS'])}, {"name": "Negativo: {0} tweets".format(classif_m['NEG'])}, {"name": "Neutro: {0} tweets".format(classif_m['NEU'])}]},
               {"name": 'Professora ({0})'.format(len(dados_f)), "children": [{"name": "Positivo: {0} tweets".format(classif_f['POS'])}, {"name": "Negativo: {0} tweets".format(classif_f['NEG'])}, {"name": "Neutro: {0} tweets".format(classif_f['NEU'])}]}
            ]}

        tweets['children'].append(l)

    tweets['name'] = "{0} Tweets".format(total_tw_dias)
    json.dump(tweets, open('grafico/arvore.json','wb'))
    def teste_validacao_classificador(self):
        total_tweets = len(self.tweets_validacao)
        acertos = 0
        for tw in self.tweets_validacao:
            texto = twitter.preprocessa_tweet(tw[0].lower())
            if thomas.classifica(self.classificador.guess(texto)) == tw[1]:
                acertos += 1

        # Exige um índice de acerto de pelo menos 80%
        self.assertTrue(acertos * 100 / total_tweets >= 80)
    def teste_validacao_classificador(self):
        total_tweets = len(self.tweets_validacao)
        acertos = 0
        for tw in self.tweets_validacao:
            texto = twitter.preprocessa_tweet(tw[0].lower())
            if thomas.classifica(self.classificador.guess(texto)) == tw[1]:
                acertos += 1

        # Exige um índice de acerto de pelo menos 80%
        self.assertTrue(acertos * 100 / total_tweets >= 80)
    def teste_treinamento_classificador(self):
        total_tweets = len(self.tweets_treino)
        acertos = 0
        for tw in self.tweets_treino:
            texto = twitter.preprocessa_tweet(tw[0].lower())
            if thomas.classifica(self.classificador.guess(texto)) == tw[1]:
                acertos += 1
            else:
                self.classificador.train(tw[1], texto)
                self.classificador.save('../treinamento/treino.dat')

        self.assertTrue(acertos == total_tweets)
    def teste_treinamento_classificador(self):
        total_tweets = len(self.tweets_treino)
        acertos = 0
        for tw in self.tweets_treino:
            texto = twitter.preprocessa_tweet(tw[0].lower())
            if thomas.classifica(self.classificador.guess(texto)) == tw[1]:
                acertos += 1
            else:
                self.classificador.train(tw[1], texto)
                self.classificador.save('../treinamento/treino.dat')

        self.assertTrue(acertos == total_tweets)
def processa():
    '''
        Realiza a classificação dos tweets armazenados utilizando
        o Filtro Bayesiano treinado e armazena o resultado em um
        formato de dados legível pela biblioteca gráfica D3.js.
    '''
    g = thomas.Bayes()
    g.load('treinamento/treino.dat')

    dias = {
        "Domingo": ('dom.professor.pickle', 'dom.professora.pickle'),
        "Segunda": ('seg.professor.pickle', 'seg.professora.pickle'),
        "Terça": ('ter.professor.pickle', 'ter.professora.pickle'),
        "Quarta": ('qua.professor.pickle', 'qua.professora.pickle'),
        "Quinta": ('qui.professor.pickle', 'qui.professora.pickle'),
        "Sexta": ('sex.professor.pickle', 'sex.professora.pickle'),
        "Sábado": ('sab.professor.pickle', 'sab.professora.pickle'),
    }
    tweets = {"name": "", "children": []}
    total_tw_dias = 0

    for dia in dias:
        m = dias[dia][0]
        f = dias[dia][1]

        dados_m = [d for d in pickle.load(open('tweets/' + m)) if hora(d[-1])]
        dados_f = [d for d in pickle.load(open('tweets/' + f)) if hora(d[-1])]
        tweets_dia = len(dados_m + dados_f)
        total_tw_dias += tweets_dia

        classif_m = {'POS': 0, 'NEG': 0, 'NEU': 0}
        classif_f = {'POS': 0, 'NEG': 0, 'NEU': 0}

        for t in dados_m:
            classif = thomas.classifica(g.guess(t[1]))
            total = t[2]
            classif_m[classif] += total

        for t in dados_f:
            classif = thomas.classifica(g.guess(t[1]))
            total = t[2]
            classif_f[classif] += total

        l = {
            "name":
            "{0} ({1})".format(dia, tweets_dia),
            "children": [{
                "name":
                'Professor ({0})'.format(len(dados_m)),
                "children": [{
                    "name":
                    "Positivo: {0} tweets".format(classif_m['POS'])
                }, {
                    "name":
                    "Negativo: {0} tweets".format(classif_m['NEG'])
                }, {
                    "name":
                    "Neutro: {0} tweets".format(classif_m['NEU'])
                }]
            }, {
                "name":
                'Professora ({0})'.format(len(dados_f)),
                "children": [{
                    "name":
                    "Positivo: {0} tweets".format(classif_f['POS'])
                }, {
                    "name":
                    "Negativo: {0} tweets".format(classif_f['NEG'])
                }, {
                    "name":
                    "Neutro: {0} tweets".format(classif_f['NEU'])
                }]
            }]
        }

        tweets['children'].append(l)

    tweets['name'] = "{0} Tweets".format(total_tw_dias)
    json.dump(tweets, open('grafico/arvore.json', 'wb'))