AIdeaText commited on
Commit
6833077
·
verified ·
1 Parent(s): 1a1d1ae

Update modules/studentact/current_situation_interface.py

Browse files
modules/studentact/current_situation_interface.py CHANGED
@@ -90,7 +90,6 @@ ANALYSIS_DIMENSION_MAPPING = {
90
  }
91
  }
92
 
93
-
94
  ##############################################################################
95
  # FUNCIÓN PRINCIPAL
96
  ##############################################################################
@@ -98,16 +97,13 @@ def display_current_situation_interface(lang_code, nlp_models, t):
98
  """
99
  TAB:
100
  - Expander con radio para tipo de texto
101
-
102
- Contenedor-1 (2 "filas" con borde):
103
  - Fila 1: Métricas base
104
  - Fila 2: Métricas iteración
105
-
106
  Contenedor-2 (2 columnas):
107
  - Col1: Texto base
108
  - Col2: Texto iteración
109
-
110
- Al final, Recomendaciones en una sola línea.
111
  """
112
  # --- Inicializar session_state ---
113
  if 'base_text' not in st.session_state:
@@ -123,10 +119,10 @@ def display_current_situation_interface(lang_code, nlp_models, t):
123
  if 'show_iter' not in st.session_state:
124
  st.session_state.show_iter = False
125
 
126
- # Creamos un TAB
127
  tabs = st.tabs(["Análisis de Texto"])
128
  with tabs[0]:
129
- # 1) Expander con radio
130
  with st.expander("Selecciona el tipo de texto", expanded=True):
131
  text_type = st.radio(
132
  "¿Qué tipo de texto quieres analizar?",
@@ -142,32 +138,39 @@ def display_current_situation_interface(lang_code, nlp_models, t):
142
  # CONTENEDOR-1: Métricas (2 filas con borde)
143
  # ---------------------------------------------------------------------
144
  with st.container():
145
- # Fila 1: Métricas base
146
- if st.session_state.show_base:
147
- # Usamos HTML + CSS para enmarcar las métricas en un div con borde
148
- st.markdown(
149
- """
150
- <div style="border:1px solid black; padding:10px; margin-bottom:10px;">
151
- <p style="font-weight:bold;">Métricas de la línea base</p>
152
- """,
153
- unsafe_allow_html=True
154
- )
155
- # ---- Aquí llamamos a la función que muestra las 4 métricas ----
 
156
  display_metrics_in_one_row(st.session_state.base_metrics, text_type)
157
- # Cerramos el div
158
- st.markdown("</div>", unsafe_allow_html=True)
 
 
159
 
160
  # Fila 2: Métricas de iteración
161
- if st.session_state.show_iter:
162
- st.markdown(
163
- """
164
- <div style="border:1px solid black; padding:10px; margin-bottom:10px;">
165
- <p style="font-weight:bold;">Métricas de la iteración</p>
166
- """,
167
- unsafe_allow_html=True
168
- )
 
169
  display_metrics_in_one_row(st.session_state.iter_metrics, text_type)
170
- st.markdown("</div>", unsafe_allow_html=True)
 
 
 
171
 
172
  # ---------------------------------------------------------------------
173
  # CONTENEDOR-2: 2 columnas (texto base | texto iteración)
@@ -187,6 +190,7 @@ def display_current_situation_interface(lang_code, nlp_models, t):
187
  with st.spinner("Analizando texto base..."):
188
  doc = nlp_models[lang_code](text_base)
189
  metrics = analyze_text_dimensions(doc)
 
190
  st.session_state.base_text = text_base
191
  st.session_state.base_metrics = metrics
192
  st.session_state.show_base = True
@@ -211,32 +215,27 @@ def display_current_situation_interface(lang_code, nlp_models, t):
211
  st.session_state.show_iter = True
212
 
213
  # ---------------------------------------------------------------------
214
- # Recomendaciones al final (una sola línea, por ejemplo)
215
  # ---------------------------------------------------------------------
216
  # Solo mostramos si tenemos iteración
217
  if st.session_state.show_iter:
218
- # Podríamos mostrar todo en una misma línea usando st.columns(1)
219
- # o simplemente un st.container(). Lo muestro en un solo contenedor:
220
- with st.container():
221
- st.markdown("**Recomendaciones**")
222
- # Si las quieres en una sola línea, podrías hacer algo como:
223
- # rec_col = st.columns(1)[0] # Solo 1 columna
224
- # con rec_col: ...
225
- # Pero en general, un for con st.write estará apilado verticalmente.
226
-
227
- # Ejemplo de iterar dimensiones
228
- any_reco = False
229
  for dimension, values in st.session_state.iter_metrics.items():
230
  score = values['normalized_score']
231
  target = TEXT_TYPES[text_type]['thresholds'][dimension]['target']
232
  if score < target:
233
- suggest_improvement_tools(dimension)
234
- any_reco = True
235
 
236
- if not any_reco:
 
 
 
237
  st.info("¡No hay recomendaciones! Todas las métricas superan la meta.")
238
 
239
 
 
240
  #Funciones de visualización ##################################
241
  ##############################################################################
242
  # Función para mostrar métricas en una sola fila
@@ -249,7 +248,8 @@ def display_metrics_in_one_row(metrics, text_type):
249
  thresholds = TEXT_TYPES[text_type]['thresholds']
250
  dimensions = ["vocabulary", "structure", "cohesion", "clarity"]
251
 
252
- col1, col2, col3, col4 = st.columns(4)
 
253
  cols = [col1, col2, col3, col4]
254
 
255
  for dim, col in zip(dimensions, cols):
@@ -278,6 +278,27 @@ def display_metrics_in_one_row(metrics, text_type):
278
  )
279
 
280
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
281
  ####################################################################
282
 
283
  def display_metrics_analysis(metrics, text_type=None):
 
90
  }
91
  }
92
 
 
93
  ##############################################################################
94
  # FUNCIÓN PRINCIPAL
95
  ##############################################################################
 
97
  """
98
  TAB:
99
  - Expander con radio para tipo de texto
100
+ Contenedor-1 (2 filas con borde):
 
101
  - Fila 1: Métricas base
102
  - Fila 2: Métricas iteración
 
103
  Contenedor-2 (2 columnas):
104
  - Col1: Texto base
105
  - Col2: Texto iteración
106
+ Al final, Recomendaciones en un expander (una sola fila).
 
107
  """
108
  # --- Inicializar session_state ---
109
  if 'base_text' not in st.session_state:
 
119
  if 'show_iter' not in st.session_state:
120
  st.session_state.show_iter = False
121
 
122
+ # Creamos un tab
123
  tabs = st.tabs(["Análisis de Texto"])
124
  with tabs[0]:
125
+ # [1] Expander con radio para seleccionar tipo de texto
126
  with st.expander("Selecciona el tipo de texto", expanded=True):
127
  text_type = st.radio(
128
  "¿Qué tipo de texto quieres analizar?",
 
138
  # CONTENEDOR-1: Métricas (2 filas con borde)
139
  # ---------------------------------------------------------------------
140
  with st.container():
141
+ # Fila 1: Métricas de la línea base
142
+ st.markdown(
143
+ """
144
+ <div style="border:1px solid black; padding:10px; margin-bottom:10px;">
145
+ <p style="font-weight:bold;">Métricas de la línea base</p>
146
+ """,
147
+ unsafe_allow_html=True
148
+ )
149
+
150
+ # Si se presionó "Analizar Base", se muestran los valores
151
+ # De lo contrario, mostramos la maqueta vacía
152
+ if st.session_state.show_base and st.session_state.base_metrics:
153
  display_metrics_in_one_row(st.session_state.base_metrics, text_type)
154
+ else:
155
+ display_empty_metrics_row()
156
+
157
+ st.markdown("</div>", unsafe_allow_html=True)
158
 
159
  # Fila 2: Métricas de iteración
160
+ st.markdown(
161
+ """
162
+ <div style="border:1px solid black; padding:10px; margin-bottom:10px;">
163
+ <p style="font-weight:bold;">Métricas de la iteración</p>
164
+ """,
165
+ unsafe_allow_html=True
166
+ )
167
+
168
+ if st.session_state.show_iter and st.session_state.iter_metrics:
169
  display_metrics_in_one_row(st.session_state.iter_metrics, text_type)
170
+ else:
171
+ display_empty_metrics_row()
172
+
173
+ st.markdown("</div>", unsafe_allow_html=True)
174
 
175
  # ---------------------------------------------------------------------
176
  # CONTENEDOR-2: 2 columnas (texto base | texto iteración)
 
190
  with st.spinner("Analizando texto base..."):
191
  doc = nlp_models[lang_code](text_base)
192
  metrics = analyze_text_dimensions(doc)
193
+
194
  st.session_state.base_text = text_base
195
  st.session_state.base_metrics = metrics
196
  st.session_state.show_base = True
 
215
  st.session_state.show_iter = True
216
 
217
  # ---------------------------------------------------------------------
218
+ # Recomendaciones al final en un expander (una sola “fila”)
219
  # ---------------------------------------------------------------------
220
  # Solo mostramos si tenemos iteración
221
  if st.session_state.show_iter:
222
+ with st.expander("Recomendaciones", expanded=False):
223
+ reco_list = []
 
 
 
 
 
 
 
 
 
224
  for dimension, values in st.session_state.iter_metrics.items():
225
  score = values['normalized_score']
226
  target = TEXT_TYPES[text_type]['thresholds'][dimension]['target']
227
  if score < target:
228
+ suggestions = get_dimension_suggestions(dimension) # Ejemplo
229
+ reco_list.extend(suggestions)
230
 
231
+ if reco_list:
232
+ # Todas en una sola línea, separadas por " | "
233
+ st.write(" | ".join(reco_list))
234
+ else:
235
  st.info("¡No hay recomendaciones! Todas las métricas superan la meta.")
236
 
237
 
238
+
239
  #Funciones de visualización ##################################
240
  ##############################################################################
241
  # Función para mostrar métricas en una sola fila
 
248
  thresholds = TEXT_TYPES[text_type]['thresholds']
249
  dimensions = ["vocabulary", "structure", "cohesion", "clarity"]
250
 
251
+ # Forzamos ancho uniforme de columnas con: st.columns([1,1,1,1])
252
+ col1, col2, col3, col4 = st.columns([1,1,1,1])
253
  cols = [col1, col2, col3, col4]
254
 
255
  for dim, col in zip(dimensions, cols):
 
278
  )
279
 
280
 
281
+ # -------------------------------------------------------------------------
282
+ # Función que muestra una fila de 4 columnas “vacías”
283
+ # -------------------------------------------------------------------------
284
+ def display_empty_metrics_row():
285
+ """
286
+ Muestra una fila de 4 columnas vacías (Vocabulario, Estructura, Cohesión, Claridad).
287
+ Cada columna se dibuja con st.metric en blanco (“-”).
288
+ """
289
+ empty_cols = st.columns([1,1,1,1])
290
+ labels = ["Vocabulario", "Estructura", "Cohesión", "Claridad"]
291
+
292
+ for col, lbl in zip(empty_cols, labels):
293
+ with col:
294
+ col.metric(
295
+ label=lbl,
296
+ value="-",
297
+ delta="",
298
+ border=True
299
+ )
300
+
301
+
302
  ####################################################################
303
 
304
  def display_metrics_analysis(metrics, text_type=None):