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