AIdeaText commited on
Commit
7b66d7b
·
verified ·
1 Parent(s): 8510665

Update modules/semantic/semantic_interface.py

Browse files
modules/semantic/semantic_interface.py CHANGED
@@ -145,7 +145,7 @@ def display_semantic_interface(lang_code, nlp_models, semantic_t):
145
  def display_semantic_results(semantic_result, lang_code, semantic_t):
146
  """
147
  Muestra los resultados del análisis semántico de conceptos clave.
148
- Versión simplificada que muestra el gráfico directamente.
149
  """
150
  if semantic_result is None or not semantic_result['success']:
151
  st.warning(semantic_t.get('no_results', 'No results available'))
@@ -156,29 +156,27 @@ def display_semantic_results(semantic_result, lang_code, semantic_t):
156
  # Mostrar conceptos clave
157
  st.subheader(semantic_t.get('key_concepts', 'Key Concepts'))
158
  if 'key_concepts' in analysis and analysis['key_concepts']:
159
- df = pd.DataFrame(
160
- analysis['key_concepts'],
161
- columns=[
162
- semantic_t.get('concept', 'Concept'),
163
- semantic_t.get('frequency', 'Frequency')
164
- ]
165
- )
166
 
167
- # Mostrar conceptos como chips
168
- cols = st.columns(4) # 4 columnas para distribuir los conceptos
169
- for i, (concept, freq) in enumerate(df.values):
170
- with cols[i % 4]:
171
  st.markdown(
172
  f"""
173
  <div style="
174
  background-color: #f0f2f6;
175
- border-radius: 20px;
176
- padding: 8px 12px;
177
- margin: 5px 0;
178
- text-align: center;
 
 
 
179
  ">
180
- <b>{concept}</b><br>
181
- <small>{freq:.2f}</small>
182
  </div>
183
  """,
184
  unsafe_allow_html=True
@@ -186,35 +184,36 @@ def display_semantic_results(semantic_result, lang_code, semantic_t):
186
  else:
187
  st.info(semantic_t.get('no_concepts', 'No key concepts found'))
188
 
189
- # Mostrar gráfico de conceptos directamente
190
  if 'concept_graph' in analysis and analysis['concept_graph'] is not None:
191
  try:
192
- # Mostrar el gráfico directamente con st.image()
193
  st.image(
194
  analysis['concept_graph'],
195
- use_column_width=True,
196
  caption=semantic_t.get('graph_description', 'Visualización de relaciones entre conceptos clave')
197
  )
198
 
199
- # Sección de interpretación
200
- with st.expander("📊 " + semantic_t.get('semantic_graph_interpretation', "Interpretación del gráfico")):
201
- st.markdown(f"""
202
- - 🔀 {semantic_t.get('semantic_arrow_meaning', 'Flechas: dirección de la relación')}
203
- - 🎨 {semantic_t.get('semantic_color_meaning', 'Color: centralidad del concepto')}
204
- - {semantic_t.get('semantic_size_meaning', 'Tamaño: frecuencia del concepto')}
205
- - ↔️ {semantic_t.get('semantic_thickness_meaning', 'Grosor: fuerza de la conexión')}
206
  """)
207
 
208
- # Botón de descarga
209
  st.download_button(
210
- label="📥 " + semantic_t.get('download_graph', "Descargar gráfico"),
211
  data=analysis['concept_graph'],
212
  file_name="semantic_network.png",
213
- mime="image/png"
 
214
  )
215
 
216
  except Exception as e:
217
  logger.error(f"Error al mostrar el gráfico: {str(e)}")
218
  st.error(semantic_t.get('graph_error', 'Error al visualizar el gráfico'))
219
  else:
220
- st.info(semantic_t.get('no_graph', 'No se generó el gráfico de conceptos'))
 
145
  def display_semantic_results(semantic_result, lang_code, semantic_t):
146
  """
147
  Muestra los resultados del análisis semántico de conceptos clave.
148
+ Versión optimizada con distribución uniforme de conceptos y formato compacto.
149
  """
150
  if semantic_result is None or not semantic_result['success']:
151
  st.warning(semantic_t.get('no_results', 'No results available'))
 
156
  # Mostrar conceptos clave
157
  st.subheader(semantic_t.get('key_concepts', 'Key Concepts'))
158
  if 'key_concepts' in analysis and analysis['key_concepts']:
159
+ # Calcular número óptimo de columnas (máx 5, mín 2)
160
+ num_concepts = len(analysis['key_concepts'])
161
+ num_cols = min(max(2, (num_concepts + 2) // 3), 5) # Fórmula para distribución óptima
 
 
 
 
162
 
163
+ cols = st.columns(num_cols)
164
+ for idx, (concept, freq) in enumerate(analysis['key_concepts']):
165
+ with cols[idx % num_cols]:
 
166
  st.markdown(
167
  f"""
168
  <div style="
169
  background-color: #f0f2f6;
170
+ border-radius: 12px;
171
+ padding: 6px 10px;
172
+ margin: 4px 0;
173
+ font-size: 0.9em;
174
+ display: flex;
175
+ justify-content: space-between;
176
+ align-items: center;
177
  ">
178
+ <span style="font-weight: 500;">{concept}</span>
179
+ <span style="color: #666; font-size: 0.85em;">{freq:.2f}</span>
180
  </div>
181
  """,
182
  unsafe_allow_html=True
 
184
  else:
185
  st.info(semantic_t.get('no_concepts', 'No key concepts found'))
186
 
187
+ # Mostrar gráfico de conceptos
188
  if 'concept_graph' in analysis and analysis['concept_graph'] is not None:
189
  try:
190
+ # Mostrar el gráfico con ancho de contenedor
191
  st.image(
192
  analysis['concept_graph'],
193
+ use_container_width=True, # Corregido el parámetro obsoleto
194
  caption=semantic_t.get('graph_description', 'Visualización de relaciones entre conceptos clave')
195
  )
196
 
197
+ # Sección de interpretación compacta
198
+ with st.expander("📊 " + semantic_t.get('semantic_graph_interpretation', "Interpretación")):
199
+ st.caption(f"""
200
+ {semantic_t.get('semantic_arrow_meaning', 'Flechas Dirección relación')}
201
+ {semantic_t.get('semantic_color_meaning', 'Color Centralidad')}
202
+ {semantic_t.get('semantic_size_meaning', 'Tamaño Frecuencia')}
203
+ {semantic_t.get('semantic_thickness_meaning', 'Grosor Fuerza conexión')}
204
  """)
205
 
206
+ # Botón de descarga compacto
207
  st.download_button(
208
+ label="⬇️ " + semantic_t.get('download_graph', "Descargar"),
209
  data=analysis['concept_graph'],
210
  file_name="semantic_network.png",
211
+ mime="image/png",
212
+ use_container_width=True
213
  )
214
 
215
  except Exception as e:
216
  logger.error(f"Error al mostrar el gráfico: {str(e)}")
217
  st.error(semantic_t.get('graph_error', 'Error al visualizar el gráfico'))
218
  else:
219
+ st.info(semantic_t.get('no_graph', 'No se generó el gráfico de conceptos'))