# 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(): # Columnas para entrada y resultados 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=generate_unique_key("initial_analysis", "input"), 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, use_container_width=True ): try: with st.spinner(t.get('processing', "Analizando...")): # Procesar texto y obtener métricas doc = nlp_models[lang_code](text_input) metrics = analyze_text_dimensions(doc) # Mostrar resultados en la columna derecha with results_col: display_recommendations(metrics, t) # Opción para ver detalles with st.expander("🔍 Ver análisis detallado", expanded=False): display_current_situation_visual(doc, metrics) except Exception as e: logger.error(f"Error en análisis: {str(e)}") st.error(t.get('analysis_error', "Error al analizar el texto")) def display_recommendations(metrics, t): """ Muestra recomendaciones basadas en las métricas del texto. """ st.markdown("### Recomendaciones Personalizadas") # Definir umbrales para cada dimensión THRESHOLDS = { 'vocabulary': 0.7, 'structure': 0.6, 'cohesion': 0.65, 'clarity': 0.7 } # 1. Recomendaciones morfosintácticas st.markdown("#### Análisis de Estructura") if metrics['structure']['normalized_score'] < THRESHOLDS['structure']: st.warning(""" 📝 **Para mejorar la estructura de tus textos, te recomendamos:** 1. Realiza el análisis morfosintáctico de 3 párrafos diferentes 2. Practica la combinación de oraciones simples en compuestas 3. Identifica y clasifica los tipos de oraciones en textos académicos 4. Ejercita la variación sintáctica """) else: st.success("✨ ¡Buen manejo de estructuras! Mantén el nivel con práctica regular.") # 2. Recomendaciones semánticas st.markdown("#### Análisis de Vocabulario") if metrics['vocabulary']['normalized_score'] < THRESHOLDS['vocabulary']: st.warning(""" 📚 **Para enriquecer tu vocabulario, te sugerimos:** A. Realiza el análisis semántico de un texto académico B. Identifica y agrupa campos semánticos C. Practica la sustitución léxica en tus párrafos D. Construye redes de conceptos E. Analiza las relaciones entre ideas principales """) else: st.success("📖 ¡Excelente vocabulario! Continúa expandiéndolo con lecturas variadas.") # 3. Recomendaciones de cohesión st.markdown("#### Análisis de Cohesión") if metrics['cohesion']['normalized_score'] < THRESHOLDS['cohesion']: st.warning(""" 🔄 **Para mejorar la cohesión de tus textos:** 1. Realiza el análisis del discurso de un texto modelo 2. Practica el uso de diferentes conectores textuales 3. Identifica las cadenas de referencia en textos académicos 4. Ejercita la progresión temática en tus escritos """) else: st.success("🔗 ¡Buena cohesión textual! Sigue practicando para mantener la calidad.") # Agregar resumen visual de las métricas st.markdown("### 📊 Resumen de tu análisis") col1, col2, col3, col4 = st.columns(4) with col1: st.metric( "Vocabulario", f"{metrics['vocabulary']['normalized_score']:.2f}", help="Mide la riqueza y variedad de tu vocabulario" ) with col2: st.metric( "Estructura", f"{metrics['structure']['normalized_score']:.2f}", help="Evalúa la complejidad de tus oraciones" ) with col3: st.metric( "Cohesión", f"{metrics['cohesion']['normalized_score']:.2f}", help="Indica qué tan bien conectadas están tus ideas" ) with col4: st.metric( "Claridad", f"{metrics['clarity']['normalized_score']:.2f}", help="Mide la facilidad de comprensión de tu texto" ) # Botón para comenzar ejercicios 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" )