AIdeaText commited on
Commit
40c546c
verified
1 Parent(s): f89bc35

Update modules/morphosyntax/morphosyntax_interface.py

Browse files
modules/morphosyntax/morphosyntax_interface.py CHANGED
@@ -42,10 +42,9 @@ import base64
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
49
  st.markdown("""
50
  <style>
51
  .stTextArea textarea {
@@ -65,38 +64,51 @@ def display_morphosyntax_interface(lang_code, nlp_models, morpho_t):
65
  padding: 0.5rem;
66
  border-radius: 0.375rem;
67
  box-shadow: 0 2px 4px rgba(0,0,0,0.1);
68
- margin-top: 10px;
69
- margin-bottom: 20px;
 
 
 
 
 
 
 
70
  }
71
  </style>
72
  """, unsafe_allow_html=True)
73
 
74
- # Inicializaci贸n m谩s segura del estado
 
 
 
75
  if 'morphosyntax_state' not in st.session_state:
76
  st.session_state.morphosyntax_state = {}
77
 
78
- # Asegurar que todas las claves necesarias existan
79
  default_state = {
80
  'original_text': '',
81
  'original_analysis': None,
82
  'current_text': '',
83
  'current_analysis': None,
84
- 'analysis_count': 0
 
 
85
  }
86
 
87
- # Actualizar el estado con valores por defecto si no existen
88
  for key, default_value in default_state.items():
89
  if key not in st.session_state.morphosyntax_state:
90
  st.session_state.morphosyntax_state[key] = default_value
91
 
92
- # Secci贸n del texto original
93
- st.markdown("### Texto Original")
94
- original_text = st.text_area(
95
- "Ingrese una oraci贸n",
 
 
96
  value=st.session_state.morphosyntax_state['original_text'],
97
  key="original_text_input",
98
  placeholder="Ingresar solo una oraci贸n hasta el punto y aparte.",
99
- height=100
 
100
  )
101
 
102
  col1, col2, col3 = st.columns([2,1,2])
@@ -105,57 +117,56 @@ def display_morphosyntax_interface(lang_code, nlp_models, morpho_t):
105
  "Analizar Texto Original",
106
  type="primary",
107
  use_container_width=True,
108
- disabled=not bool(original_text.strip())
109
  )
110
 
111
- # Procesar texto original
112
- if analyze_original and original_text.strip():
113
  try:
114
- with st.spinner("Analizando texto original..."):
115
- doc = nlp_models[lang_code](original_text)
116
  analysis = perform_advanced_morphosyntactic_analysis(
117
- original_text,
118
  nlp_models[lang_code]
119
  )
120
 
121
- # Guardar an谩lisis original en el estado
122
  st.session_state.morphosyntax_state.update({
123
- 'original_text': original_text,
124
  'original_analysis': {'doc': doc, 'analysis': analysis},
125
- 'current_text': original_text,
 
126
  'analysis_count': st.session_state.morphosyntax_state['analysis_count'] + 1
127
  })
128
-
129
- # Guardar en base de datos
130
- store_student_morphosyntax_result(
131
  username=st.session_state.username,
132
- text=original_text,
133
  arc_diagrams=analysis['arc_diagrams']
134
- )
 
135
 
136
  except Exception as e:
137
  logger.error(f"Error en an谩lisis original: {str(e)}")
138
- st.error("Error al procesar el texto original")
139
 
140
  # Mostrar diagrama original si existe
141
- if st.session_state.morphosyntax_state['original_analysis']:
142
- st.markdown("### Diagrama Original")
143
  display_morphosyntax_results(
144
  st.session_state.morphosyntax_state['original_analysis'],
145
  lang_code,
146
  morpho_t
147
  )
148
 
149
- # Secci贸n de iteraci贸n
150
  st.markdown("---")
151
- st.markdown("### Iteraci贸n")
152
 
 
153
  iteration_text = st.text_area(
154
- "Modifique la oraci贸n",
155
  value=st.session_state.morphosyntax_state['current_text'],
156
  key=f"iteration_input_{st.session_state.morphosyntax_state['analysis_count']}",
157
  placeholder="Modifique el texto para mejorar la estructura",
158
- height=100
 
159
  )
160
 
161
  col1, col2, col3 = st.columns([2,1,2])
@@ -167,46 +178,44 @@ def display_morphosyntax_interface(lang_code, nlp_models, morpho_t):
167
  disabled=not bool(iteration_text.strip())
168
  )
169
 
170
- # Procesar iteraci贸n
171
  if analyze_iteration and iteration_text.strip():
172
  try:
173
- with st.spinner("Analizando cambios..."):
174
  doc = nlp_models[lang_code](iteration_text)
175
  analysis = perform_advanced_morphosyntactic_analysis(
176
  iteration_text,
177
  nlp_models[lang_code]
178
  )
179
 
180
- # Actualizar an谩lisis actual
181
  st.session_state.morphosyntax_state.update({
182
  'current_text': iteration_text,
183
  'current_analysis': {'doc': doc, 'analysis': analysis},
 
184
  'analysis_count': st.session_state.morphosyntax_state['analysis_count'] + 1
185
  })
186
 
187
- # Guardar en base de datos
188
- store_student_morphosyntax_result(
189
  username=st.session_state.username,
190
  text=iteration_text,
191
  arc_diagrams=analysis['arc_diagrams']
192
- )
 
 
 
 
 
 
193
 
194
  except Exception as e:
195
  logger.error(f"Error en iteraci贸n: {str(e)}")
196
  st.error("Error al procesar los cambios")
197
 
198
- # Mostrar diagrama de iteraci贸n si existe
199
- if st.session_state.morphosyntax_state['current_analysis']:
200
- st.markdown("### Diagrama de Iteraci贸n")
201
- display_morphosyntax_results(
202
- st.session_state.morphosyntax_state['current_analysis'],
203
- lang_code,
204
- morpho_t
205
- )
206
-
207
  except Exception as e:
208
  logger.error(f"Error general: {str(e)}")
209
  st.error("Se produjo un error. Por favor, intente de nuevo.")
 
 
210
 
211
 
212
  #########################################################################3
@@ -221,7 +230,7 @@ def display_morphosyntax_results(result, lang_code, morpho_t):
221
  doc = result['doc']
222
 
223
  # An谩lisis sint谩ctico (diagramas de arco)
224
- st.markdown(f"### {morpho_t.get('arc_diagram', 'Syntactic analysis: Arc diagram')}")
225
 
226
  with st.container():
227
  sentences = list(doc.sents)
 
42
  import re
43
 
44
  ############################################################################
 
45
  def display_morphosyntax_interface(lang_code, nlp_models, morpho_t):
46
  try:
47
+ # CSS mejorado para estabilidad, layout y prevenci贸n de saltos
48
  st.markdown("""
49
  <style>
50
  .stTextArea textarea {
 
64
  padding: 0.5rem;
65
  border-radius: 0.375rem;
66
  box-shadow: 0 2px 4px rgba(0,0,0,0.1);
67
+ margin: 0.5rem 0;
68
+ }
69
+ .stTab {
70
+ position: sticky;
71
+ top: 0;
72
+ z-index: 999;
73
+ }
74
+ [data-testid="stVerticalBlock"] {
75
+ gap: 0 !important;
76
  }
77
  </style>
78
  """, unsafe_allow_html=True)
79
 
80
+ # Inicializaci贸n del estado
81
+ if 'current_tab' not in st.session_state:
82
+ st.session_state.current_tab = "morphosyntax"
83
+
84
  if 'morphosyntax_state' not in st.session_state:
85
  st.session_state.morphosyntax_state = {}
86
 
 
87
  default_state = {
88
  'original_text': '',
89
  'original_analysis': None,
90
  'current_text': '',
91
  'current_analysis': None,
92
+ 'analysis_count': 0,
93
+ 'show_original': False,
94
+ 'show_iteration': False
95
  }
96
 
 
97
  for key, default_value in default_state.items():
98
  if key not in st.session_state.morphosyntax_state:
99
  st.session_state.morphosyntax_state[key] = default_value
100
 
101
+ def update_analysis():
102
+ st.session_state.current_tab = "morphosyntax" # Mantener tab activo
103
+
104
+ # Secci贸n del texto original - Layout simplificado
105
+ st.text_area(
106
+ "", # Label vac铆o
107
  value=st.session_state.morphosyntax_state['original_text'],
108
  key="original_text_input",
109
  placeholder="Ingresar solo una oraci贸n hasta el punto y aparte.",
110
+ height=100,
111
+ on_change=update_analysis
112
  )
113
 
114
  col1, col2, col3 = st.columns([2,1,2])
 
117
  "Analizar Texto Original",
118
  type="primary",
119
  use_container_width=True,
120
+ disabled=not bool(st.session_state.get("original_text_input", "").strip())
121
  )
122
 
123
+ # Procesar y mostrar texto original
124
+ if analyze_original and st.session_state.get("original_text_input", "").strip():
125
  try:
126
+ with st.spinner(""): # Spinner sin texto
127
+ doc = nlp_models[lang_code](st.session_state.original_text_input)
128
  analysis = perform_advanced_morphosyntactic_analysis(
129
+ st.session_state.original_text_input,
130
  nlp_models[lang_code]
131
  )
132
 
 
133
  st.session_state.morphosyntax_state.update({
134
+ 'original_text': st.session_state.original_text_input,
135
  'original_analysis': {'doc': doc, 'analysis': analysis},
136
+ 'current_text': st.session_state.original_text_input,
137
+ 'show_original': True,
138
  'analysis_count': st.session_state.morphosyntax_state['analysis_count'] + 1
139
  })
140
+
141
+ if store_student_morphosyntax_result(
 
142
  username=st.session_state.username,
143
+ text=st.session_state.original_text_input,
144
  arc_diagrams=analysis['arc_diagrams']
145
+ ):
146
+ st.session_state.current_tab = "morphosyntax"
147
 
148
  except Exception as e:
149
  logger.error(f"Error en an谩lisis original: {str(e)}")
150
+ st.error("Error al procesar el texto")
151
 
152
  # Mostrar diagrama original si existe
153
+ if st.session_state.morphosyntax_state.get('show_original'):
 
154
  display_morphosyntax_results(
155
  st.session_state.morphosyntax_state['original_analysis'],
156
  lang_code,
157
  morpho_t
158
  )
159
 
 
160
  st.markdown("---")
 
161
 
162
+ # Secci贸n de iteraci贸n - Layout simplificado
163
  iteration_text = st.text_area(
164
+ "", # Label vac铆o
165
  value=st.session_state.morphosyntax_state['current_text'],
166
  key=f"iteration_input_{st.session_state.morphosyntax_state['analysis_count']}",
167
  placeholder="Modifique el texto para mejorar la estructura",
168
+ height=100,
169
+ on_change=update_analysis
170
  )
171
 
172
  col1, col2, col3 = st.columns([2,1,2])
 
178
  disabled=not bool(iteration_text.strip())
179
  )
180
 
181
+ # Procesar y mostrar iteraci贸n
182
  if analyze_iteration and iteration_text.strip():
183
  try:
184
+ with st.spinner(""): # Spinner sin texto
185
  doc = nlp_models[lang_code](iteration_text)
186
  analysis = perform_advanced_morphosyntactic_analysis(
187
  iteration_text,
188
  nlp_models[lang_code]
189
  )
190
 
 
191
  st.session_state.morphosyntax_state.update({
192
  'current_text': iteration_text,
193
  'current_analysis': {'doc': doc, 'analysis': analysis},
194
+ 'show_iteration': True,
195
  'analysis_count': st.session_state.morphosyntax_state['analysis_count'] + 1
196
  })
197
 
198
+ if store_student_morphosyntax_result(
 
199
  username=st.session_state.username,
200
  text=iteration_text,
201
  arc_diagrams=analysis['arc_diagrams']
202
+ ):
203
+ # Actualizar solo el diagrama de iteraci贸n
204
+ display_morphosyntax_results(
205
+ st.session_state.morphosyntax_state['current_analysis'],
206
+ lang_code,
207
+ morpho_t
208
+ )
209
 
210
  except Exception as e:
211
  logger.error(f"Error en iteraci贸n: {str(e)}")
212
  st.error("Error al procesar los cambios")
213
 
 
 
 
 
 
 
 
 
 
214
  except Exception as e:
215
  logger.error(f"Error general: {str(e)}")
216
  st.error("Se produjo un error. Por favor, intente de nuevo.")
217
+
218
+
219
 
220
 
221
  #########################################################################3
 
230
  doc = result['doc']
231
 
232
  # An谩lisis sint谩ctico (diagramas de arco)
233
+ # st.markdown(f"### {morpho_t.get('arc_diagram', 'Syntactic analysis: Arc diagram')}")
234
 
235
  with st.container():
236
  sentences = list(doc.sents)