Spaces:
Running
Running
File size: 3,488 Bytes
9787b7a ad3217c 9787b7a ad3217c 26b4a3d 9787b7a ad3217c 26b4a3d ad3217c 26b4a3d 91b2c3c 26b4a3d 9787b7a 26b4a3d 9787b7a 91b2c3c 9787b7a 91b2c3c 26b4a3d 9787b7a 26b4a3d 9787b7a 26b4a3d 91b2c3c 26b4a3d 9787b7a 26b4a3d 91b2c3c 9787b7a 91b2c3c 9787b7a 91b2c3c 9787b7a 26b4a3d 91b2c3c 9787b7a 91b2c3c 26b4a3d 91b2c3c 26b4a3d 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 |
# 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, lang_code, nlp_models, 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)} caracteres")
# Realizar el análisis semántico
nlp = nlp_models[lang_code]
analysis_result = perform_semantic_analysis(text, nlp, lang_code)
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,
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': t.get('success_message', 'Analysis completed successfully'),
'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'
] |