eduardocpacheco commited on
Commit
bb7de2f
·
1 Parent(s): 6f2ce65
__pycache__/label_oabench_practical.cpython-310.pyc CHANGED
Binary files a/__pycache__/label_oabench_practical.cpython-310.pyc and b/__pycache__/label_oabench_practical.cpython-310.pyc differ
 
anotacoes/raul_anotacoes_discursivas.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "1": {
3
+ "exame_41_area_administrativo_questao_numero_1_letra_A_parte_I": "Sim"
4
+ }
5
+ }
anotacoes/raul_anotacoes_praticas.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "1": {
3
+ "exame_41_area_administrativo_questao_numero_1_parte_I": "Sim"
4
+ }
5
+ }
app.py CHANGED
@@ -1,16 +1,18 @@
1
  import streamlit as st
2
  import label_oabench_discursive
3
  import label_oabench_practical
 
4
 
5
  st.set_page_config(layout="wide")
6
 
7
  # Criando a barra lateral para navegação
8
  st.sidebar.title("Anotação paper LLM-as-Judge")
9
- opcao = st.sidebar.radio("Escolha uma aplicação:", ["Provas práticas", "Questões discursivas"])
10
 
11
  # Roteando para a aplicação correta
12
  if opcao == "Provas práticas":
13
  label_oabench_practical.run()
14
  elif opcao == "Questões discursivas":
15
  label_oabench_discursive.run()
16
-
 
 
1
  import streamlit as st
2
  import label_oabench_discursive
3
  import label_oabench_practical
4
+ import label_oabench_dashboard
5
 
6
  st.set_page_config(layout="wide")
7
 
8
  # Criando a barra lateral para navegação
9
  st.sidebar.title("Anotação paper LLM-as-Judge")
10
+ opcao = st.sidebar.radio("Escolha uma aplicação:", ["Provas práticas", "Questões discursivas","Dashboard Anotações"])
11
 
12
  # Roteando para a aplicação correta
13
  if opcao == "Provas práticas":
14
  label_oabench_practical.run()
15
  elif opcao == "Questões discursivas":
16
  label_oabench_discursive.run()
17
+ elif opcao == "Dashboard Anotações":
18
+ label_oabench_dashboard.run()
label_oabench_dashboard.py ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import os
4
+ import json
5
+
6
+ # Função para carregar anotações específicas (discursivas ou práticas)
7
+ def carregar_anotacoes(tipo, pasta="anotacoes"):
8
+ anotacoes = {}
9
+ if os.path.exists(pasta):
10
+ for arquivo in os.listdir(pasta):
11
+ if arquivo.endswith(f"_{tipo}.json"):
12
+ usuario = arquivo.split("_")[0]
13
+ with open(os.path.join(pasta, arquivo), "r", encoding="utf-8") as f:
14
+ anotacoes[usuario] = json.load(f)
15
+ return anotacoes
16
+
17
+ # Função para calcular os totais de anotações
18
+ def calcular_totais(anotacoes_discursivas, anotacoes_praticas, df_discursivas, df_praticas):
19
+ resultados = []
20
+
21
+ total_questoes_discursivas = len(df_discursivas)
22
+ total_criterios_discursivos = sum(len(q["formated_criteria"]) for _, q in df_discursivas.iterrows())
23
+ total_provas_praticas = len(df_praticas)
24
+ total_criterios_praticos = sum(len(q["formated_criteria"]) for _, q in df_praticas.iterrows())
25
+
26
+ usuarios = set(anotacoes_discursivas.keys()).union(set(anotacoes_praticas.keys()))
27
+
28
+ for usuario in usuarios:
29
+ questoes_discursivas_completas = 0
30
+ criterios_discursivos_anotados = 0
31
+ provas_praticas_completas = 0
32
+ criterios_praticos_anotados = 0
33
+
34
+ if usuario in anotacoes_discursivas:
35
+ for questao_id, criterios in anotacoes_discursivas[usuario].items():
36
+ if questao_id in df_discursivas["id"].astype(str).values:
37
+ criterios_totais = len(df_discursivas[df_discursivas["id"] == int(questao_id)].iloc[0]["formated_criteria"])
38
+ criterios_anotados = len([k for k, v in criterios.items() if v in ["Sim", "Não"]])
39
+ if criterios_anotados == criterios_totais:
40
+ questoes_discursivas_completas += 1
41
+ criterios_discursivos_anotados += criterios_anotados
42
+
43
+ if usuario in anotacoes_praticas:
44
+ for questao_id, criterios in anotacoes_praticas[usuario].items():
45
+ if questao_id in df_praticas["id"].astype(str).values:
46
+ criterios_totais = len(df_praticas[df_praticas["id"] == int(questao_id)].iloc[0]["formated_criteria"])
47
+ criterios_anotados = len([k for k, v in criterios.items() if v in ["Sim", "Não"]])
48
+ if criterios_anotados == criterios_totais:
49
+ provas_praticas_completas += 1
50
+ criterios_praticos_anotados += criterios_anotados
51
+
52
+ resultados.append({
53
+ "usuario": usuario,
54
+ "questoes_discursivas_anotadas": f"{questoes_discursivas_completas}/{total_questoes_discursivas}",
55
+ "total_criterios_discursivos_anotados": f"{criterios_discursivos_anotados}/{total_criterios_discursivos}",
56
+ "provas_praticas_anotadas": f"{provas_praticas_completas}/{total_provas_praticas}",
57
+ "criterios_praticos_anotados": f"{criterios_praticos_anotados}/{total_criterios_praticos}"
58
+ })
59
+
60
+ return resultados
61
+
62
+ # Função para calcular contadores de "Sim" e "Não" por parte
63
+ def calcular_contadores_por_parte(anotacoes, df):
64
+ contadores = {}
65
+ for usuario, criterios_usuario in anotacoes.items():
66
+ for questao_id, criterios in criterios_usuario.items():
67
+ if questao_id in df["id"].astype(str).values:
68
+ for criterio, valor in criterios.items():
69
+ parte = "_".join(criterio.split("_")[-2:]) # Exemplo: "parte_I" ou "parte_II"
70
+ if parte not in contadores:
71
+ contadores[parte] = {"Sim": 0, "Não": 0}
72
+ if valor in ["Sim", "Não"]:
73
+ contadores[parte][valor] += 1
74
+ return contadores
75
+
76
+ # Função principal para rodar o dashboard no Streamlit
77
+ def run():
78
+ st.set_page_config(layout="wide")
79
+ st.title("Dashboard de Anotações - Benchmark Jurídico OAB")
80
+
81
+ # Carregar os DataFrames
82
+ st.markdown("### Carregando dados...")
83
+ with st.spinner("Carregando arquivos..."):
84
+ df_discursivas = pd.read_pickle("df_evaluated_discursive.pkl")
85
+ df_praticas = pd.read_pickle("df_evaluated.pkl")
86
+ anotacoes_discursivas = carregar_anotacoes("anotacoes_discursivas")
87
+ anotacoes_praticas = carregar_anotacoes("anotacoes_praticas")
88
+
89
+ # Calcular os totais
90
+ resultados = calcular_totais(anotacoes_discursivas, anotacoes_praticas, df_discursivas, df_praticas)
91
+
92
+ # Exibir os dados em uma tabela
93
+ st.markdown("### Resumo das Anotações")
94
+ st.write("Análises completas por usuário:")
95
+
96
+ df_resultados = pd.DataFrame(resultados)
97
+ st.dataframe(df_resultados, use_container_width=True)
98
+
99
+ # Calcular contadores para discursivas e práticas
100
+ st.markdown("### Contadores de Sim e Não por Parte")
101
+ contadores_discursivas = calcular_contadores_por_parte(anotacoes_discursivas, df_discursivas)
102
+ contadores_praticas = calcular_contadores_por_parte(anotacoes_praticas, df_praticas)
103
+
104
+ # Exibir os contadores no dashboard
105
+ st.markdown("#### Discursivas")
106
+ if contadores_discursivas:
107
+ df_contadores_discursivas = pd.DataFrame.from_dict(contadores_discursivas, orient="index").reset_index()
108
+ df_contadores_discursivas.columns = ["Parte", "Sim", "Não"]
109
+ st.dataframe(df_contadores_discursivas, use_container_width=True)
110
+ else:
111
+ st.write("Nenhum dado encontrado para discursivas.")
112
+
113
+ st.markdown("#### Práticas")
114
+ if contadores_praticas:
115
+ df_contadores_praticas = pd.DataFrame.from_dict(contadores_praticas, orient="index").reset_index()
116
+ df_contadores_praticas.columns = ["Parte", "Sim", "Não"]
117
+ st.dataframe(df_contadores_praticas, use_container_width=True)
118
+ else:
119
+ st.write("Nenhum dado encontrado para práticas.")