File size: 4,080 Bytes
0859e68
 
ab3800b
 
8ecaf5d
 
 
 
 
 
 
ab3800b
 
0859e68
8ecaf5d
810ccfa
 
0859e68
217a744
810ccfa
 
 
 
 
 
 
 
 
217a744
810ccfa
 
 
 
 
 
 
 
 
 
217a744
 
810ccfa
 
 
 
 
 
0859e68
 
810ccfa
 
 
 
 
 
 
0859e68
810ccfa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0859e68
217a744
810ccfa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0859e68
810ccfa
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
#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    
)

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']
    }

__all__ = ['process_morphosyntactic_input', 'format_analysis_results']