AIdeaText commited on
Commit
1966cb7
verified
1 Parent(s): 72b2a4f

Update modules/morphosyntax/morphosyntax_interface.py

Browse files
modules/morphosyntax/morphosyntax_interface.py CHANGED
@@ -41,6 +41,8 @@ import pandas as pd
41
  import base64
42
  import re
43
 
 
 
44
  def display_morphosyntax_interface(lang_code, nlp_models, morpho_t):
45
  try:
46
  # CSS para mejorar la estabilidad y dise帽o
@@ -76,22 +78,30 @@ def display_morphosyntax_interface(lang_code, nlp_models, morpho_t):
76
  </style>
77
  """, unsafe_allow_html=True)
78
 
79
- # Inicializar el estado
80
  if 'morphosyntax_state' not in st.session_state:
81
- st.session_state.morphosyntax_state = {
82
- 'has_original': False,
83
- 'original_text': '',
84
- 'original_analysis': None,
85
- 'current_text': '',
86
- 'iterations': [],
87
- 'analysis_count': 0
88
- }
 
 
 
 
 
 
 
 
89
 
90
- # Texto original (si a煤n no se ha ingresado)
91
  if not st.session_state.morphosyntax_state['has_original']:
92
- st.markdown("### Original Text")
93
  original_text = st.text_area(
94
- "Enter your initial text",
95
  key="original_text_input",
96
  height=150
97
  )
@@ -99,67 +109,72 @@ def display_morphosyntax_interface(lang_code, nlp_models, morpho_t):
99
  col1, col2, col3 = st.columns([2,1,2])
100
  with col1:
101
  if st.button(
102
- "Set as Original Text",
103
  type="primary",
104
  use_container_width=True,
105
  disabled=not bool(original_text.strip())
106
  ):
107
- # Procesar texto original
108
- doc = nlp_models[lang_code](original_text)
109
- analysis = perform_advanced_morphosyntactic_analysis(
110
- original_text,
111
- nlp_models[lang_code]
112
- )
113
-
114
- # Guardar estado original
115
- st.session_state.morphosyntax_state.update({
116
- 'has_original': True,
117
- 'original_text': original_text,
118
- 'original_analysis': {
119
- 'doc': doc,
120
- 'advanced_analysis': analysis
121
- }
122
- })
 
 
 
 
 
 
 
 
 
 
 
 
 
123
 
124
- # Guardar en base de datos
125
- store_student_morphosyntax_result(
126
- username=st.session_state.username,
127
- text=original_text,
128
- arc_diagrams=analysis['arc_diagrams']
129
- )
130
- st.rerun()
131
 
132
- # Mostrar contenido original y 谩rea de iteraci贸n
133
  else:
134
- # Secci贸n Original
135
- st.markdown("### Original Version")
136
- with st.container():
137
- col1, col2 = st.columns([1,1])
138
-
139
- with col1:
140
- st.markdown("#### Original Text")
141
- st.markdown(f"<div class='original-content'>{st.session_state.morphosyntax_state['original_text']}</div>",
142
- unsafe_allow_html=True)
143
-
144
- with col2:
145
- st.markdown("#### Original Analysis")
146
- display_morphosyntax_results(
147
- st.session_state.morphosyntax_state['original_analysis'],
148
- lang_code,
149
- morpho_t
150
- )
151
 
152
- # Separador
153
  st.markdown("---")
154
-
155
- # Secci贸n de Iteraci贸n
156
- st.markdown("### Current Iteration")
157
 
158
- # Campo para la nueva versi贸n
159
  iteration_text = st.text_area(
160
- "Modify your text",
161
- value=st.session_state.morphosyntax_state.get('current_text',
162
- st.session_state.morphosyntax_state['original_text']),
163
  key=f"iteration_input_{st.session_state.morphosyntax_state['analysis_count']}",
164
  height=150
165
  )
@@ -168,7 +183,7 @@ def display_morphosyntax_interface(lang_code, nlp_models, morpho_t):
168
  col1, col2, col3 = st.columns([2,1,2])
169
  with col1:
170
  analyze_button = st.button(
171
- "Analyze Changes",
172
  type="primary",
173
  icon="馃攳",
174
  key=f"analyze_{st.session_state.morphosyntax_state['analysis_count']}",
@@ -176,52 +191,58 @@ def display_morphosyntax_interface(lang_code, nlp_models, morpho_t):
176
  use_container_width=True
177
  )
178
 
179
- # Procesar nueva iteraci贸n
180
  if analyze_button and iteration_text.strip():
181
- with st.spinner("Processing changes..."):
182
- # Realizar an谩lisis
183
- doc = nlp_models[lang_code](iteration_text)
184
- analysis = perform_advanced_morphosyntactic_analysis(
185
- iteration_text,
186
- nlp_models[lang_code]
187
- )
188
-
189
- # Actualizar estado
190
- current_analysis = {
191
- 'doc': doc,
192
- 'advanced_analysis': analysis
193
- }
194
-
195
- # Guardar iteraci贸n
196
- st.session_state.morphosyntax_state['iterations'].append({
197
- 'text': iteration_text,
198
- 'analysis': current_analysis,
199
- 'timestamp': pd.Timestamp.now()
200
- })
201
-
202
- st.session_state.morphosyntax_state['current_text'] = iteration_text
203
- st.session_state.morphosyntax_state['analysis_count'] += 1
204
-
205
- # Guardar en base de datos
206
- store_student_morphosyntax_result(
207
- username=st.session_state.username,
208
- text=iteration_text,
209
- arc_diagrams=analysis['arc_diagrams']
210
- )
211
-
212
- # Mostrar an谩lisis actual
213
- st.markdown("#### Current Analysis")
214
- display_morphosyntax_results(
215
- current_analysis,
216
- lang_code,
217
- morpho_t
218
- )
 
 
 
 
 
 
219
 
220
- # Mostrar historial de iteraciones
221
  if st.session_state.morphosyntax_state['iterations']:
222
- with st.expander("View Iteration History"):
223
  for idx, iteration in enumerate(reversed(st.session_state.morphosyntax_state['iterations']), 1):
224
- st.markdown(f"**Iteration {idx} - {iteration['timestamp'].strftime('%H:%M:%S')}**")
225
  st.markdown(f"```\n{iteration['text']}\n```")
226
  display_morphosyntax_results(
227
  iteration['analysis'],
@@ -234,8 +255,6 @@ def display_morphosyntax_interface(lang_code, nlp_models, morpho_t):
234
  logger.error(f"Error general en display_morphosyntax_interface: {str(e)}")
235
  st.error("Se produjo un error. Por favor, intente de nuevo.")
236
 
237
- # El resto del c贸digo permanece igual...
238
-
239
 
240
 
241
 
 
41
  import base64
42
  import re
43
 
44
+ ############################################################################
45
+
46
  def display_morphosyntax_interface(lang_code, nlp_models, morpho_t):
47
  try:
48
  # CSS para mejorar la estabilidad y dise帽o
 
78
  </style>
79
  """, unsafe_allow_html=True)
80
 
81
+ # Verificar si el estado existe y tiene todas las claves necesarias
82
  if 'morphosyntax_state' not in st.session_state:
83
+ st.session_state['morphosyntax_state'] = {}
84
+
85
+ # Asegurarse de que todas las claves existan con valores por defecto
86
+ default_state = {
87
+ 'has_original': False,
88
+ 'original_text': '',
89
+ 'original_analysis': None,
90
+ 'current_text': '',
91
+ 'iterations': [],
92
+ 'analysis_count': 0
93
+ }
94
+
95
+ # Actualizar solo las claves faltantes
96
+ for key, value in default_state.items():
97
+ if key not in st.session_state.morphosyntax_state:
98
+ st.session_state.morphosyntax_state[key] = value
99
 
100
+ # Mostrar interfaz inicial o de iteraci贸n seg煤n el estado
101
  if not st.session_state.morphosyntax_state['has_original']:
102
+ st.markdown("### Texto Original")
103
  original_text = st.text_area(
104
+ "Ingrese su texto inicial",
105
  key="original_text_input",
106
  height=150
107
  )
 
109
  col1, col2, col3 = st.columns([2,1,2])
110
  with col1:
111
  if st.button(
112
+ "Establecer como Texto Original",
113
  type="primary",
114
  use_container_width=True,
115
  disabled=not bool(original_text.strip())
116
  ):
117
+ try:
118
+ # Procesar texto original
119
+ doc = nlp_models[lang_code](original_text)
120
+ analysis = perform_advanced_morphosyntactic_analysis(
121
+ original_text,
122
+ nlp_models[lang_code]
123
+ )
124
+
125
+ # Guardar estado original
126
+ st.session_state.morphosyntax_state.update({
127
+ 'has_original': True,
128
+ 'original_text': original_text,
129
+ 'original_analysis': {
130
+ 'doc': doc,
131
+ 'advanced_analysis': analysis
132
+ },
133
+ 'current_text': original_text
134
+ })
135
+
136
+ # Guardar en base de datos
137
+ if store_student_morphosyntax_result(
138
+ username=st.session_state.username,
139
+ text=original_text,
140
+ arc_diagrams=analysis['arc_diagrams']
141
+ ):
142
+ st.success("Texto original guardado exitosamente")
143
+ st.rerun()
144
+ else:
145
+ st.error("Error al guardar el texto original")
146
 
147
+ except Exception as e:
148
+ logger.error(f"Error procesando texto original: {str(e)}")
149
+ st.error("Error al procesar el texto original")
 
 
 
 
150
 
 
151
  else:
152
+ # Mostrar versi贸n original y 谩rea de iteraci贸n
153
+ st.markdown("### Versi贸n Original")
154
+
155
+ # Columnas para texto original y su an谩lisis
156
+ col1, col2 = st.columns([1,1])
157
+ with col1:
158
+ st.markdown("#### Texto Original")
159
+ st.markdown(f"<div class='original-content'>{st.session_state.morphosyntax_state['original_text']}</div>",
160
+ unsafe_allow_html=True)
161
+
162
+ with col2:
163
+ st.markdown("#### An谩lisis Original")
164
+ display_morphosyntax_results(
165
+ st.session_state.morphosyntax_state['original_analysis'],
166
+ lang_code,
167
+ morpho_t
168
+ )
169
 
170
+ # 脕rea de iteraci贸n
171
  st.markdown("---")
172
+ st.markdown("### Iteraci贸n Actual")
 
 
173
 
174
+ # Campo para nueva versi贸n
175
  iteration_text = st.text_area(
176
+ "Modifique su texto",
177
+ value=st.session_state.morphosyntax_state['current_text'],
 
178
  key=f"iteration_input_{st.session_state.morphosyntax_state['analysis_count']}",
179
  height=150
180
  )
 
183
  col1, col2, col3 = st.columns([2,1,2])
184
  with col1:
185
  analyze_button = st.button(
186
+ "Analizar Cambios",
187
  type="primary",
188
  icon="馃攳",
189
  key=f"analyze_{st.session_state.morphosyntax_state['analysis_count']}",
 
191
  use_container_width=True
192
  )
193
 
194
+ # Procesar iteraci贸n
195
  if analyze_button and iteration_text.strip():
196
+ try:
197
+ with st.spinner("Procesando cambios..."):
198
+ doc = nlp_models[lang_code](iteration_text)
199
+ analysis = perform_advanced_morphosyntactic_analysis(
200
+ iteration_text,
201
+ nlp_models[lang_code]
202
+ )
203
+
204
+ current_analysis = {
205
+ 'doc': doc,
206
+ 'advanced_analysis': analysis
207
+ }
208
+
209
+ # Guardar iteraci贸n
210
+ st.session_state.morphosyntax_state['iterations'].append({
211
+ 'text': iteration_text,
212
+ 'analysis': current_analysis,
213
+ 'timestamp': pd.Timestamp.now()
214
+ })
215
+
216
+ st.session_state.morphosyntax_state['current_text'] = iteration_text
217
+ st.session_state.morphosyntax_state['analysis_count'] += 1
218
+
219
+ # Guardar en base de datos
220
+ if store_student_morphosyntax_result(
221
+ username=st.session_state.username,
222
+ text=iteration_text,
223
+ arc_diagrams=analysis['arc_diagrams']
224
+ ):
225
+ st.success("An谩lisis guardado exitosamente")
226
+
227
+ # Mostrar an谩lisis actual
228
+ st.markdown("#### An谩lisis Actual")
229
+ display_morphosyntax_results(
230
+ current_analysis,
231
+ lang_code,
232
+ morpho_t
233
+ )
234
+ else:
235
+ st.error("Error al guardar el an谩lisis")
236
+
237
+ except Exception as e:
238
+ logger.error(f"Error procesando iteraci贸n: {str(e)}")
239
+ st.error("Error al procesar los cambios")
240
 
241
+ # Mostrar historial
242
  if st.session_state.morphosyntax_state['iterations']:
243
+ with st.expander("Ver Historial de Iteraciones"):
244
  for idx, iteration in enumerate(reversed(st.session_state.morphosyntax_state['iterations']), 1):
245
+ st.markdown(f"**Iteraci贸n {idx} - {iteration['timestamp'].strftime('%H:%M:%S')}**")
246
  st.markdown(f"```\n{iteration['text']}\n```")
247
  display_morphosyntax_results(
248
  iteration['analysis'],
 
255
  logger.error(f"Error general en display_morphosyntax_interface: {str(e)}")
256
  st.error("Se produjo un error. Por favor, intente de nuevo.")
257
 
 
 
258
 
259
 
260