AIdeaText commited on
Commit
810ccfa
1 Parent(s): 09bd622

Update modules/morphosyntax/morphosyntax_process.py

Browse files
modules/morphosyntax/morphosyntax_process.py CHANGED
@@ -13,35 +13,104 @@ from ..text_analysis.morpho_analysis import (
13
 
14
  from ..database.morphosintax_mongo_db import store_student_morphosyntax_result
15
 
16
- from ..chatbot.chatbot import process_chat_input
 
17
 
18
- def process_morphosyntactic_input(user_input, lang_code, nlp_models, t):
19
- if user_input.startswith('/analisis_morfosintactico'):
20
- text_to_analyze = user_input.split('[', 1)[1].rsplit(']', 1)[0]
21
- result = perform_advanced_morphosyntactic_analysis(text_to_analyze, nlp_models[lang_code])
22
-
23
- if result is None or 'arc_diagrams' not in result:
24
- response = t.get('morphosyntactic_analysis_error', 'Error in morphosyntactic analysis')
25
- return response, None, None
26
-
27
- response = t.get('morphosyntactic_analysis_completed', 'Morphosyntactic analysis completed')
28
- visualizations = result['arc_diagrams']
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  store_student_morphosyntax_result(
31
  st.session_state.username,
32
- text_to_analyze,
33
- visualizations
 
 
 
 
 
34
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
- return response, visualizations, result
37
- else:
38
- chatbot = st.session_state.morphosyntax_chat_input
39
- response = chatbot.generate_response(user_input, lang_code)
40
- return response, None, None
41
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
- def format_analysis_response(result, t, lang_code):
44
- # Formatea la respuesta del análisis en texto legible
45
- # Usa las traducciones (t) para los títulos y etiquetas
46
- # ...
47
- pass
 
13
 
14
  from ..database.morphosintax_mongo_db import store_student_morphosyntax_result
15
 
16
+ import logging
17
+ logger = logging.getLogger(__name__)
18
 
19
+ def process_morphosyntactic_input(text, lang_code, nlp_models, t):
20
+ """
21
+ Procesa el texto ingresado para realizar el análisis morfosintáctico.
22
+
23
+ Args:
24
+ text: Texto a analizar
25
+ lang_code: Código del idioma
26
+ nlp_models: Diccionario de modelos spaCy
27
+ t: Diccionario de traducciones
 
 
28
 
29
+ Returns:
30
+ tuple: (análisis, visualizaciones, texto_resaltado, mensaje)
31
+ """
32
+ try:
33
+ # Realizar el análisis morfosintáctico
34
+ doc = nlp_models[lang_code](text)
35
+
36
+ # Obtener el análisis avanzado
37
+ analysis = perform_advanced_morphosyntactic_analysis(text, nlp_models[lang_code])
38
+
39
+ # Generar visualizaciones
40
+ arc_diagrams = generate_arc_diagram(doc, lang_code)
41
+
42
+ # Obtener palabras repetidas y texto resaltado
43
+ word_colors = get_repeated_words_colors(doc)
44
+ highlighted_text = highlight_repeated_words(doc, word_colors)
45
+
46
+ # Guardar el análisis en la base de datos
47
  store_student_morphosyntax_result(
48
  st.session_state.username,
49
+ text,
50
+ {
51
+ 'arc_diagrams': arc_diagrams,
52
+ 'pos_analysis': analysis['pos_analysis'],
53
+ 'morphological_analysis': analysis['morphological_analysis'],
54
+ 'sentence_structure': analysis['sentence_structure']
55
+ }
56
  )
57
+
58
+ return {
59
+ 'analysis': analysis,
60
+ 'visualizations': arc_diagrams,
61
+ 'highlighted_text': highlighted_text,
62
+ 'success': True,
63
+ 'message': t.get('MORPHOSYNTACTIC', {}).get('success_message', 'Analysis completed successfully')
64
+ }
65
+
66
+ except Exception as e:
67
+ logger.error(f"Error en el análisis morfosintáctico: {str(e)}")
68
+ return {
69
+ 'analysis': None,
70
+ 'visualizations': None,
71
+ 'highlighted_text': None,
72
+ 'success': False,
73
+ 'message': t.get('MORPHOSYNTACTIC', {}).get('error_message', f'Error in analysis: {str(e)}')
74
+ }
75
 
76
+ def format_analysis_results(analysis_result, t):
77
+ """
78
+ Formatea los resultados del análisis para su visualización.
79
+
80
+ Args:
81
+ analysis_result: Resultado del análisis morfosintáctico
82
+ t: Diccionario de traducciones
83
+
84
+ Returns:
85
+ dict: Resultados formateados para visualización
86
+ """
87
+ morpho_t = t.get('MORPHOSYNTACTIC', {})
88
+
89
+ if not analysis_result['success']:
90
+ return {
91
+ 'formatted_text': analysis_result['message'],
92
+ 'visualizations': None
93
+ }
94
+
95
+ formatted_sections = []
96
+
97
+ # Formato para análisis POS
98
+ if 'pos_analysis' in analysis_result['analysis']:
99
+ pos_section = [f"### {morpho_t.get('pos_analysis', 'Part of Speech Analysis')}"]
100
+ for pos_item in analysis_result['analysis']['pos_analysis']:
101
+ pos_section.append(
102
+ f"- {morpho_t.get(pos_item['pos'], pos_item['pos'])}: "
103
+ f"{pos_item['count']} ({pos_item['percentage']}%)\n "
104
+ f"Ejemplos: {', '.join(pos_item['examples'])}"
105
+ )
106
+ formatted_sections.append('\n'.join(pos_section))
107
+
108
+ # Agregar otras secciones de formato según sea necesario
109
+
110
+ return {
111
+ 'formatted_text': '\n\n'.join(formatted_sections),
112
+ 'visualizations': analysis_result['visualizations'],
113
+ 'highlighted_text': analysis_result['highlighted_text']
114
+ }
115
 
116
+ __all__ = ['process_morphosyntactic_input', 'format_analysis_results']