AIdeaText commited on
Commit
53f7fce
·
verified ·
1 Parent(s): 47f358a

Update modules/studentact/current_situation_interface.py

Browse files
modules/studentact/current_situation_interface.py CHANGED
@@ -90,123 +90,126 @@ ANALYSIS_DIMENSION_MAPPING = {
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:
108
- st.session_state.text_area = ""
109
- if 'show_results' not in st.session_state:
110
- st.session_state.show_results = False
111
- if 'current_doc' not in st.session_state:
112
- st.session_state.current_doc = None
113
- if 'current_metrics' not in st.session_state:
114
- st.session_state.current_metrics = None
115
  if 'base_text' not in st.session_state:
116
  st.session_state.base_text = ""
117
  if 'iter_text' not in st.session_state:
118
  st.session_state.iter_text = ""
 
 
 
 
119
  if 'show_base' not in st.session_state:
120
  st.session_state.show_base = False
121
  if 'show_iter' 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,42 +217,7 @@ def display_current_situation_interface(lang_code, nlp_models, t):
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):
 
90
  }
91
  }
92
 
93
+ ################################################################
94
+ ##############################################################################
95
+ # FUNCIÓN PRINCIPAL
96
+ ##############################################################################
97
  def display_current_situation_interface(lang_code, nlp_models, t):
98
  """
99
+ Distribución requerida:
100
+ TAB:
101
+ └─ Expander para seleccionar el tipo de texto
102
+
103
+ Contenedor-1 (tres filas):
104
+ Fila 1: Métricas de la línea base
105
+ Fila 2: Métricas de iteración
106
+ Fila 3: Recomendaciones
107
+
108
+ Contenedor-2 (dos columnas):
109
+ Col1: Texto base
110
+ Col2: Texto iteración
111
  """
112
  # --- Inicializar estados si no existen ---
 
 
 
 
 
 
 
 
 
 
113
  if 'base_text' not in st.session_state:
114
  st.session_state.base_text = ""
115
  if 'iter_text' not in st.session_state:
116
  st.session_state.iter_text = ""
117
+ if 'base_metrics' not in st.session_state:
118
+ st.session_state.base_metrics = {}
119
+ if 'iter_metrics' not in st.session_state:
120
+ st.session_state.iter_metrics = {}
121
  if 'show_base' not in st.session_state:
122
  st.session_state.show_base = False
123
  if 'show_iter' not in st.session_state:
124
  st.session_state.show_iter = False
125
 
126
  try:
127
+ # Creamos un tab
128
+ tabs = st.tabs(["Análisis de Texto"])
129
+ with tabs[0]:
130
+ # -----------------------------------------------------------------
131
+ # [1] Expander para seleccionar el tipo de texto
132
+ # -----------------------------------------------------------------
133
+ with st.expander("Selecciona el tipo de texto", expanded=True):
134
+ text_type = st.radio(
135
+ "¿Qué tipo de texto quieres analizar?",
136
+ options=list(TEXT_TYPES.keys()),
137
+ format_func=lambda x: TEXT_TYPES[x]['name'],
138
+ index=0,
139
+ help="Selecciona el tipo de texto para ajustar criterios de evaluación"
140
+ )
141
+ st.session_state.current_text_type = text_type
142
+
143
+ # -----------------------------------------------------------------
144
+ # Contenedor-1: 3 filas (Métricas base, Métricas iteración, Recomendaciones)
145
+ # -----------------------------------------------------------------
146
+ with st.container():
147
+ # --- Fila 1: Métricas base ---
148
+ if st.session_state.show_base:
149
+ st.markdown("**Métricas de la línea base del texto**")
150
+ display_metrics_in_one_line(st.session_state.base_metrics, text_type)
151
+
152
+ # --- Fila 2: Métricas iteración ---
153
+ if st.session_state.show_iter:
154
+ st.markdown("**Métricas de la iteración del texto**")
155
+ display_metrics_in_one_line(st.session_state.iter_metrics, text_type)
156
+
157
+ # --- Fila 3: Recomendaciones ---
158
+ # (Separado de las métricas, pero en la misma sección)
159
+ if st.session_state.show_iter:
160
+ st.markdown("**Recomendaciones**")
161
+ for dimension, values in st.session_state.iter_metrics.items():
162
+ score = values['normalized_score']
163
+ target = TEXT_TYPES[text_type]['thresholds'][dimension]['target']
164
+ if score < target:
165
+ suggest_improvement_tools(dimension)
166
+
167
+ # -----------------------------------------------------------------
168
+ # Contenedor-2: 2 columnas para ingresar texto base / iteración
169
+ # -----------------------------------------------------------------
170
+ with st.container():
171
+ col_left, col_right = st.columns(2)
172
+
173
+ # Caja de texto para el texto base
174
+ with col_left:
175
+ st.markdown("**Texto base**")
176
+ text_base = st.text_area(
177
+ label="",
178
+ value=st.session_state.base_text,
179
+ key="text_base_area",
180
+ placeholder="Pega aquí tu texto base",
181
+ # Quitar 'height' si quieres permitir altura completamente flexible:
182
+ # height=200
183
+ )
184
+
185
+ if st.button("Analizar Base"):
186
+ with st.spinner("Analizando texto base..."):
187
+ doc = nlp_models[lang_code](text_base)
188
+ metrics = analyze_text_dimensions(doc)
189
+ st.session_state.base_text = text_base
190
+ st.session_state.base_metrics = metrics
191
+ st.session_state.show_base = True
192
+ st.session_state.show_iter = False
193
+
194
+ # Caja de texto para la iteración
195
+ with col_right:
196
+ st.markdown("**Texto de iteración**")
197
+ text_iter = st.text_area(
198
+ label="",
199
+ value=st.session_state.iter_text,
200
+ key="text_iter_area",
201
+ placeholder="Edita y mejora tu texto...",
202
+ disabled=not st.session_state.show_base,
203
+ # height=200
204
+ )
205
+
206
+ if st.button("Analizar Iteración", disabled=not st.session_state.show_base):
207
+ with st.spinner("Analizando texto de iteración..."):
208
+ doc = nlp_models[lang_code](text_iter)
209
+ metrics = analyze_text_dimensions(doc)
210
+ st.session_state.iter_text = text_iter
211
+ st.session_state.iter_metrics = metrics
212
+ st.session_state.show_iter = True
213
 
214
  except Exception as e:
215
  logger.error(f"Error en interfaz: {str(e)}")
 
217
 
218
  #Funciones de visualización ##################################
219
 
220
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
 
222
  ##################################################################
223
  def display_metrics_analysis(metrics, text_type=None):