AIdeaText commited on
Commit
4c30ebf
·
verified ·
1 Parent(s): 56f4a7e

Update modules/studentact/current_situation_interface.py

Browse files
modules/studentact/current_situation_interface.py CHANGED
@@ -90,12 +90,18 @@ ANALYSIS_DIMENSION_MAPPING = {
90
  }
91
  }
92
 
 
93
  #Función principal ####################################
94
  def display_current_situation_interface(lang_code, nlp_models, t):
95
  """
96
  Interfaz simplificada con gráfico de radar para visualizar métricas.
 
 
 
 
 
97
  """
98
- # Inicializar estados si no existen
99
  if 'text_input' not in st.session_state:
100
  st.session_state.text_input = ""
101
  if 'text_area' not in st.session_state:
@@ -116,93 +122,91 @@ def display_current_situation_interface(lang_code, nlp_models, t):
116
  st.session_state.show_iter = False
117
 
118
  try:
119
- # --- [1] Selector de tipo de texto con Radio Buttons ---
120
- st.markdown("## Selecciona el tipo de texto")
121
- text_type = st.radio(
122
- "¿Qué tipo de texto quieres analizar?",
123
- options=list(TEXT_TYPES.keys()),
124
- format_func=lambda x: TEXT_TYPES[x]['name'],
125
- index=1, # puedes indicar un índice por defecto, p.e. 'student_essay'
126
- help="Selecciona el tipo de texto para ajustar los criterios de evaluación"
127
- )
128
-
129
- st.session_state.current_text_type = text_type
130
-
131
- # --- [2] Contenedor principal en 4 columnas ---
132
- st.markdown("---")
133
- st.markdown("## Análisis de Texto en Cuatro Columnas")
134
-
135
- # Usamos st.columns(4) para distribuir todo en partes iguales
136
- text_base_col, metrics_base_col, text_iter_col, metrics_iter_col = st.columns(4, gap="medium")
137
 
138
- # ------- Columna 1: Texto Base -------
 
 
 
139
  with text_base_col:
140
- st.markdown("### Texto Base")
 
141
  text_base = st.text_area(
142
  "Texto original",
143
- height=300,
144
  key="text_base",
145
  value=st.session_state.base_text,
146
  )
147
-
148
  # Botón para analizar base
 
149
  if st.button("Analizar Base", key="btn_analizar_base"):
150
  with st.spinner("Analizando texto base..."):
151
  doc = nlp_models[lang_code](text_base)
152
- metrics = analyze_text_dimensions(doc) # Llama a tu función de análisis
153
-
154
  # Guardar en estado
155
  st.session_state.base_text = text_base
156
  st.session_state.base_metrics = metrics
157
  st.session_state.show_base = True
158
 
159
- # ------- Columna 2: Métricas Base -------
160
- with metrics_base_col:
161
- st.markdown("### Métricas Base")
162
- if st.session_state.show_base and 'base_metrics' in st.session_state:
163
- display_metrics_and_suggestions(
164
- st.session_state.base_metrics,
165
- text_type,
166
- title="Base",
167
- show_suggestions=False # Solo mostrar las métricas, sin sugerencias
168
- )
169
-
170
- # ------- Columna 3: Texto Iteración -------
171
- with text_iter_col:
172
- st.markdown("### Iteración")
173
  text_iter = st.text_area(
174
  "Nueva versión",
175
- height=300,
176
  key="text_iter",
177
  value=st.session_state.iter_text,
178
- disabled=not st.session_state.show_base # Se activa solo después de analizar la base
179
  )
180
-
 
181
  # Botón para analizar iteración
182
- if st.button(
183
- "Analizar Iteración",
184
- key="btn_analizar_iter",
185
- disabled=not st.session_state.show_base
186
- ):
187
  with st.spinner("Analizando iteración..."):
188
  doc = nlp_models[lang_code](text_iter)
189
- metrics = analyze_text_dimensions(doc) # Llama a tu función de análisis
190
-
191
  # Guardar en estado
192
  st.session_state.iter_text = text_iter
193
  st.session_state.iter_metrics = metrics
194
  st.session_state.show_iter = True
195
 
196
- # ------- Columna 4: Métricas Iteración -------
197
- with metrics_iter_col:
198
- st.markdown("### Métricas Iteración")
199
- if st.session_state.show_iter and 'iter_metrics' in st.session_state:
200
- display_metrics_and_suggestions(
201
- st.session_state.iter_metrics,
202
- text_type,
203
- title="Iteración",
204
- show_suggestions=True # Aquí mostramos sugerencias de mejora
205
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
206
 
207
  except Exception as e:
208
  logger.error(f"Error en interfaz: {str(e)}")
@@ -210,6 +214,44 @@ def display_current_situation_interface(lang_code, nlp_models, t):
210
 
211
  #Funciones de visualización ##################################
212
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
213
  def display_metrics_analysis(metrics, text_type=None):
214
  """
215
  Muestra los resultados del análisis: métricas verticalmente y gráfico radar.
 
90
  }
91
  }
92
 
93
+ #Función principal ####################################
94
  #Función principal ####################################
95
  def display_current_situation_interface(lang_code, nlp_models, t):
96
  """
97
  Interfaz simplificada con gráfico de radar para visualizar métricas.
98
+ Incluye:
99
+ 1) Expander para el selector de tipo de texto
100
+ 2) Text areas sin altura fija
101
+ 3) Métricas base e iteración alineadas horizontalmente
102
+ 4) Recomendaciones en una fila aparte
103
  """
104
+ # --- Inicializar estados si no existen ---
105
  if 'text_input' not in st.session_state:
106
  st.session_state.text_input = ""
107
  if 'text_area' not in st.session_state:
 
122
  st.session_state.show_iter = False
123
 
124
  try:
125
+ # --- [1] Selector de tipo de texto dentro de un expander ---
126
+ with st.expander("Selecciona el tipo de texto", expanded=True):
127
+ text_type = st.radio(
128
+ "¿Qué tipo de texto quieres analizar?",
129
+ options=list(TEXT_TYPES.keys()),
130
+ format_func=lambda x: TEXT_TYPES[x]['name'],
131
+ index=1,
132
+ help="Selecciona el tipo de texto para ajustar los criterios de evaluación"
133
+ )
134
+ st.session_state.current_text_type = text_type
 
 
 
 
 
 
 
 
135
 
136
+ st.markdown("---") # Una línea divisoria
137
+
138
+ # --- ÁREA DE TEXTO PARA EL TEXTO BASE ---
139
+ text_base_col, analyze_base_col = st.columns([3,1], gap="medium")
140
  with text_base_col:
141
+ # Texto Base (sin altura fija: quitamos height=...)
142
+ st.write("**Texto Base**") # Título breve (o puedes eliminarlo si deseas menos ruido)
143
  text_base = st.text_area(
144
  "Texto original",
 
145
  key="text_base",
146
  value=st.session_state.base_text,
147
  )
148
+ with analyze_base_col:
149
  # Botón para analizar base
150
+ st.write("") # Un ligero espacio
151
  if st.button("Analizar Base", key="btn_analizar_base"):
152
  with st.spinner("Analizando texto base..."):
153
  doc = nlp_models[lang_code](text_base)
154
+ metrics = analyze_text_dimensions(doc)
 
155
  # Guardar en estado
156
  st.session_state.base_text = text_base
157
  st.session_state.base_metrics = metrics
158
  st.session_state.show_base = True
159
 
160
+ st.markdown("---")
161
+
162
+ # --- ÁREA DE TEXTO PARA LA ITERACIÓN ---
163
+ iter_text_col, analyze_iter_col = st.columns([3,1], gap="medium")
164
+ with iter_text_col:
165
+ # Texto Iteración
166
+ st.write("**Texto de Iteración**")
 
 
 
 
 
 
 
167
  text_iter = st.text_area(
168
  "Nueva versión",
 
169
  key="text_iter",
170
  value=st.session_state.iter_text,
171
+ disabled=not st.session_state.show_base
172
  )
173
+ with analyze_iter_col:
174
+ st.write("") # Espacio
175
  # Botón para analizar iteración
176
+ if st.button("Analizar Iteración", key="btn_analizar_iter", disabled=not st.session_state.show_base):
 
 
 
 
177
  with st.spinner("Analizando iteración..."):
178
  doc = nlp_models[lang_code](text_iter)
179
+ metrics = analyze_text_dimensions(doc)
 
180
  # Guardar en estado
181
  st.session_state.iter_text = text_iter
182
  st.session_state.iter_metrics = metrics
183
  st.session_state.show_iter = True
184
 
185
+ # --- [2] Métricas en una línea (base) + (iteración) alineadas ---
186
+ st.markdown("---")
187
+
188
+ # Fila de métricas base
189
+ if st.session_state.show_base and 'base_metrics' in st.session_state:
190
+ st.markdown("**Métrica base:**")
191
+ display_metrics_in_one_line(st.session_state.base_metrics, text_type)
192
+
193
+ # Fila de métricas iteración
194
+ if st.session_state.show_iter and 'iter_metrics' in st.session_state:
195
+ st.markdown("**Métricas de iteración:**")
196
+ display_metrics_in_one_line(st.session_state.iter_metrics, text_type)
197
+
198
+ # --- [3] Recomendaciones en una fila separada (opcional) ---
199
+ if st.session_state.show_iter and 'iter_metrics' in st.session_state:
200
+ # Si deseas basar las recomendaciones en la comparación base vs iteración:
201
+ # Podrías comparar e invocar funciones personalizadas
202
+ st.markdown("**Recomendaciones:**")
203
+ # Aquí, por ejemplo, revisas cada dimensión y das consejos si es menor a la meta
204
+ for dimension, values in st.session_state.iter_metrics.items():
205
+ score = values['normalized_score']
206
+ target = TEXT_TYPES[text_type]['thresholds'][dimension]['target']
207
+ if score < target:
208
+ # Muestras las sugerencias
209
+ suggest_improvement_tools(dimension)
210
 
211
  except Exception as e:
212
  logger.error(f"Error en interfaz: {str(e)}")
 
214
 
215
  #Funciones de visualización ##################################
216
 
217
+ def display_metrics_in_one_line(metrics, text_type):
218
+ """
219
+ Muestra las cuatro dimensiones (Vocabulario, Estructura, Cohesión, Claridad)
220
+ en una sola línea, usando 4 columnas.
221
+ """
222
+ thresholds = TEXT_TYPES[text_type]['thresholds']
223
+ dimensions = ["vocabulary", "structure", "cohesion", "clarity"]
224
+
225
+ # Creamos 4 columnas
226
+ col1, col2, col3, col4 = st.columns(4)
227
+ cols = [col1, col2, col3, col4]
228
+
229
+ for dim, col in zip(dimensions, cols):
230
+ score = metrics[dim]['normalized_score']
231
+ target = thresholds[dim]['target']
232
+ min_val = thresholds[dim]['min']
233
+
234
+ # Determinar estado y color
235
+ if score < min_val:
236
+ status = "⚠️ Por mejorar"
237
+ color = "inverse"
238
+ elif score < target:
239
+ status = "📈 Aceptable"
240
+ color = "off"
241
+ else:
242
+ status = "✅ Óptimo"
243
+ color = "normal"
244
+
245
+ with col:
246
+ # Muestra la métrica con un st.metric
247
+ col.metric(
248
+ label=dim.capitalize(),
249
+ value=f"{score:.2f}",
250
+ delta=f"{status} (Meta: {target:.2f})",
251
+ delta_color=color
252
+ )
253
+
254
+ ##################################################################
255
  def display_metrics_analysis(metrics, text_type=None):
256
  """
257
  Muestra los resultados del análisis: métricas verticalmente y gráfico radar.