AIdeaText commited on
Commit
010fa35
verified
1 Parent(s): 1966cb7

Update modules/morphosyntax/morphosyntax_interface.py

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