File size: 6,139 Bytes
e2c4138
 
 
 
 
 
47b7a04
 
 
 
 
 
 
 
 
 
 
e2c4138
47b7a04
e2c4138
 
 
 
5a6bd8e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b1257b2
5a6bd8e
 
 
b1257b2
 
5a6bd8e
 
 
b1257b2
 
 
 
 
 
 
 
5a6bd8e
 
b1257b2
5a6bd8e
 
b1257b2
 
 
 
 
 
 
 
 
5a6bd8e
 
b1257b2
5a6bd8e
 
b1257b2
 
5a6bd8e
 
b1257b2
 
 
 
5a6bd8e
b1257b2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5a6bd8e
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# 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"
        )