|
|
|
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:
|
|
|
|
doc = nlp_models[lang_code](text)
|
|
|
|
|
|
analysis = perform_advanced_morphosyntactic_analysis(text, nlp_models[lang_code])
|
|
|
|
|
|
arc_diagrams = generate_arc_diagram(doc)
|
|
|
|
|
|
word_colors = get_repeated_words_colors(doc)
|
|
highlighted_text = highlight_repeated_words(doc, word_colors)
|
|
|
|
|
|
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 = []
|
|
|
|
|
|
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))
|
|
|
|
|
|
|
|
return {
|
|
'formatted_text': '\n\n'.join(formatted_sections),
|
|
'visualizations': analysis_result['visualizations'],
|
|
'highlighted_text': analysis_result['highlighted_text']
|
|
}
|
|
|
|
|
|
__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'
|
|
] |