AIdeaText commited on
Commit
488899f
·
verified ·
1 Parent(s): 0859e68

Update modules/morphosyntax/morphosyntax_interface.py

Browse files
modules/morphosyntax/morphosyntax_interface.py CHANGED
@@ -14,87 +14,174 @@ from ..database.morphosintaxis_export import export_user_interactions
14
  import logging
15
  logger = logging.getLogger(__name__)
16
 
17
- def display_morphosyntax_interface(lang_code, nlp_models, t):
18
- #st.title("Análisis Morfosintáctico")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
- # Contenedor para el historial del chat
21
- chat_container = st.container()
22
 
23
- # Input del usuario (siempre visible en la parte inferior)
24
- user_input = st.chat_input(t['morpho_input_label'])
25
 
26
- # Inicializar el historial del chat si no existe
27
- if 'morphosyntax_chat_history' not in st.session_state:
28
- st.session_state.morphosyntax_chat_history = []
29
 
30
- # Procesar el input del usuario
31
- if user_input:
32
- # Añadir el mensaje del usuario al historial
33
- st.session_state.morphosyntax_chat_history.append({"role": "user", "content": user_input})
34
- store_chat_history(st.session_state.username, [{"role": "user", "content": user_input}], "morphosyntax")
 
 
 
35
 
36
- response, visualizations, result = process_morphosyntactic_input(user_input, lang_code, nlp_models, t)
 
 
 
37
 
38
- # Añadir la respuesta al historial
39
- assistant_message = {
40
- "role": "assistant",
41
- "content": response,
42
- "visualizations": visualizations if visualizations else []
43
- }
44
- st.session_state.morphosyntax_chat_history.append(assistant_message)
45
- store_chat_history(st.session_state.username, [assistant_message], "morphosyntax")
 
 
 
46
 
47
- # Si es un análisis, guardarlo en la base de datos
48
- if user_input.startswith('/analisis_morfosintactico') and result:
49
- store_student_morphosyntax_result(
50
  st.session_state.username,
51
- user_input.split('[', 1)[1].rsplit(']', 1)[0], # texto analizado
52
- visualizations
53
- )
54
-
55
- # Mostrar el historial del chat
56
- with chat_container:
57
- for message in st.session_state.morphosyntax_chat_history:
58
- with st.chat_message(message["role"]):
59
- st.write(message["content"])
60
- if "visualizations" in message and message["visualizations"]:
61
- for i, viz in enumerate(message["visualizations"]):
62
- st.markdown(f"**Oración {i+1} del párrafo analizado**")
63
- st.components.v1.html(
64
- f"""
65
- <div style="width: 100%; overflow-x: auto; white-space: nowrap;">
66
- <div style="min-width: 1200px;">
67
- {viz}
68
- </div>
69
- </div>
70
- """,
71
- height=370,
72
- scrolling=True
73
- )
74
- if i < len(message["visualizations"]) - 1:
75
- st.markdown("---") # Separador entre diagramas
76
 
77
- # Botón para limpiar el historial del chat
78
- if st.button(t['clear_chat'], key=generate_unique_key('morphosyntax', 'clear_chat')):
79
- st.session_state.morphosyntax_chat_history = []
80
- st.rerun()
81
 
82
- # Botón de exportación
83
- if st.button("Exportar Interacciones"):
84
- pdf_buffer = export_user_interactions(st.session_state.username, 'morphosyntax')
85
- st.download_button(
86
- label="Descargar PDF",
87
- data=pdf_buffer,
88
- file_name="interacciones_morfosintaxis.pdf",
89
- mime="application/pdf"
90
- )
91
-
92
- def display_visualizations(visualizations, t):
93
- for i, viz in enumerate(visualizations):
94
- st.markdown(f"**{t['sentence']} {i+1}**")
95
- st.components.v1.html(viz, height=370, scrolling=True)
96
- if i < len(visualizations) - 1:
97
- st.markdown("---")
98
 
99
  '''
100
  if user_input:
 
14
  import logging
15
  logger = logging.getLogger(__name__)
16
 
17
+ def display_morphosyntax_analysis_interface(nlp_models, lang_code):
18
+ translations = {
19
+ 'es': {
20
+ 'title': "AIdeaText - Análisis morfológico y sintáctico",
21
+ 'input_label': "Ingrese un texto para analizar (máximo 5,000 palabras",
22
+ 'input_placeholder': "Esta funcionalidad le ayudará con dos competencias:\n"
23
+ "[1] \"Escribe diversos tipos de textos en su lengua materna\"\n"
24
+ "[2] \"Lee diversos tipos de textos escritos en su lengua materna\"\n\n"
25
+ "Ingrese su texto aquí para analizar...",
26
+ 'analyze_button': "Analizar texto",
27
+ 'repeated_words': "Palabras repetidas",
28
+ 'legend': "Leyenda: Categorías gramaticales",
29
+ 'arc_diagram': "Análisis sintáctico: Diagrama de arco",
30
+ 'sentence': "Oración",
31
+ 'success_message': "Análisis guardado correctamente.",
32
+ 'error_message': "Hubo un problema al guardar el análisis. Por favor, inténtelo de nuevo.",
33
+ 'warning_message': "Por favor, ingrese un texto para analizar.",
34
+ 'initial_message': "Ingrese un texto y presione 'Analizar texto' para comenzar.",
35
+ 'no_results': "No hay resultados disponibles. Por favor, realice un análisis primero.",
36
+ 'pos_analysis': "Análisis de categorías gramaticales",
37
+ 'morphological_analysis': "Análisis morfológico",
38
+ 'sentence_structure': "Estructura de oraciones",
39
+ 'word': "Palabra",
40
+ 'count': "Cantidad",
41
+ 'percentage': "Porcentaje",
42
+ 'examples': "Ejemplos",
43
+ 'lemma': "Lema",
44
+ 'tag': "Etiqueta",
45
+ 'dep': "Dependencia",
46
+ 'morph': "Morfología",
47
+ 'root': "Raíz",
48
+ 'subjects': "Sujetos",
49
+ 'objects': "Objetos",
50
+ 'verbs': "Verbos",
51
+ 'grammatical_category': "Categoría gramatical",
52
+ 'dependency': "Dependencia",
53
+ 'morphology': "Morfología"
54
+ },
55
+ 'en': {
56
+ 'title': "AIdeaText - Morphological and Syntactic Analysis",
57
+ 'input_label': "Enter a text to analyze (max 5,000 words):",
58
+ 'input_placeholder': "This functionality will help you with two competencies:\n"
59
+ "[1] \"Write various types of texts in your native language\"\n"
60
+ "[2] \"Read various types of written texts in your native language\"\n\n"
61
+ "Enter your text here to analyze...",
62
+ 'analyze_button': "Analyze text",
63
+ 'repeated_words': "Repeated words",
64
+ 'legend': "Legend: Grammatical categories",
65
+ 'arc_diagram': "Syntactic analysis: Arc diagram",
66
+ 'sentence': "Sentence",
67
+ 'success_message': "Analysis saved successfully.",
68
+ 'error_message': "There was a problem saving the analysis. Please try again.",
69
+ 'warning_message': "Please enter a text to analyze.",
70
+ 'initial_message': "Enter a text and press 'Analyze text' to start.",
71
+ 'no_results': "No results available. Please perform an analysis first.",
72
+ 'pos_analysis': "Part of Speech Analysis",
73
+ 'morphological_analysis': "Morphological Analysis",
74
+ 'sentence_structure': "Sentence Structure",
75
+ 'word': "Word",
76
+ 'count': "Count",
77
+ 'percentage': "Percentage",
78
+ 'examples': "Examples",
79
+ 'lemma': "Lemma",
80
+ 'tag': "Tag",
81
+ 'dep': "Dependency",
82
+ 'morph': "Morphology",
83
+ 'root': "Root",
84
+ 'subjects': "Subjects",
85
+ 'objects': "Objects",
86
+ 'verbs': "Verbs",
87
+ 'grammatical_category': "Grammatical category",
88
+ 'dependency': "Dependency",
89
+ 'morphology': "Morphology"
90
+ },
91
+ 'fr': {
92
+ 'title': "AIdeaText - Analyse morphologique et syntaxique",
93
+ 'input_label': "Entrez un texte à analyser (max 5 000 mots) :",
94
+ 'input_placeholder': "Cette fonctionnalité vous aidera avec deux compétences :\n"
95
+ "[1] \"Écrire divers types de textes dans votre langue maternelle\"\n"
96
+ "[2] \"Lire divers types de textes écrits dans votre langue maternelle\"\n\n"
97
+ "Entrez votre texte ici pour l'analyser...",
98
+ 'analyze_button': "Analyser le texte",
99
+ 'repeated_words': "Mots répétés",
100
+ 'legend': "Légende : Catégories grammaticales",
101
+ 'arc_diagram': "Analyse syntaxique : Diagramme en arc",
102
+ 'sentence': "Phrase",
103
+ 'success_message': "Analyse enregistrée avec succès.",
104
+ 'error_message': "Un problème est survenu lors de l'enregistrement de l'analyse. Veuillez réessayer.",
105
+ 'warning_message': "Veuillez entrer un texte à analyser.",
106
+ 'initial_message': "Entrez un texte et appuyez sur 'Analyser le texte' pour commencer.",
107
+ 'no_results': "Aucun résultat disponible. Veuillez d'abord effectuer une analyse.",
108
+ 'pos_analysis': "Analyse des parties du discours",
109
+ 'morphological_analysis': "Analyse morphologique",
110
+ 'sentence_structure': "Structure des phrases",
111
+ 'word': "Mot",
112
+ 'count': "Nombre",
113
+ 'percentage': "Pourcentage",
114
+ 'examples': "Exemples",
115
+ 'lemma': "Lemme",
116
+ 'tag': "Étiquette",
117
+ 'dep': "Dépendance",
118
+ 'morph': "Morphologie",
119
+ 'root': "Racine",
120
+ 'subjects': "Sujets",
121
+ 'objects': "Objets",
122
+ 'verbs': "Verbes",
123
+ 'grammatical_category': "Catégorie grammaticale",
124
+ 'dependency': "Dépendance",
125
+ 'morphology': "Morphologie"
126
+ }
127
+ }
128
 
129
+ t = translations[lang_code]
 
130
 
131
+ input_key = f"morphosyntax_input_{lang_code}"
 
132
 
133
+ if input_key not in st.session_state:
134
+ st.session_state[input_key] = ""
 
135
 
136
+ sentence_input = st.text_area(
137
+ t['input_label'],
138
+ height=150,
139
+ placeholder=t['input_placeholder'],
140
+ value=st.session_state[input_key],
141
+ key=f"text_area_{lang_code}",
142
+ on_change=lambda: setattr(st.session_state, input_key, st.session_state[f"text_area_{lang_code}"])
143
+ )
144
 
145
+ if st.button(t['analyze_button'], key=f"analyze_button_{lang_code}"):
146
+ current_input = st.session_state[input_key]
147
+ if current_input:
148
+ doc = nlp_models[lang_code](current_input)
149
 
150
+ # Análisis morfosintáctico avanzado
151
+ advanced_analysis = perform_advanced_morphosyntactic_analysis(current_input, nlp_models[lang_code])
152
+
153
+ # Guardar el resultado en el estado de la sesión
154
+ st.session_state.morphosyntax_result = {
155
+ 'doc': doc,
156
+ 'advanced_analysis': advanced_analysis
157
+ }
158
+
159
+ # Mostrar resultados
160
+ display_morphosyntax_results(st.session_state.morphosyntax_result, lang_code, t)
161
 
162
+ # Guardar resultados
163
+ if store_morphosyntax_result(
 
164
  st.session_state.username,
165
+ current_input,
166
+ get_repeated_words_colors(doc),
167
+ advanced_analysis['arc_diagram'],
168
+ advanced_analysis['pos_analysis'],
169
+ advanced_analysis['morphological_analysis'],
170
+ advanced_analysis['sentence_structure']
171
+ ):
172
+ st.success(t['success_message'])
173
+ else:
174
+ st.error(t['error_message'])
175
+ else:
176
+ st.warning(t['warning_message'])
177
+ elif 'morphosyntax_result' in st.session_state and st.session_state.morphosyntax_result is not None:
178
+
179
+ # Si hay un resultado guardado, mostrarlo
180
+ display_morphosyntax_results(st.session_state.morphosyntax_result, lang_code, t)
181
+ else:
182
+ st.info(t['initial_message']) # Añade esta traducción a tu diccionario
 
 
 
 
 
 
 
183
 
 
 
 
 
184
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
185
 
186
  '''
187
  if user_input: