AIdeaText commited on
Commit
69d02bb
·
verified ·
1 Parent(s): 311421a

Update modules/studentact/current_situation_interface.py

Browse files
modules/studentact/current_situation_interface.py CHANGED
@@ -74,197 +74,7 @@ TEXT_TYPES = {
74
  }
75
  }
76
  ####################################
77
-
78
- # Función para generar recomendaciones basadas en las métricas
79
- def generate_recommendations(metrics, text_type, lang_code):
80
- """
81
- Genera recomendaciones básicas basadas en las métricas y el tipo de texto.
82
- Este es un generador de recomendaciones básico que puede ser reemplazado
83
- por una versión más avanzada que use la API de Claude.
84
- """
85
- try:
86
- # Obtenemos los umbrales para el tipo de texto seleccionado
87
- thresholds = TEXT_TYPES[text_type]['thresholds']
88
-
89
- # Identificamos las áreas más débiles
90
- areas = ['vocabulary', 'structure', 'cohesion', 'clarity']
91
- scores = {area: metrics[area]['normalized_score'] for area in areas}
92
- weak_areas = sorted(areas, key=lambda x: scores[x])
93
-
94
- # La primera área es la más débil
95
- priority_area = weak_areas[0]
96
-
97
- # Recomendaciones básicas para cada área
98
- recommendations = {
99
- 'priority': {
100
- 'area': priority_area,
101
- 'tips': ["Despliega el asistente virtual (potenciado por Claude.AI) que se ubica en la parte superior izquierda, presiona la flecha del lado del logo."]
102
- },
103
- 'vocabulary': [
104
- "Utiliza un vocabulario más variado y específico.",
105
- "Evita repetir palabras, usa sinónimos.",
106
- "Incorpora términos técnicos apropiados para tu disciplina."
107
- ],
108
- 'structure': [
109
- "Varía la estructura de tus oraciones.",
110
- "Usa tanto oraciones simples como complejas.",
111
- "Organiza tus ideas en párrafos con una estructura clara."
112
- ],
113
- 'cohesion': [
114
- "Utiliza conectores y marcadores textuales.",
115
- "Asegura la progresión lógica entre ideas.",
116
- "Mantén la coherencia temática a lo largo del texto."
117
- ],
118
- 'clarity': [
119
- "Evita frases excesivamente largas o complejas.",
120
- "Define términos técnicos cuando sea necesario.",
121
- "Revisa que cada párrafo desarrolle una idea principal."
122
- ],
123
- 'text_type': text_type # Guardamos el tipo de texto
124
- }
125
-
126
- return recommendations
127
- except Exception as e:
128
- logger.error(f"Error en generate_recommendations: {str(e)}")
129
- # Recomendaciones por defecto en caso de error
130
- return {
131
- 'priority': {
132
- 'area': 'clarity',
133
- 'tips': ["Revisa tu texto para mejorar su claridad y estructura."]
134
- },
135
- 'text_type': text_type
136
- }
137
-
138
- # Función para mostrar recomendaciones
139
- def display_recommendations_with_actions(recommendations, lang_code, t):
140
- """
141
- Muestra recomendaciones personalizadas para mejorar el texto.
142
- Esta función puede ser reemplazada por display_personalized_recommendations
143
- cuando se implemente la integración con Claude API.
144
- """
145
- try:
146
- # Definir colores para cada categoría
147
- colors = {
148
- 'vocabulary': '#2E86C1', # Azul
149
- 'structure': '#28B463', # Verde
150
- 'cohesion': '#F39C12', # Naranja
151
- 'clarity': '#9B59B6', # Púrpura
152
- 'priority': '#E74C3C' # Rojo para la categoría prioritaria
153
- }
154
-
155
- # Iconos para cada categoría
156
- icons = {
157
- 'vocabulary': '📚',
158
- 'structure': '🏗️',
159
- 'cohesion': '🔄',
160
- 'clarity': '💡',
161
- 'priority': '⭐'
162
- }
163
-
164
- # Obtener traducciones para cada dimensión
165
- dimension_names = {
166
- 'vocabulary': t.get('SITUATION_ANALYSIS', {}).get('vocabulary', "Vocabulario"),
167
- 'structure': t.get('SITUATION_ANALYSIS', {}).get('structure', "Estructura"),
168
- 'cohesion': t.get('SITUATION_ANALYSIS', {}).get('cohesion', "Cohesión"),
169
- 'clarity': t.get('SITUATION_ANALYSIS', {}).get('clarity', "Claridad"),
170
- 'priority': t.get('SITUATION_ANALYSIS', {}).get('priority', "Prioridad")
171
- }
172
-
173
- # Título de la sección prioritaria
174
- priority_focus = t.get('SITUATION_ANALYSIS', {}).get('priority_focus', 'Área prioritaria para mejorar')
175
- st.markdown(f"### {icons['priority']} {priority_focus}")
176
-
177
- # Determinar área prioritaria
178
- priority_area = recommendations.get('priority', {}).get('area', 'vocabulary')
179
- priority_title = dimension_names.get(priority_area, "Área prioritaria")
180
-
181
- # Determinar el contenido para mostrar
182
- priority_content = recommendations.get('priority', {}).get('tips', [])
183
- if isinstance(priority_content, list):
184
- priority_content = "<br>".join([f"• {tip}" for tip in priority_content])
185
-
186
- # Mostrar la recomendación prioritaria
187
- with st.container():
188
- st.markdown(
189
- f"""
190
- <div style="border:2px solid {colors['priority']}; border-radius:5px; padding:15px; margin-bottom:20px;">
191
- <h4 style="color:{colors['priority']};">{priority_title}</h4>
192
- <p>{priority_content}</p>
193
- </div>
194
- """,
195
- unsafe_allow_html=True
196
- )
197
-
198
- # Crear dos columnas para las tarjetas de recomendaciones restantes
199
- col1, col2 = st.columns(2)
200
-
201
- # Distribuir las recomendaciones en las columnas
202
- categories = ['vocabulary', 'structure', 'cohesion', 'clarity']
203
- for i, category in enumerate(categories):
204
- # Saltar si esta categoría ya es la prioritaria
205
- if category == priority_area:
206
- continue
207
-
208
- # Obtener las recomendaciones para esta categoría
209
- category_content = recommendations.get(category, [])
210
- if isinstance(category_content, list):
211
- category_content = "<br>".join([f"• {tip}" for tip in category_content])
212
-
213
- category_title = dimension_names.get(category, category)
214
-
215
- # Alternar entre columnas
216
- with col1 if i % 2 == 0 else col2:
217
- # Crear tarjeta para cada recomendación
218
- st.markdown(
219
- f"""
220
- <div style="border:1px solid {colors[category]}; border-radius:5px; padding:10px; margin-bottom:15px;">
221
- <h4 style="color:{colors[category]};">{icons[category]} {category_title}</h4>
222
- <p>{category_content}</p>
223
- </div>
224
- """,
225
- unsafe_allow_html=True
226
- )
227
-
228
- # Agregar una sección para recursos adicionales
229
- st.markdown("---")
230
- st.markdown("### 📖 Recursos adicionales")
231
-
232
- with st.expander("Ver recursos de aprendizaje"):
233
- st.markdown("""
234
- ### Recursos por área
235
-
236
- #### Vocabulario
237
- - **Diccionario de la Real Academia Española**: [www.rae.es](https://www.rae.es)
238
- - **Fundación del Español Urgente**: [www.fundeu.es](https://www.fundeu.es)
239
-
240
- #### Estructura
241
- - **Manual de gramática**: [Gramática y ortografía para dummies](https://www.planetadelibros.com/libro-gramatica-y-ortografia-para-dummies/248265)
242
- - **Ortografía de la RAE**: [Ortografía básica de la lengua española](https://www.rae.es/obras-academicas/ortografia/ortografia-basica-de-la-lengua-espanola)
243
-
244
- #### Cohesión
245
- - **Centro Virtual Cervantes**: [Diccionario de términos clave de ELE](https://cvc.cervantes.es/ensenanza/biblioteca_ele/diccio_ele/indice.htm)
246
- - **Curso de cohesión textual**: [Centro de Escritura Javeriano](https://www2.javerianacali.edu.co/sites/ujc/files/normas_apa_revisada_y_actualizada_mayo_2019.pdf)
247
-
248
- #### Claridad
249
- - **Curso de escritura científica**: [Cómo escribir y publicar trabajos científicos](https://www.conacyt.gov.py/sites/default/files/upload_editores/u38/CONI-NOR-113.pdf)
250
- - **Manual de estilo**: [Manual de estilo de la lengua española](https://www.planetadelibros.com/libro-manual-de-estilo-de-la-lengua-espanola/17811)
251
- """)
252
-
253
- # Boletines o actualizaciones del sistema
254
- with st.expander("📬 Actualizaciones de AIdeaText"):
255
- st.markdown("""
256
- ## Próximas actualizaciones
257
-
258
- - **Nueva funcionalidad**: Análisis comparativo entre textos propios
259
- - **Mejora**: Recomendaciones más detalladas y personalizadas
260
- - **Próximamente**: Tutorial interactivo para mejorar la escritura
261
-
262
- > Estamos trabajando continuamente para mejorar tus herramientas de escritura.
263
- """)
264
- except Exception as e:
265
- logger.error(f"Error mostrando recomendaciones: {str(e)}")
266
- st.error("Error al mostrar las recomendaciones")
267
-
268
  def display_current_situation_interface(lang_code, nlp_models, t):
269
  """
270
  Interfaz simplificada con gráfico de radar para visualizar métricas.
@@ -395,6 +205,8 @@ def display_current_situation_interface(lang_code, nlp_models, t):
395
  logger.error(f"Error en interfaz principal: {str(e)}")
396
  st.error("Ocurrió un error al cargar la interfaz")
397
 
 
 
398
  def display_diagnosis(metrics, text_type=None):
399
  """
400
  Muestra los resultados del análisis: métricas verticalmente y gráfico radar.
@@ -472,7 +284,8 @@ def display_diagnosis(metrics, text_type=None):
472
  logger.error(f"Error mostrando resultados: {str(e)}")
473
  st.error("Error al mostrar los resultados")
474
 
475
-
 
476
  def display_radar_chart(metrics_config, thresholds):
477
  """
478
  Muestra el gráfico radar con los resultados.
@@ -530,4 +343,50 @@ def display_radar_chart(metrics_config, thresholds):
530
 
531
  except Exception as e:
532
  logger.error(f"Error mostrando gráfico radar: {str(e)}")
533
- st.error("Error al mostrar el gráfico")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  }
75
  }
76
  ####################################
77
+ ####################################
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  def display_current_situation_interface(lang_code, nlp_models, t):
79
  """
80
  Interfaz simplificada con gráfico de radar para visualizar métricas.
 
205
  logger.error(f"Error en interfaz principal: {str(e)}")
206
  st.error("Ocurrió un error al cargar la interfaz")
207
 
208
+ ####################################
209
+ ####################################
210
  def display_diagnosis(metrics, text_type=None):
211
  """
212
  Muestra los resultados del análisis: métricas verticalmente y gráfico radar.
 
284
  logger.error(f"Error mostrando resultados: {str(e)}")
285
  st.error("Error al mostrar los resultados")
286
 
287
+ ####################################
288
+ ####################################
289
  def display_radar_chart(metrics_config, thresholds):
290
  """
291
  Muestra el gráfico radar con los resultados.
 
343
 
344
  except Exception as e:
345
  logger.error(f"Error mostrando gráfico radar: {str(e)}")
346
+ st.error("Error al mostrar el gráfico")
347
+
348
+ #############################################
349
+ #############################################
350
+ def display_results(metrics, text_type=None):
351
+ """
352
+ Muestra los resultados del análisis: métricas verticalmente y gráfico radar.
353
+ """
354
+ try:
355
+ # Usar valor por defecto si no se especifica tipo
356
+ text_type = text_type or 'student_essay'
357
+
358
+ # Obtener umbrales según el tipo de texto
359
+ thresholds = TEXT_TYPES[text_type]['thresholds']
360
+
361
+ # Crear dos columnas para las métricas y el gráfico
362
+ metrics_col, graph_col = st.columns([1, 1.5])
363
+
364
+ # Columna de métricas
365
+ with metrics_col:
366
+ # (código existente de métricas)
367
+ # ...
368
+
369
+ # Gráfico radar en la columna derecha
370
+ with graph_col:
371
+ display_radar_chart(metrics_config, thresholds)
372
+
373
+ # Añadir esta sección para llamar a display_personalized_recommendations
374
+ if 'current_doc' in st.session_state and st.session_state.current_doc is not None:
375
+ st.markdown("---") # Añadir separador
376
+
377
+ # Obtener traducciones si están disponibles
378
+ # Puedes obtener las traducciones desde donde las estés definiendo en tu aplicación
379
+ t = get_translations(st.session_state.lang_code) # Asegúrate de que esta función exista
380
+
381
+ # Llamar a la función importada
382
+ display_personalized_recommendations(
383
+ text=st.session_state.text_input,
384
+ metrics=metrics,
385
+ text_type=text_type,
386
+ lang_code=st.session_state.lang_code,
387
+ t=t
388
+ )
389
+
390
+ except Exception as e:
391
+ logger.error(f"Error mostrando resultados: {str(e)}")
392
+ st.error("Error al mostrar los resultados")