Esempio n. 1
0
def get_all_phrases_prob(data_validation_source, db: DB, phrase_size):
    dbh = DbHandler()

    print("Phrase count: ", db.query("select count(*) from phrases;"))

    with open(data_validation_source, encoding='utf-8-sig') as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=';')
        for row in csv_reader:
            txt = str.split(str.upper(row[1]))
            t = Text(txt, row[0])
            th = TextHandler()
            if t:
                t.build_phrases(phrase_size)
                phrases_prob = []
                for phrase in t.phrases:
                    phrases_prob.append(db.get_phrase_prob(phrase))

                if not len(
                        t.phrases):  # if text has less words than phrase_size
                    phrases_prob.append(-1)

                th.append(float(t.probability), phrases_prob)
                dbh.append(th)
            del t

        return dbh
Esempio n. 2
0
def validation_text_comparison(data_validation_source, report_flag,
                               training_file, report_name, error_threshold,
                               alfas, database):
    DB_V = DB(database + "/",
              "database",
              debug=False,
              run_on_ram=database + "/database.sql")
    print(database)
    now = datetime.datetime.now()
    positive_error = 0  #erro positivo
    negative_error = 0  #erro negativo
    positive_error_c = 0  #contagem de erro positivo
    negative_error_c = 0  #contagem de erro negativo
    sentence_counter = 0  #contagem de frases
    with open(
            data_validation_source, encoding='utf-8-sig'
    ) as csv_file:  # conta a quantidade de linhas no arquivo original
        csv_reader = csv.reader(csv_file, delimiter=';')

        if report_flag:  #caso a flag de relatório esteja ativada
            with open("../reports/" + report_name + "/report.out",
                      "w") as report:  #abre arquivo de relatório
                orig_stdout = sys.stdout  # guarda saida padrão
                sys.stdout = report  # troca saida padrão por relatório
                print("Data:    (DD/MM/AAAA)" + str(now.day) + "/" +
                      str(now.month) + "/" + str(now.year))
                print("Hora:    (HH:MM:SS)" + str(now.hour) + ":" +
                      str(now.minute) + ":" + str(now.second))
                print("Training_File:   " + training_file)
                print("Validation_File: " + data_validation_source)
                for row in csv_reader:
                    sentence_counter += 1
                    t = Text(str.split(str.upper(row[1])), row[0])
                    if t:
                        t.build_phrases(3)  #construir frases
                        first = 0
                        prob = 0
                        for p in t.phrases:
                            p_prob = DB_V.get_phrase_prob(p)
                            print("Palavra: " +
                                  (p.words[0].value.encode('ascii', 'ignore')
                                   ).decode('utf-8'))
                            print("Palavra: " +
                                  (p.words[1].value.encode('ascii', 'ignore')
                                   ).decode('utf-8'))
                            print("Palavra: " +
                                  (p.words[2].value.encode('ascii', 'ignore')
                                   ).decode('utf-8'))
                            print("Probabilidade: " + str(p_prob))
                            temp_alfa = alfas.getalfa(p_prob)
                            print("Alfa: " + str(temp_alfa))
                            if first != 0:
                                prob = prob * (
                                    1 - p_prob
                                )**temp_alfa  # busca a probabilidade associada à frase e calcula probabilidade do texto
                            else:
                                prob = (
                                    1 - p_prob
                                )**temp_alfa  # busca probabilidade da primeira frase
                                first = 1
                            prob = 1 - prob
                        print(row)  #imprime texto
                        print("Probabilidade do texto:  " + str(
                            t.probability))  #imprime probabilidade do texto
                        print("Probabilidade calculada: " +
                              str(prob))  #imprime probabilidade calculada
                        error = float(t.probability) - prob
                        if error > 0:
                            positive_error += error
                            if error > error_threshold:
                                positive_error_c += 1
                        else:
                            negative_error += error
                            if error < error_threshold * -1:
                                negative_error_c += 1
                        del t
                print("Numero de frases:    " + str(sentence_counter))
                print("Erro positivo:   " + str(positive_error))
                print("Erro negativo:   " + str(negative_error))
                print("Erro total:      " +
                      str(positive_error + abs(negative_error)))
                print("Contagem de Erros Positivos:     " +
                      str(positive_error_c))
                print("Contagem de Erros Negativos:     " +
                      str(negative_error_c))
            sys.stdout = orig_stdout  # reseta saída
            report.close()  #fechar arquivo de relatório

        # caso a flag de relatório esteja desativada
        else:
            for row in csv_reader:
                sentence_counter += 1
                t = Text(str.split(str.upper(row[1])), row[0])
                if t:
                    t.build_phrases(3)  #construir frases
                    first = 0
                    prob = 0
                    for p in t.phrases:
                        p_prob = DB_V.get_phrase_prob(p)
                        temp_alfa = alfas.getalfa(p_prob)
                        if first != 0:
                            prob = prob * (
                                1 - p_prob
                            )**temp_alfa  # busca a probabilidade associada à frase e calcula probabilidade do texto
                        else:
                            prob = (
                                1 - p_prob
                            )**temp_alfa  # busca probabilidade da primeira frase
                            first = 1
                        prob = 1 - prob
                    error = float(t.probability) - prob
                    if error > 0:
                        positive_error += error
                        if error > error_threshold:
                            positive_error_c += 1
                    else:
                        negative_error += error
                        if error < error_threshold * -1:
                            negative_error_c += 1
                    del t
    return 1 - (
        positive_error + abs(negative_error)
    ) / sentence_counter  #retorna o erro mais 0.000001 para evitar divisão por 0