AIdeaText commited on
Commit
8d4dd08
·
verified ·
2 Parent(s): 8d894dc b191a35

Merge branch #AIdeaText/v3' into 'AIdeaText/v4'

Browse files
modules/semantic/semantic_interface.py CHANGED
@@ -142,11 +142,6 @@ def display_semantic_interface(lang_code, nlp_models, semantic_t):
142
  def display_semantic_results(semantic_result, lang_code, semantic_t):
143
  """
144
  Muestra los resultados del análisis semántico de conceptos clave.
145
-
146
- Args:
147
- semantic_result: Diccionario con los resultados del análisis
148
- lang_code: Código del idioma actual
149
- semantic_t: Diccionario de traducciones semánticas
150
  """
151
  # Verificar resultado
152
  if semantic_result is None or not semantic_result['success']:
@@ -155,8 +150,8 @@ def display_semantic_results(semantic_result, lang_code, semantic_t):
155
 
156
  analysis = semantic_result['analysis']
157
 
158
- # Crear contenedor para los resultados
159
- col1, col2 = st.columns(2)
160
 
161
  # Columna 1: Lista de conceptos clave
162
  with col1:
@@ -177,7 +172,8 @@ def display_semantic_results(semantic_result, lang_code, semantic_t):
177
  semantic_t.get('frequency', 'Frequency'): st.column_config.NumberColumn(
178
  format="%.2f"
179
  )
180
- }
 
181
  )
182
  else:
183
  st.info(semantic_t.get('no_concepts', 'No key concepts found'))
@@ -186,7 +182,20 @@ def display_semantic_results(semantic_result, lang_code, semantic_t):
186
  with col2:
187
  st.subheader(semantic_t.get('concept_graph', 'Concepts Graph'))
188
  if 'concept_graph' in analysis and analysis['concept_graph'] is not None:
189
- st.image(analysis['concept_graph'])
 
 
 
 
 
 
 
 
 
 
 
 
 
190
  else:
191
  st.info(semantic_t.get('no_graph', 'No concept graph available'))
192
 
 
142
  def display_semantic_results(semantic_result, lang_code, semantic_t):
143
  """
144
  Muestra los resultados del análisis semántico de conceptos clave.
 
 
 
 
 
145
  """
146
  # Verificar resultado
147
  if semantic_result is None or not semantic_result['success']:
 
150
 
151
  analysis = semantic_result['analysis']
152
 
153
+ # Crear contenedor para los resultados con proporciones ajustadas
154
+ col1, col2 = st.columns([1, 2]) # Cambio de [1, 1] a [1, 2] para dar más espacio al grafo
155
 
156
  # Columna 1: Lista de conceptos clave
157
  with col1:
 
172
  semantic_t.get('frequency', 'Frequency'): st.column_config.NumberColumn(
173
  format="%.2f"
174
  )
175
+ },
176
+ height=400 # Añadido para dar más altura a la tabla
177
  )
178
  else:
179
  st.info(semantic_t.get('no_concepts', 'No key concepts found'))
 
182
  with col2:
183
  st.subheader(semantic_t.get('concept_graph', 'Concepts Graph'))
184
  if 'concept_graph' in analysis and analysis['concept_graph'] is not None:
185
+ # Contenedor para centrar la imagen
186
+ st.markdown(
187
+ """
188
+ <style>
189
+ .stImage > img {
190
+ max-width: 100%;
191
+ display: block;
192
+ margin: 0 auto;
193
+ }
194
+ </style>
195
+ """,
196
+ unsafe_allow_html=True
197
+ )
198
+ st.image(analysis['concept_graph'], use_column_width=True)
199
  else:
200
  st.info(semantic_t.get('no_graph', 'No concept graph available'))
201
 
modules/text_analysis/semantic_analysis.py CHANGED
@@ -256,21 +256,25 @@ def create_concept_graph(doc, key_concepts):
256
  ###############################################################################
257
  def visualize_concept_graph(G, lang_code):
258
  """
259
- Visualiza el grafo de conceptos.
260
  """
261
  try:
262
- # Crear nueva figura
263
- fig = plt.figure(figsize=(12, 8))
264
 
265
  if not G.nodes():
266
  logger.warning("Grafo vacío, retornando figura vacía")
267
  return fig
268
 
269
- # Calcular layout
270
- pos = nx.spring_layout(G, k=1, iterations=50)
271
 
272
- # Obtener pesos
273
- node_weights = [G.nodes[node].get('weight', 1) * 500 for node in G.nodes()]
 
 
 
 
274
  edge_weights = [G[u][v].get('weight', 1) for u, v in G.edges()]
275
 
276
  # Dibujar grafo
@@ -284,11 +288,14 @@ def visualize_concept_graph(G, lang_code):
284
  alpha=0.5,
285
  edge_color='gray')
286
 
 
 
 
287
  nx.draw_networkx_labels(G, pos,
288
- font_size=10,
289
  font_weight='bold')
290
 
291
- plt.title("Red de conceptos relacionados")
292
  plt.axis('off')
293
 
294
  return fig
 
256
  ###############################################################################
257
  def visualize_concept_graph(G, lang_code):
258
  """
259
+ Visualiza el grafo de conceptos con nodos ajustados según la longitud del texto.
260
  """
261
  try:
262
+ # Crear nueva figura con mayor tamaño
263
+ fig = plt.figure(figsize=(15, 10)) # Aumentado de (12, 8) a (15, 10)
264
 
265
  if not G.nodes():
266
  logger.warning("Grafo vacío, retornando figura vacía")
267
  return fig
268
 
269
+ # Calcular layout con más espacio
270
+ pos = nx.spring_layout(G, k=2, iterations=50) # Aumentado k de 1 a 2
271
 
272
+ # Calcular factor de escala basado en número de nodos
273
+ num_nodes = len(G.nodes())
274
+ scale_factor = 1000 if num_nodes < 10 else 500 if num_nodes < 20 else 200
275
+
276
+ # Obtener pesos ajustados
277
+ node_weights = [G.nodes[node].get('weight', 1) * scale_factor for node in G.nodes()]
278
  edge_weights = [G[u][v].get('weight', 1) for u, v in G.edges()]
279
 
280
  # Dibujar grafo
 
288
  alpha=0.5,
289
  edge_color='gray')
290
 
291
+ # Ajustar tamaño de fuente según número de nodos
292
+ font_size = 12 if num_nodes < 10 else 10 if num_nodes < 20 else 8
293
+
294
  nx.draw_networkx_labels(G, pos,
295
+ font_size=font_size,
296
  font_weight='bold')
297
 
298
+ plt.title("Red de conceptos relacionados", pad=20)
299
  plt.axis('off')
300
 
301
  return fig