AIdeaText commited on
Commit
87370f4
verified
1 Parent(s): f653cb2

Update modules/morphosyntax/morphosyntax_interface.py

Browse files
modules/morphosyntax/morphosyntax_interface.py CHANGED
@@ -45,169 +45,156 @@ import re
45
 
46
  def display_morphosyntax_interface(lang_code, nlp_models, morpho_t):
47
  try:
48
- # CSS para prevenir saltos y mejorar estabilidad
49
  st.markdown("""
50
  <style>
51
- .element-container:has(.stTextArea) {
52
- position: sticky !important;
53
- z-index: 1;
 
 
 
 
 
 
54
  }
55
- .diagram-container {
56
- position: relative;
57
- z-index: 0;
58
- }
59
- [data-testid="stVerticalBlock"] {
60
- gap: 0rem !important;
 
 
 
61
  }
62
  </style>
63
  """, unsafe_allow_html=True)
64
 
65
- # Controlar estado de la p谩gina
66
- if 'active_tab' not in st.session_state:
67
- st.session_state.active_tab = 'morphosyntax'
 
 
 
 
 
 
68
 
69
- # Manejar cambios de texto sin recargar
70
- def handle_text_change():
71
- text = st.session_state.get(st.session_state.text_key, '')
72
- st.session_state.current_text = text
73
- # No provocar rerun aqu铆
 
 
 
 
 
 
 
 
 
 
 
 
 
74
 
75
- # Secci贸n de texto original
76
- with st.container():
77
- st.markdown("### Texto Original")
78
-
79
- # Clave 煤nica para el texto
80
- st.session_state.text_key = f"text_input_{st.session_state.get('analysis_count', 0)}"
81
-
82
- original_text = st.text_area(
83
- "Ingrese una oraci贸n",
84
- value=st.session_state.get('current_text', ''),
85
- key=st.session_state.text_key,
86
- on_change=handle_text_change,
87
- placeholder="Ingresar solo una oraci贸n hasta el punto y aparte. Si es punto seguido, dejar as铆.",
88
- height=100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  )
90
 
91
- col1, col2, col3 = st.columns([2,1,2])
92
- with col1:
93
- if st.button(
94
- "Analizar Texto Original",
95
- use_container_width=True,
96
- disabled=not bool(original_text.strip())
97
- ):
98
- with st.spinner("Analizando..."):
99
- try:
100
- doc = nlp_models[lang_code](original_text)
101
- analysis = perform_advanced_morphosyntactic_analysis(
102
- original_text,
103
- nlp_models[lang_code]
104
- )
105
-
106
- # Actualizar solo el diagrama
107
- with st.container():
108
- st.markdown("### Diagrama Original")
109
- display_morphosyntax_results(
110
- {'doc': doc, 'analysis': analysis},
111
- lang_code,
112
- morpho_t
113
- )
114
-
115
- # Guardar estado sin recargar
116
- st.session_state.original_analysis = {
117
- 'doc': doc,
118
- 'analysis': analysis
119
- }
120
- st.session_state.current_text = original_text
121
-
122
- if store_student_morphosyntax_result(
123
- username=st.session_state.username,
124
- text=original_text,
125
- arc_diagrams=analysis['arc_diagrams']
126
- ):
127
- st.success("An谩lisis guardado")
128
-
129
- except Exception as e:
130
- logger.error(f"Error en an谩lisis: {str(e)}")
131
- st.error("Error al procesar el texto")
132
-
133
- # Secci贸n de iteraciones
134
- if 'original_analysis' in st.session_state:
135
  st.markdown("---")
136
- st.markdown("### Iteraci贸n Actual")
137
 
138
- iteration_key = f"iteration_{st.session_state.get('iteration_count', 0)}"
139
  iteration_text = st.text_area(
140
  "Modifique la oraci贸n",
141
- value=st.session_state.get('current_text', ''),
142
- key=iteration_key,
143
- height=100,
144
- placeholder="Modifique el texto para mejorar la estructura"
145
  )
146
 
147
  col1, col2, col3 = st.columns([2,1,2])
148
  with col1:
149
- if st.button(
150
  "Analizar Cambios",
 
151
  use_container_width=True,
152
  disabled=not bool(iteration_text.strip())
153
- ):
154
- with st.spinner("Procesando cambios..."):
155
- try:
156
- doc = nlp_models[lang_code](iteration_text)
157
- analysis = perform_advanced_morphosyntactic_analysis(
158
- iteration_text,
159
- nlp_models[lang_code]
160
- )
161
-
162
- # Actualizar solo el diagrama de iteraci贸n
163
- with st.container():
164
- st.markdown("### Diagrama de Iteraci贸n")
165
- display_morphosyntax_results(
166
- {'doc': doc, 'analysis': analysis},
167
- lang_code,
168
- morpho_t
169
- )
170
-
171
- # Guardar iteraci贸n
172
- if 'iterations' not in st.session_state:
173
- st.session_state.iterations = []
174
-
175
- st.session_state.iterations.append({
176
- 'text': iteration_text,
177
- 'analysis': {'doc': doc, 'analysis': analysis},
178
- 'timestamp': pd.Timestamp.now()
179
- })
180
-
181
- st.session_state.current_text = iteration_text
182
- st.session_state.iteration_count = len(st.session_state.iterations)
183
-
184
- if store_student_morphosyntax_result(
185
- username=st.session_state.username,
186
- text=iteration_text,
187
- arc_diagrams=analysis['arc_diagrams']
188
- ):
189
- st.success("Iteraci贸n guardada")
190
-
191
- except Exception as e:
192
- logger.error(f"Error en iteraci贸n: {str(e)}")
193
- st.error("Error al procesar los cambios")
194
-
195
- # Historial de iteraciones
196
- if st.session_state.get('iterations'):
197
- with st.expander("Historial de Iteraciones", expanded=False):
198
- for idx, iteration in enumerate(reversed(st.session_state.iterations)):
199
- st.text_area(
200
- f"Texto de iteraci贸n {idx + 1}",
201
- value=iteration['text'],
202
- disabled=True,
203
- height=100
204
  )
205
- display_morphosyntax_results(
206
- iteration['analysis'],
207
- lang_code,
208
- morpho_t
 
 
 
 
 
 
 
 
 
209
  )
210
- st.markdown("---")
 
 
 
 
 
 
 
 
 
 
 
 
211
 
212
  except Exception as e:
213
  logger.error(f"Error general: {str(e)}")
 
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 {
52
+ font-size: 1rem;
53
+ line-height: 1.5;
54
+ padding: 0.5rem;
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
+ .arc-diagram-container {
62
+ width: 100%;
63
+ overflow-x: auto;
64
+ background-color: white;
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 del estado
75
+ if 'morphosyntax_state' not in st.session_state:
76
+ st.session_state.morphosyntax_state = {
77
+ 'original_text': '',
78
+ 'original_analysis': None,
79
+ 'current_text': '',
80
+ 'current_analysis': None,
81
+ 'analysis_count': 0
82
+ }
83
 
84
+ # Secci贸n del texto original
85
+ st.markdown("### Texto Original")
86
+ original_text = st.text_area(
87
+ "Ingrese una oraci贸n",
88
+ value=st.session_state.morphosyntax_state['original_text'],
89
+ key="original_text_input",
90
+ placeholder="Ingresar solo una oraci贸n hasta el punto y aparte. Si es punto seguido, dejar as铆.",
91
+ height=100
92
+ )
93
+
94
+ col1, col2, col3 = st.columns([2,1,2])
95
+ with col1:
96
+ analyze_original = st.button(
97
+ "Analizar Texto Original",
98
+ type="primary",
99
+ use_container_width=True,
100
+ disabled=not bool(original_text.strip())
101
+ )
102
 
103
+ # Procesar texto original
104
+ if analyze_original and original_text.strip():
105
+ try:
106
+ with st.spinner("Analizando texto original..."):
107
+ doc = nlp_models[lang_code](original_text)
108
+ analysis = perform_advanced_morphosyntactic_analysis(
109
+ original_text,
110
+ nlp_models[lang_code]
111
+ )
112
+
113
+ # Guardar an谩lisis original en el estado
114
+ st.session_state.morphosyntax_state.update({
115
+ 'original_text': original_text,
116
+ 'original_analysis': {'doc': doc, 'analysis': analysis},
117
+ 'current_text': original_text,
118
+ 'analysis_count': st.session_state.morphosyntax_state['analysis_count'] + 1
119
+ })
120
+
121
+ # Guardar en base de datos
122
+ store_student_morphosyntax_result(
123
+ username=st.session_state.username,
124
+ text=original_text,
125
+ arc_diagrams=analysis['arc_diagrams']
126
+ )
127
+
128
+ except Exception as e:
129
+ logger.error(f"Error en an谩lisis original: {str(e)}")
130
+ st.error("Error al procesar el texto original")
131
+
132
+ # Mostrar diagrama original si existe
133
+ if st.session_state.morphosyntax_state['original_analysis']:
134
+ st.markdown("### Diagrama Original")
135
+ display_morphosyntax_results(
136
+ st.session_state.morphosyntax_state['original_analysis'],
137
+ lang_code,
138
+ morpho_t
139
  )
140
 
141
+ # Secci贸n de iteraci贸n
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
  st.markdown("---")
143
+ st.markdown("### Iteraci贸n")
144
 
 
145
  iteration_text = st.text_area(
146
  "Modifique la oraci贸n",
147
+ value=st.session_state.morphosyntax_state['current_text'],
148
+ key=f"iteration_input_{st.session_state.morphosyntax_state['analysis_count']}",
149
+ placeholder="Modifique el texto para mejorar la estructura",
150
+ height=100
151
  )
152
 
153
  col1, col2, col3 = st.columns([2,1,2])
154
  with col1:
155
+ analyze_iteration = st.button(
156
  "Analizar Cambios",
157
+ type="primary",
158
  use_container_width=True,
159
  disabled=not bool(iteration_text.strip())
160
+ )
161
+
162
+ # Procesar iteraci贸n
163
+ if analyze_iteration and iteration_text.strip():
164
+ try:
165
+ with st.spinner("Analizando cambios..."):
166
+ doc = nlp_models[lang_code](iteration_text)
167
+ analysis = perform_advanced_morphosyntactic_analysis(
168
+ iteration_text,
169
+ nlp_models[lang_code]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  )
171
+
172
+ # Actualizar an谩lisis actual
173
+ st.session_state.morphosyntax_state.update({
174
+ 'current_text': iteration_text,
175
+ 'current_analysis': {'doc': doc, 'analysis': analysis},
176
+ 'analysis_count': st.session_state.morphosyntax_state['analysis_count'] + 1
177
+ })
178
+
179
+ # Guardar en base de datos
180
+ store_student_morphosyntax_result(
181
+ username=st.session_state.username,
182
+ text=iteration_text,
183
+ arc_diagrams=analysis['arc_diagrams']
184
  )
185
+
186
+ except Exception as e:
187
+ logger.error(f"Error en iteraci贸n: {str(e)}")
188
+ st.error("Error al procesar los cambios")
189
+
190
+ # Mostrar diagrama de iteraci贸n si existe
191
+ if st.session_state.morphosyntax_state['current_analysis']:
192
+ st.markdown("### Diagrama de Iteraci贸n")
193
+ display_morphosyntax_results(
194
+ st.session_state.morphosyntax_state['current_analysis'],
195
+ lang_code,
196
+ morpho_t
197
+ )
198
 
199
  except Exception as e:
200
  logger.error(f"Error general: {str(e)}")