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
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