File size: 3,839 Bytes
dd8c05b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f874a15
dd8c05b
 
 
 
 
f874a15
dd8c05b
 
 
4c16aed
 
 
 
 
 
dd8c05b
 
 
 
 
 
 
 
 
4c16aed
dd8c05b
 
 
 
f874a15
dd8c05b
 
 
 
 
 
 
 
 
 
f874a15
dd8c05b
 
 
 
 
 
 
 
 
 
 
 
 
f874a15
4c16aed
dd8c05b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91b2c3c
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
# modules/semantic/semantic_process.py
import streamlit as st
import matplotlib.pyplot as plt
import io
import base64
import logging

from ..text_analysis.semantic_analysis import (
    perform_semantic_analysis,
    identify_key_concepts,
    create_concept_graph,
    visualize_concept_graph
)
from ..database.semantic_mongo_db import store_student_semantic_result

logger = logging.getLogger(__name__)

#############################################################################
def process_semantic_input(text_content, lang_code, nlp_models, semantic_t):
    """
    Procesa el texto ingresado para realizar el análisis semántico.
    """
    try:
        logger.info(f"Iniciando análisis semántico para texto de {len(text_content)} caracteres")
        
        # Realizar el análisis semántico
        nlp = nlp_models[lang_code]
        analysis_result = perform_semantic_analysis(
            text_content,
            nlp,
            lang_code,
            semantic_t
        )
        
        if not analysis_result['success']:
            return {
                'success': False,
                'message': analysis_result['error'],
                'analysis': None
            }
            
        logger.info("Análisis semántico completado. Guardando resultados...")
       
        # Intentar guardar en la base de datos
        try:
            store_result = store_student_semantic_result(
                st.session_state.username,
                text_content,  # Cambiado de text a text_content
                analysis_result
            )
            if not store_result:
                logger.warning("No se pudo guardar el análisis en la base de datos")
        except Exception as db_error:
            logger.error(f"Error al guardar en base de datos: {str(db_error)}")
        
        # Devolver el resultado incluso si falla el guardado
        return {
            'success': True,
            'message': semantic_t.get('success_message', 'Analysis completed successfully'),  # Cambiado de t a semantic_t
            'analysis': {
                'key_concepts': analysis_result['key_concepts'],
                'concept_graph': analysis_result['concept_graph']
            }
        }
        
    except Exception as e:
        logger.error(f"Error en process_semantic_input: {str(e)}")
        return {
            'success': False,
            'message': str(e),
            'analysis': None
        }

########################################################################################
def format_semantic_results(analysis_result, t):
    """
    Formatea los resultados del análisis para su visualización.
    """
    try:
        if not analysis_result['success']:
            return {
                'formatted_text': analysis_result['message'],
                'visualizations': None
            }
            
        formatted_sections = []
        analysis = analysis_result['analysis']
        
        # Formatear conceptos clave
        if 'key_concepts' in analysis:
            concepts_section = [f"### {t.get('key_concepts', 'Key Concepts')}"]
            concepts_section.extend([
                f"- {concept}: {frequency:.2f}"
                for concept, frequency in analysis['key_concepts']
            ])
            formatted_sections.append('\n'.join(concepts_section))
        
        return {
            'formatted_text': '\n\n'.join(formatted_sections),
            'visualizations': {
                'concept_graph': analysis.get('concept_graph')
            }
        }
        
    except Exception as e:
        logger.error(f"Error en format_semantic_results: {str(e)}")
        return {
            'formatted_text': str(e),
            'visualizations': None
        }

__all__ = [
    'process_semantic_input',
    'format_semantic_results'
]