AIdeaText commited on
Commit
2af3fd5
·
verified ·
1 Parent(s): 02db7d9

Create current_situation_interface.py

Browse files
modules/studentact/current_situation_interface.py ADDED
@@ -0,0 +1,272 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # modules/studentact/current_situation_interface.py
2
+
3
+ import streamlit as st
4
+ import logging
5
+ from ..utils.widget_utils import generate_unique_key
6
+ from .current_situation_analysis import (
7
+ analyze_text_dimensions,
8
+ analyze_clarity,
9
+ analyze_reference_clarity,
10
+ analyze_vocabulary_diversity,
11
+ analyze_cohesion,
12
+ analyze_structure,
13
+ get_dependency_depths,
14
+ normalize_score,
15
+ generate_sentence_graphs,
16
+ generate_word_connections,
17
+ generate_connection_paths,
18
+ create_vocabulary_network,
19
+ create_syntax_complexity_graph,
20
+ create_cohesion_heatmap,
21
+ )
22
+
23
+ logger = logging.getLogger(__name__)
24
+ ####################################
25
+ def display_current_situation_interface(lang_code, nlp_models, t):
26
+ """
27
+ Interfaz simplificada para el análisis inicial, enfocada en recomendaciones directas.
28
+ """
29
+ # Inicializar estados si no existen
30
+ if 'text_input' not in st.session_state:
31
+ st.session_state.text_input = ""
32
+ if 'show_results' not in st.session_state:
33
+ st.session_state.show_results = False
34
+ if 'current_doc' not in st.session_state:
35
+ st.session_state.current_doc = None
36
+ if 'current_metrics' not in st.session_state:
37
+ st.session_state.current_metrics = None
38
+
39
+ st.markdown("## Análisis Inicial de Escritura")
40
+
41
+ # Container principal con dos columnas
42
+ with st.container():
43
+ input_col, results_col = st.columns([1,2])
44
+
45
+ with input_col:
46
+ st.markdown("### Ingresa tu texto")
47
+
48
+ # Función para manejar cambios en el texto
49
+ def on_text_change():
50
+ st.session_state.text_input = st.session_state.text_area
51
+ st.session_state.show_results = False # Resetear resultados cuando el texto cambia
52
+
53
+ # Text area con manejo de estado
54
+ text_input = st.text_area(
55
+ t.get('input_prompt', "Escribe o pega tu texto aquí:"),
56
+ height=400,
57
+ key="text_area",
58
+ value=st.session_state.text_input,
59
+ on_change=on_text_change,
60
+ help="Este texto será analizado para darte recomendaciones personalizadas"
61
+ )
62
+
63
+ # Botón de análisis
64
+ if st.button(
65
+ t.get('analyze_button', "Analizar mi escritura"),
66
+ type="primary",
67
+ disabled=not text_input.strip(),
68
+ use_container_width=True,
69
+ ):
70
+ try:
71
+ with st.spinner(t.get('processing', "Analizando...")):
72
+ # Procesar texto y obtener métricas
73
+ doc = nlp_models[lang_code](text_input)
74
+ metrics = analyze_text_dimensions(doc)
75
+
76
+ # Actualizar estado con nuevos resultados
77
+ st.session_state.current_doc = doc
78
+ st.session_state.current_metrics = metrics
79
+ st.session_state.show_results = True
80
+
81
+ # Mantener el texto en el estado
82
+ st.session_state.text_input = text_input
83
+
84
+ except Exception as e:
85
+ logger.error(f"Error en análisis: {str(e)}")
86
+ st.error(t.get('analysis_error', "Error al analizar el texto"))
87
+
88
+ # Mostrar resultados en la columna derecha
89
+ with results_col:
90
+ if st.session_state.show_results and st.session_state.current_metrics is not None:
91
+ display_recommendations(st.session_state.current_metrics, t)
92
+
93
+ # Opción para ver detalles
94
+ with st.expander("🔍 Ver análisis detallado", expanded=False):
95
+ display_current_situation_visual(
96
+ st.session_state.current_doc,
97
+ st.session_state.current_metrics
98
+ )
99
+
100
+ def display_current_situation_visual(doc, metrics):
101
+ """
102
+ Muestra visualizaciones detalladas del análisis.
103
+ """
104
+ try:
105
+ st.markdown("### 📊 Visualizaciones Detalladas")
106
+
107
+ # 1. Visualización de vocabulario
108
+ with st.expander("Análisis de Vocabulario", expanded=True):
109
+ vocab_graph = create_vocabulary_network(doc)
110
+ if vocab_graph:
111
+ st.pyplot(vocab_graph)
112
+ plt.close(vocab_graph)
113
+
114
+ # 2. Visualización de estructura
115
+ with st.expander("Análisis de Estructura", expanded=True):
116
+ syntax_graph = create_syntax_complexity_graph(doc)
117
+ if syntax_graph:
118
+ st.pyplot(syntax_graph)
119
+ plt.close(syntax_graph)
120
+
121
+ # 3. Visualización de cohesión
122
+ with st.expander("Análisis de Cohesión", expanded=True):
123
+ cohesion_graph = create_cohesion_heatmap(doc)
124
+ if cohesion_graph:
125
+ st.pyplot(cohesion_graph)
126
+ plt.close(cohesion_graph)
127
+
128
+ except Exception as e:
129
+ logger.error(f"Error en visualización: {str(e)}")
130
+ st.error("Error al generar las visualizaciones")
131
+
132
+
133
+ ####################################
134
+ def display_recommendations(metrics, t):
135
+ """
136
+ Muestra recomendaciones basadas en las métricas del texto.
137
+ """
138
+ # 1. Resumen Visual con Explicación
139
+ st.markdown("### 📊 Resumen de tu Análisis")
140
+
141
+ # Explicación del sistema de medición
142
+ st.markdown("""
143
+ **¿Cómo interpretar los resultados?**
144
+
145
+ Cada métrica se mide en una escala de 0.0 a 1.0, donde:
146
+ - 0.0 - 0.4: Necesita atención prioritaria
147
+ - 0.4 - 0.6: En desarrollo
148
+ - 0.6 - 0.8: Buen nivel
149
+ - 0.8 - 1.0: Nivel avanzado
150
+ """)
151
+
152
+ # Métricas con explicaciones detalladas
153
+ col1, col2, col3, col4 = st.columns(4)
154
+
155
+ with col1:
156
+ st.metric(
157
+ "Vocabulario",
158
+ f"{metrics['vocabulary']['normalized_score']:.2f}",
159
+ help="Mide la variedad y riqueza de tu vocabulario. Un valor alto indica un uso diverso de palabras sin repeticiones excesivas."
160
+ )
161
+ with st.expander("ℹ️ Detalles"):
162
+ st.write("""
163
+ **Vocabulario**
164
+ - Evalúa la diversidad léxica
165
+ - Considera palabras únicas vs. totales
166
+ - Detecta repeticiones innecesarias
167
+ - Valor óptimo: > 0.7
168
+ """)
169
+
170
+ with col2:
171
+ st.metric(
172
+ "Estructura",
173
+ f"{metrics['structure']['normalized_score']:.2f}",
174
+ help="Evalúa la complejidad y variedad de las estructuras sintácticas en tus oraciones."
175
+ )
176
+ with st.expander("ℹ️ Detalles"):
177
+ st.write("""
178
+ **Estructura**
179
+ - Analiza la complejidad sintáctica
180
+ - Mide variación en construcciones
181
+ - Evalúa longitud de oraciones
182
+ - Valor óptimo: > 0.6
183
+ """)
184
+
185
+ with col3:
186
+ st.metric(
187
+ "Cohesión",
188
+ f"{metrics['cohesion']['normalized_score']:.2f}",
189
+ help="Indica qué tan bien conectadas están tus ideas y párrafos entre sí."
190
+ )
191
+ with st.expander("ℹ️ Detalles"):
192
+ st.write("""
193
+ **Cohesión**
194
+ - Mide conexiones entre ideas
195
+ - Evalúa uso de conectores
196
+ - Analiza progresión temática
197
+ - Valor óptimo: > 0.65
198
+ """)
199
+
200
+ with col4:
201
+ st.metric(
202
+ "Claridad",
203
+ f"{metrics['clarity']['normalized_score']:.2f}",
204
+ help="Evalúa la facilidad de comprensión general de tu texto."
205
+ )
206
+ with st.expander("ℹ️ Detalles"):
207
+ st.write("""
208
+ **Claridad**
209
+ - Evalúa comprensibilidad
210
+ - Considera estructura lógica
211
+ - Mide precisión expresiva
212
+ - Valor óptimo: > 0.7
213
+ """)
214
+
215
+ st.markdown("---")
216
+
217
+ # 2. Recomendaciones basadas en puntuaciones
218
+ st.markdown("### 💡 Recomendaciones Personalizadas")
219
+
220
+ # Recomendaciones morfosintácticas
221
+ if metrics['structure']['normalized_score'] < 0.6:
222
+ st.warning("""
223
+ #### 📝 Análisis Morfosintáctico Recomendado
224
+
225
+ **Tu nivel actual sugiere que sería beneficioso:**
226
+ 1. Realizar el análisis morfosintáctico de 3 párrafos diferentes
227
+ 2. Practicar la combinación de oraciones simples en compuestas
228
+ 3. Identificar y clasificar tipos de oraciones en textos académicos
229
+ 4. Ejercitar la variación sintáctica
230
+
231
+ *Hacer clic en "Comenzar ejercicios" para acceder al módulo morfosintáctico*
232
+ """)
233
+
234
+ # Recomendaciones semánticas
235
+ if metrics['vocabulary']['normalized_score'] < 0.7:
236
+ st.warning("""
237
+ #### 📚 Análisis Semántico Recomendado
238
+
239
+ **Para mejorar tu vocabulario y expresión:**
240
+ A. Realiza el análisis semántico de un texto académico
241
+ B. Identifica y agrupa campos semánticos relacionados
242
+ C. Practica la sustitución léxica en tus párrafos
243
+ D. Construye redes de conceptos sobre tu tema
244
+ E. Analiza las relaciones entre ideas principales
245
+
246
+ *Hacer clic en "Comenzar ejercicios" para acceder al módulo semántico*
247
+ """)
248
+
249
+ # Recomendaciones de cohesión
250
+ if metrics['cohesion']['normalized_score'] < 0.65:
251
+ st.warning("""
252
+ #### 🔄 Análisis del Discurso Recomendado
253
+
254
+ **Para mejorar la conexión entre ideas:**
255
+ 1. Realizar el análisis del discurso de un texto modelo
256
+ 2. Practicar el uso de diferentes conectores textuales
257
+ 3. Identificar cadenas de referencia en textos académicos
258
+ 4. Ejercitar la progresión temática en tus escritos
259
+
260
+ *Hacer clic en "Comenzar ejercicios" para acceder al módulo de análisis del discurso*
261
+ """)
262
+
263
+ # Botón de acción
264
+ st.markdown("---")
265
+ col1, col2, col3 = st.columns([1,2,1])
266
+ with col2:
267
+ st.button(
268
+ "🎯 Comenzar ejercicios recomendados",
269
+ type="primary",
270
+ use_container_width=True,
271
+ key="start_exercises"
272
+ )