# modules/studentact/current_situation_interface.py import streamlit as st import logging from ..utils.widget_utils import generate_unique_key from .current_situation_analysis import ( analyze_text_dimensions, analyze_clarity, analyze_vocabulary_diversity, analyze_cohesion, analyze_structure, get_dependency_depths, normalize_score, generate_sentence_graphs, generate_word_connections, generate_connection_paths, create_vocabulary_network, create_syntax_complexity_graph, create_cohesion_heatmap, ) logger = logging.getLogger(__name__) def display_current_situation_interface(lang_code, nlp_models, t): """ Interfaz simplificada para el análisis inicial, enfocada en recomendaciones directas. """ st.markdown("## Análisis Inicial de Escritura") # Container principal con dos columnas with st.container(): input_col, results_col = st.columns([1,2]) with input_col: st.markdown("### Ingresa tu texto") text_input = st.text_area( t.get('input_prompt', "Escribe o pega tu texto aquí:"), height=400, key=f"initial_analysis_input_{st.session_state.get('analysis_count', 0)}", # Key dinámica help="Este texto será analizado para darte recomendaciones personalizadas" ) if st.button( t.get('analyze_button', "Analizar mi escritura"), type="primary", disabled=not text_input.strip(), # Verificar que no esté vacío use_container_width=True, key=f"analyze_button_{st.session_state.get('analysis_count', 0)}" # Key dinámica ): try: with st.spinner(t.get('processing', "Analizando...")): # Incrementar contador de análisis if 'analysis_count' not in st.session_state: st.session_state.analysis_count = 0 st.session_state.analysis_count += 1 # Procesar texto y obtener métricas doc = nlp_models[lang_code](text_input) metrics = analyze_text_dimensions(doc) # Guardar resultados en el estado st.session_state.current_doc = doc st.session_state.current_metrics = metrics # Forzar rerun para actualizar visualización st.rerun() except Exception as e: logger.error(f"Error en análisis: {str(e)}") st.error(t.get('analysis_error', "Error al analizar el texto")) # Mostrar resultados si existen with results_col: if hasattr(st.session_state, 'current_metrics'): display_recommendations(st.session_state.current_metrics, t) # Opción para ver detalles with st.expander("🔍 Ver análisis detallado", expanded=False): display_current_situation_visual( st.session_state.current_doc, st.session_state.current_metrics ) def display_recommendations(metrics, t): """ Muestra recomendaciones basadas en las métricas del texto. """ # 1. Resumen Visual con Explicación st.markdown("### 📊 Resumen de tu Análisis") # Explicación del sistema de medición st.markdown(""" **¿Cómo interpretar los resultados?** Cada métrica se mide en una escala de 0.0 a 1.0, donde: - 0.0 - 0.4: Necesita atención prioritaria - 0.4 - 0.6: En desarrollo - 0.6 - 0.8: Buen nivel - 0.8 - 1.0: Nivel avanzado """) # Métricas con explicaciones detalladas col1, col2, col3, col4 = st.columns(4) with col1: st.metric( "Vocabulario", f"{metrics['vocabulary']['normalized_score']:.2f}", help="Mide la variedad y riqueza de tu vocabulario. Un valor alto indica un uso diverso de palabras sin repeticiones excesivas." ) with st.expander("ℹ️ Detalles"): st.write(""" **Vocabulario** - Evalúa la diversidad léxica - Considera palabras únicas vs. totales - Detecta repeticiones innecesarias - Valor óptimo: > 0.7 """) with col2: st.metric( "Estructura", f"{metrics['structure']['normalized_score']:.2f}", help="Evalúa la complejidad y variedad de las estructuras sintácticas en tus oraciones." ) with st.expander("ℹ️ Detalles"): st.write(""" **Estructura** - Analiza la complejidad sintáctica - Mide variación en construcciones - Evalúa longitud de oraciones - Valor óptimo: > 0.6 """) with col3: st.metric( "Cohesión", f"{metrics['cohesion']['normalized_score']:.2f}", help="Indica qué tan bien conectadas están tus ideas y párrafos entre sí." ) with st.expander("ℹ️ Detalles"): st.write(""" **Cohesión** - Mide conexiones entre ideas - Evalúa uso de conectores - Analiza progresión temática - Valor óptimo: > 0.65 """) with col4: st.metric( "Claridad", f"{metrics['clarity']['normalized_score']:.2f}", help="Evalúa la facilidad de comprensión general de tu texto." ) with st.expander("ℹ️ Detalles"): st.write(""" **Claridad** - Evalúa comprensibilidad - Considera estructura lógica - Mide precisión expresiva - Valor óptimo: > 0.7 """) st.markdown("---") # 2. Recomendaciones basadas en puntuaciones st.markdown("### 💡 Recomendaciones Personalizadas") # Recomendaciones morfosintácticas if metrics['structure']['normalized_score'] < 0.6: st.warning(""" #### 📝 Análisis Morfosintáctico Recomendado **Tu nivel actual sugiere que sería beneficioso:** 1. Realizar el análisis morfosintáctico de 3 párrafos diferentes 2. Practicar la combinación de oraciones simples en compuestas 3. Identificar y clasificar tipos de oraciones en textos académicos 4. Ejercitar la variación sintáctica *Hacer clic en "Comenzar ejercicios" para acceder al módulo morfosintáctico* """) # Recomendaciones semánticas if metrics['vocabulary']['normalized_score'] < 0.7: st.warning(""" #### 📚 Análisis Semántico Recomendado **Para mejorar tu vocabulario y expresión:** A. Realiza el análisis semántico de un texto académico B. Identifica y agrupa campos semánticos relacionados C. Practica la sustitución léxica en tus párrafos D. Construye redes de conceptos sobre tu tema E. Analiza las relaciones entre ideas principales *Hacer clic en "Comenzar ejercicios" para acceder al módulo semántico* """) # Recomendaciones de cohesión if metrics['cohesion']['normalized_score'] < 0.65: st.warning(""" #### 🔄 Análisis del Discurso Recomendado **Para mejorar la conexión entre ideas:** 1. Realizar el análisis del discurso de un texto modelo 2. Practicar el uso de diferentes conectores textuales 3. Identificar cadenas de referencia en textos académicos 4. Ejercitar la progresión temática en tus escritos *Hacer clic en "Comenzar ejercicios" para acceder al módulo de análisis del discurso* """) # Botón de acción st.markdown("---") col1, col2, col3 = st.columns([1,2,1]) with col2: st.button( "🎯 Comenzar ejercicios recomendados", type="primary", use_container_width=True, key="start_exercises" )