File size: 4,435 Bytes
b5a8e1a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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'
]