File size: 4,435 Bytes
0859e68
 
ab3800b
 
7825eba
c81b746
7e1f71f
8ecaf5d
 
 
178952f
 
 
ab3800b
 
0859e68
8ecaf5d
810ccfa
 
0859e68
217a744
810ccfa
 
 
 
 
 
 
 
 
217a744
810ccfa
 
 
 
 
 
 
 
 
 
217a744
 
810ccfa
 
 
 
 
 
0859e68
 
810ccfa
 
 
 
 
 
 
0859e68
810ccfa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0859e68
217a744
810ccfa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0859e68
158372b
 
 
 
 
 
 
 
 
 
 
 
 
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
#modules/morphosyntax/morphosyntax_process.py
import streamlit as st

from ..text_analysis.morpho_analysis import (
    get_repeated_words_colors,
    highlight_repeated_words,
    generate_arc_diagram,
    get_detailed_pos_analysis,
    get_morphological_analysis,
    get_sentence_structure_analysis,
    perform_advanced_morphosyntactic_analysis,
    POS_COLORS,
    POS_TRANSLATIONS
)

from ..database.morphosintax_mongo_db import store_student_morphosyntax_result

import logging
logger = logging.getLogger(__name__)


def process_morphosyntactic_input(text, lang_code, nlp_models, t):
    """
    Procesa el texto ingresado para realizar el análisis morfosintáctico.
    
    Args:
        text: Texto a analizar
        lang_code: Código del idioma
        nlp_models: Diccionario de modelos spaCy
        t: Diccionario de traducciones
    
    Returns:
        tuple: (análisis, visualizaciones, texto_resaltado, mensaje)
    """
    try:
        # Realizar el análisis morfosintáctico
        doc = nlp_models[lang_code](text)
        
        # Obtener el análisis avanzado
        analysis = perform_advanced_morphosyntactic_analysis(text, nlp_models[lang_code])
        
        # Generar visualizaciones - AQUÍ ESTÁ EL CAMBIO
        arc_diagrams = generate_arc_diagram(doc)  # Quitamos lang_code
        
        # Obtener palabras repetidas y texto resaltado
        word_colors = get_repeated_words_colors(doc)
        highlighted_text = highlight_repeated_words(doc, word_colors)
        
        # Guardar el análisis en la base de datos
        store_student_morphosyntax_result(
            st.session_state.username,
            text,
            {
                'arc_diagrams': arc_diagrams,
                'pos_analysis': analysis['pos_analysis'],
                'morphological_analysis': analysis['morphological_analysis'],
                'sentence_structure': analysis['sentence_structure']
            }
        )
        
        return {
            'analysis': analysis,
            'visualizations': arc_diagrams,
            'highlighted_text': highlighted_text,
            'success': True,
            'message': t.get('MORPHOSYNTACTIC', {}).get('success_message', 'Analysis completed successfully')
        }
        
    except Exception as e:
        logger.error(f"Error en el análisis morfosintáctico: {str(e)}")
        return {
            'analysis': None,
            'visualizations': None,
            'highlighted_text': None,
            'success': False,
            'message': t.get('MORPHOSYNTACTIC', {}).get('error_message', f'Error in analysis: {str(e)}')
        }


def format_analysis_results(analysis_result, t):
    """
    Formatea los resultados del análisis para su visualización.
    
    Args:
        analysis_result: Resultado del análisis morfosintáctico
        t: Diccionario de traducciones
    
    Returns:
        dict: Resultados formateados para visualización
    """
    morpho_t = t.get('MORPHOSYNTACTIC', {})
    
    if not analysis_result['success']:
        return {
            'formatted_text': analysis_result['message'],
            'visualizations': None
        }
        
    formatted_sections = []
    
    # Formato para análisis POS
    if 'pos_analysis' in analysis_result['analysis']:
        pos_section = [f"### {morpho_t.get('pos_analysis', 'Part of Speech Analysis')}"]
        for pos_item in analysis_result['analysis']['pos_analysis']:
            pos_section.append(
                f"- {morpho_t.get(pos_item['pos'], pos_item['pos'])}: "
                f"{pos_item['count']} ({pos_item['percentage']}%)\n  "
                f"Ejemplos: {', '.join(pos_item['examples'])}"
            )
        formatted_sections.append('\n'.join(pos_section))
    
    # Agregar otras secciones de formato según sea necesario
    
    return {
        'formatted_text': '\n\n'.join(formatted_sections),
        'visualizations': analysis_result['visualizations'],
        'highlighted_text': analysis_result['highlighted_text']
    }

# Re-exportar las funciones y constantes necesarias
__all__ = [
    'process_morphosyntactic_input',
    'highlight_repeated_words',
    'generate_arc_diagram',
    'get_repeated_words_colors',
    'get_detailed_pos_analysis',
    'get_morphological_analysis',
    'get_sentence_structure_analysis',
    'perform_advanced_morphosyntactic_analysis',
    'POS_COLORS',
    'POS_TRANSLATIONS'
]