AIdeaText commited on
Commit
f0d8559
verified
1 Parent(s): ebc275b

Update modules/morphosyntax/morphosyntax_interface.py

Browse files
modules/morphosyntax/morphosyntax_interface.py CHANGED
@@ -42,9 +42,10 @@ import base64
42
  import re
43
 
44
  ############################################################################
 
45
  def display_morphosyntax_interface(lang_code, nlp_models, morpho_t):
46
  try:
47
- # CSS mejorado para estabilidad y layout horizontal
48
  st.markdown("""
49
  <style>
50
  .stTextArea textarea {
@@ -77,201 +78,180 @@ def display_morphosyntax_interface(lang_code, nlp_models, morpho_t):
77
  box-shadow: 0 1px 2px rgba(0,0,0,0.1);
78
  margin-top: 0.5rem;
79
  }
80
- .edit-container {
81
- position: sticky;
82
- top: 0;
83
- background-color: white;
84
- z-index: 100;
85
- padding: 0.5rem 0;
86
- }
87
  </style>
88
  """, unsafe_allow_html=True)
89
 
90
  # Inicializaci贸n del estado con valores por defecto
91
  if 'morphosyntax_state' not in st.session_state:
92
- st.session_state['morphosyntax_state'] = {}
93
-
94
- default_state = {
95
- 'has_original': False,
96
- 'original_text': '',
97
- 'original_analysis': None,
98
- 'current_text': '',
99
- 'iterations': [],
100
- 'analysis_count': 0,
101
- 'current_tab': 0 # Para mantener el tab activo
102
- }
103
-
104
- for key, value in default_state.items():
105
- if key not in st.session_state.morphosyntax_state:
106
- st.session_state.morphosyntax_state[key] = value
107
 
108
  with st.container():
109
- # 脕rea de edici贸n del texto original
110
- if not st.session_state.morphosyntax_state['has_original']:
111
- st.markdown("### Texto Original")
112
- original_text = st.text_area(
113
- "Ingrese una oraci贸n",
114
- key="original_text_input",
115
- placeholder="Ingresar solo una oraci贸n hasta el punto y aparte. Si es punto seguido, dejar as铆.",
116
- height=100
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  )
118
-
119
- col1, col2, col3 = st.columns([2,1,2])
120
- with col1:
121
- if st.button(
122
- "Analizar Texto Original",
123
- type="primary",
124
- use_container_width=True,
125
- disabled=not bool(original_text.strip())
126
- ):
127
- try:
128
- # Procesar texto original
129
- doc = nlp_models[lang_code](original_text)
130
- analysis = perform_advanced_morphosyntactic_analysis(
131
- original_text,
132
- nlp_models[lang_code]
133
- )
134
-
135
- # Actualizar estado
136
- st.session_state.morphosyntax_state.update({
137
- 'has_original': True,
138
- 'original_text': original_text,
139
- 'original_analysis': {
140
- 'doc': doc,
141
- 'advanced_analysis': analysis
142
- },
143
- 'current_text': original_text
144
- })
145
-
146
- if store_student_morphosyntax_result(
147
- username=st.session_state.username,
148
- text=original_text,
149
- arc_diagrams=analysis['arc_diagrams']
150
- ):
151
- st.success("Texto analizado exitosamente")
152
- st.rerun()
153
- else:
154
- st.error("Error al guardar el an谩lisis")
155
- except Exception as e:
156
- logger.error(f"Error procesando texto original: {str(e)}")
157
- st.error("Error al procesar el texto")
158
- else:
159
- # Layout horizontal para edici贸n y visualizaci贸n
160
- st.markdown("### Versi贸n Original")
161
-
162
- # Permitir editar texto original
163
- edit_original = st.button("Editar texto original")
164
- if edit_original:
165
- st.session_state.morphosyntax_state['has_original'] = False
166
- st.rerun()
167
-
168
- col1, col2 = st.columns([1, 1])
169
- with col1:
170
- st.text_area(
171
- "Texto Original",
172
- value=st.session_state.morphosyntax_state['original_text'],
173
- disabled=True,
174
- height=100
175
- )
176
-
177
- with col2:
178
- display_morphosyntax_results(
179
- st.session_state.morphosyntax_state['original_analysis'],
180
- lang_code,
181
- morpho_t
182
- )
183
 
184
- st.markdown("---")
185
- st.markdown("### Iteraci贸n Actual")
186
-
187
- # Campo para nueva versi贸n con layout horizontal
188
- col1, col2 = st.columns([1, 1])
189
- with col1:
190
- iteration_text = st.text_area(
191
- "Modifique la oraci贸n",
192
- value=st.session_state.morphosyntax_state['current_text'],
193
- key=f"iteration_input_{st.session_state.morphosyntax_state['analysis_count']}",
194
- placeholder="Ingresar solo una oraci贸n hasta el punto y aparte. Si es punto seguido, dejar as铆.",
195
- height=100
196
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
197
 
198
- analyze_button = st.button(
199
- "Analizar Cambios",
200
- type="primary",
201
- icon="馃攳",
202
- key=f"analyze_{st.session_state.morphosyntax_state['analysis_count']}",
203
- disabled=not bool(iteration_text.strip()),
204
- use_container_width=True
205
- )
206
-
207
- with col2:
208
- if analyze_button and iteration_text.strip():
209
- try:
210
- with st.spinner("Procesando..."):
211
- doc = nlp_models[lang_code](iteration_text)
212
- analysis = perform_advanced_morphosyntactic_analysis(
213
- iteration_text,
214
- nlp_models[lang_code]
215
- )
216
-
217
- current_analysis = {
218
- 'doc': doc,
219
- 'advanced_analysis': analysis
220
- }
221
-
222
- # Guardar iteraci贸n
223
- st.session_state.morphosyntax_state['iterations'].append({
224
- 'text': iteration_text,
225
- 'analysis': current_analysis,
226
- 'timestamp': pd.Timestamp.now()
227
- })
228
-
229
- st.session_state.morphosyntax_state['current_text'] = iteration_text
230
- st.session_state.morphosyntax_state['analysis_count'] += 1
231
-
232
- if store_student_morphosyntax_result(
233
- username=st.session_state.username,
234
- text=iteration_text,
235
- arc_diagrams=analysis['arc_diagrams']
236
- ):
237
- display_morphosyntax_results(
238
- current_analysis,
239
- lang_code,
240
- morpho_t
241
- )
242
- else:
243
- st.error("Error al guardar el an谩lisis")
244
- except Exception as e:
245
- logger.error(f"Error procesando iteraci贸n: {str(e)}")
246
- st.error("Error al procesar los cambios")
247
 
248
- # Historial de iteraciones
249
- if st.session_state.morphosyntax_state['iterations']:
250
- with st.expander("Historial de Iteraciones", expanded=False):
251
- for idx, iteration in enumerate(reversed(st.session_state.morphosyntax_state['iterations'])):
252
- col1, col2 = st.columns([1, 1])
253
- with col1:
254
- st.markdown(f"**Iteraci贸n {idx + 1} ({iteration['timestamp'].strftime('%H:%M:%S')})**")
255
- st.text_area(
256
- f"Texto {idx + 1}",
257
- value=iteration['text'],
258
- disabled=True,
259
- height=100,
260
- key=f"hist_text_{idx}"
261
- )
262
- with col2:
263
- display_morphosyntax_results(
264
- iteration['analysis'],
265
- lang_code,
266
- morpho_t
267
- )
268
- st.markdown("---")
269
 
270
  except Exception as e:
271
  logger.error(f"Error general en display_morphosyntax_interface: {str(e)}")
272
  st.error("Se produjo un error. Por favor, intente de nuevo.")
273
 
274
 
 
 
 
 
275
  #########################################################################3
276
  def display_morphosyntax_results(result, lang_code, morpho_t):
277
  """
 
42
  import re
43
 
44
  ############################################################################
45
+
46
  def display_morphosyntax_interface(lang_code, nlp_models, morpho_t):
47
  try:
48
+ # CSS mejorado para estabilidad y layout vertical
49
  st.markdown("""
50
  <style>
51
  .stTextArea textarea {
 
78
  box-shadow: 0 1px 2px rgba(0,0,0,0.1);
79
  margin-top: 0.5rem;
80
  }
 
 
 
 
 
 
 
81
  </style>
82
  """, unsafe_allow_html=True)
83
 
84
  # Inicializaci贸n del estado con valores por defecto
85
  if 'morphosyntax_state' not in st.session_state:
86
+ st.session_state.morphosyntax_state = {
87
+ 'original_text': '',
88
+ 'current_text': '',
89
+ 'iterations': [],
90
+ 'analysis_count': 0,
91
+ 'original_analysis': None,
92
+ 'editing_original': False
93
+ }
 
 
 
 
 
 
 
94
 
95
  with st.container():
96
+ # Secci贸n de texto original
97
+ st.markdown("### Texto Original")
98
+
99
+ # Input para texto original
100
+ original_text = st.text_area(
101
+ "Ingrese una oraci贸n",
102
+ value=st.session_state.morphosyntax_state.get('original_text', ''),
103
+ key="original_text_input",
104
+ placeholder="Ingresar solo una oraci贸n hasta el punto y aparte. Si es punto seguido, dejar as铆.",
105
+ height=100,
106
+ disabled=False # Siempre editable
107
+ )
108
+
109
+ # Bot贸n para analizar texto original
110
+ col1, col2, col3 = st.columns([2,1,2])
111
+ with col1:
112
+ analyze_original = st.button(
113
+ "Analizar Texto Original",
114
+ type="primary",
115
+ use_container_width=True,
116
+ disabled=not bool(original_text.strip())
117
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
 
119
+ # Procesar texto original si se presiona el bot贸n
120
+ if analyze_original and original_text.strip():
121
+ try:
122
+ with st.spinner("Procesando texto original..."):
123
+ doc = nlp_models[lang_code](original_text)
124
+ analysis = perform_advanced_morphosyntactic_analysis(
125
+ original_text,
126
+ nlp_models[lang_code]
127
+ )
128
+
129
+ # Actualizar estado
130
+ st.session_state.morphosyntax_state.update({
131
+ 'original_text': original_text,
132
+ 'original_analysis': {
133
+ 'doc': doc,
134
+ 'advanced_analysis': analysis
135
+ },
136
+ 'current_text': original_text
137
+ })
138
+
139
+ # Guardar en base de datos
140
+ if store_student_morphosyntax_result(
141
+ username=st.session_state.username,
142
+ text=original_text,
143
+ arc_diagrams=analysis['arc_diagrams']
144
+ ):
145
+ st.success("Texto original analizado exitosamente")
146
+ else:
147
+ st.error("Error al guardar el an谩lisis original")
148
+ except Exception as e:
149
+ logger.error(f"Error procesando texto original: {str(e)}")
150
+ st.error("Error al procesar el texto original")
151
+
152
+ # Mostrar diagrama de arco del texto original si existe
153
+ if st.session_state.morphosyntax_state.get('original_analysis'):
154
+ display_morphosyntax_results(
155
+ st.session_state.morphosyntax_state['original_analysis'],
156
+ lang_code,
157
+ morpho_t
158
+ )
159
+
160
+ # Secci贸n de iteraci贸n
161
+ st.markdown("---")
162
+ st.markdown("### Iteraci贸n Actual")
163
+
164
+ # Campo para nueva versi贸n
165
+ iteration_text = st.text_area(
166
+ "Modifique la oraci贸n",
167
+ value=st.session_state.morphosyntax_state.get('current_text', ''),
168
+ key=f"iteration_input_{st.session_state.morphosyntax_state['analysis_count']}",
169
+ placeholder="Ingresar solo una oraci贸n hasta el punto y aparte. Si es punto seguido, dejar as铆.",
170
+ height=100
171
+ )
172
+
173
+ # Bot贸n para analizar iteraci贸n
174
+ col1, col2, col3 = st.columns([2,1,2])
175
+ with col1:
176
+ analyze_iteration = st.button(
177
+ "Analizar Cambios",
178
+ type="primary",
179
+ icon="馃攳",
180
+ key=f"analyze_{st.session_state.morphosyntax_state['analysis_count']}",
181
+ disabled=not bool(iteration_text.strip()),
182
+ use_container_width=True
183
+ )
184
 
185
+ # Procesar iteraci贸n
186
+ if analyze_iteration and iteration_text.strip():
187
+ try:
188
+ with st.spinner("Procesando cambios..."):
189
+ doc = nlp_models[lang_code](iteration_text)
190
+ analysis = perform_advanced_morphosyntactic_analysis(
191
+ iteration_text,
192
+ nlp_models[lang_code]
193
+ )
194
+
195
+ current_analysis = {
196
+ 'doc': doc,
197
+ 'advanced_analysis': analysis
198
+ }
199
+
200
+ # Guardar iteraci贸n
201
+ st.session_state.morphosyntax_state['iterations'].append({
202
+ 'text': iteration_text,
203
+ 'analysis': current_analysis,
204
+ 'timestamp': pd.Timestamp.now()
205
+ })
206
+
207
+ st.session_state.morphosyntax_state['current_text'] = iteration_text
208
+ st.session_state.morphosyntax_state['analysis_count'] += 1
209
+
210
+ if store_student_morphosyntax_result(
211
+ username=st.session_state.username,
212
+ text=iteration_text,
213
+ arc_diagrams=analysis['arc_diagrams']
214
+ ):
215
+ # Mostrar resultados de la iteraci贸n
216
+ display_morphosyntax_results(
217
+ current_analysis,
218
+ lang_code,
219
+ morpho_t
220
+ )
221
+ else:
222
+ st.error("Error al guardar la iteraci贸n")
223
+ except Exception as e:
224
+ logger.error(f"Error procesando iteraci贸n: {str(e)}")
225
+ st.error("Error al procesar los cambios")
 
 
 
 
 
 
 
 
226
 
227
+ # Mostrar historial de iteraciones
228
+ if st.session_state.morphosyntax_state['iterations']:
229
+ with st.expander("Historial de Iteraciones", expanded=False):
230
+ for idx, iteration in enumerate(reversed(st.session_state.morphosyntax_state['iterations'])):
231
+ st.markdown(f"**Iteraci贸n {idx + 1} ({iteration['timestamp'].strftime('%H:%M:%S')})**")
232
+ st.text_area(
233
+ f"Texto {idx + 1}",
234
+ value=iteration['text'],
235
+ disabled=True,
236
+ height=100,
237
+ key=f"hist_text_{idx}"
238
+ )
239
+ display_morphosyntax_results(
240
+ iteration['analysis'],
241
+ lang_code,
242
+ morpho_t
243
+ )
244
+ st.markdown("---")
 
 
 
245
 
246
  except Exception as e:
247
  logger.error(f"Error general en display_morphosyntax_interface: {str(e)}")
248
  st.error("Se produjo un error. Por favor, intente de nuevo.")
249
 
250
 
251
+
252
+
253
+
254
+
255
  #########################################################################3
256
  def display_morphosyntax_results(result, lang_code, morpho_t):
257
  """