AIdeaText commited on
Commit
0055018
1 Parent(s): ac10537

Update modules/studentact/current_situation_analysis.py

Browse files
modules/studentact/current_situation_analysis.py CHANGED
@@ -12,32 +12,6 @@ import logging
12
 
13
  logger = logging.getLogger(__name__)
14
 
15
- def display_current_situation_visual(doc, metrics):
16
- try:
17
- with st.container():
18
- st.subheader("Riqueza de Vocabulario")
19
- vocabulary_graph = create_vocabulary_network(doc)
20
- if vocabulary_graph:
21
- st.pyplot(vocabulary_graph)
22
- plt.close(vocabulary_graph)
23
-
24
- st.subheader("Estructura de Oraciones")
25
- syntax_graph = create_syntax_complexity_graph(doc)
26
- if syntax_graph:
27
- st.pyplot(syntax_graph)
28
- plt.close(syntax_graph)
29
-
30
- st.subheader("Cohesión del Texto")
31
- cohesion_map = create_cohesion_heatmap(doc)
32
- if cohesion_map:
33
- st.pyplot(cohesion_map)
34
- plt.close(cohesion_map)
35
-
36
- except Exception as e:
37
- logger.error(f"Error mostrando visualizaciones: {str(e)}")
38
- st.error("Error al generar visualizaciones")
39
-
40
-
41
  def analyze_text_dimensions(doc):
42
  """
43
  Analiza las diferentes dimensiones del texto.
@@ -112,6 +86,8 @@ def analyze_structure(doc):
112
  avg_depth = sum(root_distances) / len(root_distances) if root_distances else 0
113
  return normalize_score(avg_depth, optimal_depth=3)
114
 
 
 
115
  def get_dependency_depths(token, depth=0):
116
  """Obtiene las profundidades de dependencia"""
117
  depths = [depth]
@@ -123,7 +99,8 @@ def normalize_score(value, optimal_value=1.0, range_factor=2.0):
123
  """Normaliza un valor a un score entre 0 y 1"""
124
  return 1 / (1 + abs(value - optimal_value) / range_factor)
125
 
126
- # Implementación de las funciones de visualización
 
127
  def generate_sentence_graphs(doc):
128
  """Genera visualizaciones de estructura de oraciones"""
129
  fig, ax = plt.subplots(figsize=(10, 6))
@@ -191,56 +168,6 @@ def create_vocabulary_network(doc):
191
  plt.axis('off')
192
  return fig
193
 
194
- def create_cohesion_heatmap(doc):
195
- """
196
- Genera un mapa de calor que muestra la cohesión entre párrafos/oraciones.
197
- """
198
- try:
199
- # Dividir en oraciones
200
- sentences = list(doc.sents)
201
- n_sentences = len(sentences)
202
-
203
- if n_sentences < 2:
204
- return None
205
-
206
- # Crear matriz de similitud
207
- similarity_matrix = np.zeros((n_sentences, n_sentences))
208
-
209
- # Calcular similitud entre pares de oraciones
210
- for i in range(n_sentences):
211
- for j in range(n_sentences):
212
- sent1_lemmas = {token.lemma_ for token in sentences[i]
213
- if token.is_alpha and not token.is_stop}
214
- sent2_lemmas = {token.lemma_ for token in sentences[j]
215
- if token.is_alpha and not token.is_stop}
216
-
217
- if sent1_lemmas and sent2_lemmas:
218
- intersection = len(sent1_lemmas & sent2_words)
219
- union = len(sent1_lemmas | sent2_words)
220
- similarity_matrix[i, j] = intersection / union if union > 0 else 0
221
-
222
- # Crear visualización
223
- fig, ax = plt.subplots(figsize=(10, 8))
224
-
225
- sns.heatmap(similarity_matrix,
226
- cmap='YlOrRd',
227
- square=True,
228
- xticklabels=False,
229
- yticklabels=False,
230
- cbar_kws={'label': 'Cohesión'},
231
- ax=ax)
232
-
233
- plt.title("Mapa de Cohesión Textual")
234
- plt.xlabel("Oraciones")
235
- plt.ylabel("Oraciones")
236
-
237
- plt.tight_layout()
238
- return fig
239
-
240
- except Exception as e:
241
- logger.error(f"Error en create_cohesion_heatmap: {str(e)}")
242
- return None
243
-
244
  def create_syntax_complexity_graph(doc):
245
  """
246
  Genera el diagrama de arco de complejidad sintáctica.
@@ -319,3 +246,54 @@ def create_syntax_complexity_graph(doc):
319
  except Exception as e:
320
  logger.error(f"Error en create_syntax_complexity_graph: {str(e)}")
321
  return None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
13
  logger = logging.getLogger(__name__)
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  def analyze_text_dimensions(doc):
16
  """
17
  Analiza las diferentes dimensiones del texto.
 
86
  avg_depth = sum(root_distances) / len(root_distances) if root_distances else 0
87
  return normalize_score(avg_depth, optimal_depth=3)
88
 
89
+
90
+ # Funciones auxiliares de análisis
91
  def get_dependency_depths(token, depth=0):
92
  """Obtiene las profundidades de dependencia"""
93
  depths = [depth]
 
99
  """Normaliza un valor a un score entre 0 y 1"""
100
  return 1 / (1 + abs(value - optimal_value) / range_factor)
101
 
102
+
103
+ # Funciones de generación de gráficos
104
  def generate_sentence_graphs(doc):
105
  """Genera visualizaciones de estructura de oraciones"""
106
  fig, ax = plt.subplots(figsize=(10, 6))
 
168
  plt.axis('off')
169
  return fig
170
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171
  def create_syntax_complexity_graph(doc):
172
  """
173
  Genera el diagrama de arco de complejidad sintáctica.
 
246
  except Exception as e:
247
  logger.error(f"Error en create_syntax_complexity_graph: {str(e)}")
248
  return None
249
+
250
+
251
+ def create_cohesion_heatmap(doc):
252
+ """
253
+ Genera un mapa de calor que muestra la cohesión entre párrafos/oraciones.
254
+ """
255
+ try:
256
+ # Dividir en oraciones
257
+ sentences = list(doc.sents)
258
+ n_sentences = len(sentences)
259
+
260
+ if n_sentences < 2:
261
+ return None
262
+
263
+ # Crear matriz de similitud
264
+ similarity_matrix = np.zeros((n_sentences, n_sentences))
265
+
266
+ # Calcular similitud entre pares de oraciones
267
+ for i in range(n_sentences):
268
+ for j in range(n_sentences):
269
+ sent1_lemmas = {token.lemma_ for token in sentences[i]
270
+ if token.is_alpha and not token.is_stop}
271
+ sent2_lemmas = {token.lemma_ for token in sentences[j]
272
+ if token.is_alpha and not token.is_stop}
273
+
274
+ if sent1_lemmas and sent2_lemmas:
275
+ intersection = len(sent1_lemmas & sent2_words)
276
+ union = len(sent1_lemmas | sent2_words)
277
+ similarity_matrix[i, j] = intersection / union if union > 0 else 0
278
+
279
+ # Crear visualización
280
+ fig, ax = plt.subplots(figsize=(10, 8))
281
+
282
+ sns.heatmap(similarity_matrix,
283
+ cmap='YlOrRd',
284
+ square=True,
285
+ xticklabels=False,
286
+ yticklabels=False,
287
+ cbar_kws={'label': 'Cohesión'},
288
+ ax=ax)
289
+
290
+ plt.title("Mapa de Cohesión Textual")
291
+ plt.xlabel("Oraciones")
292
+ plt.ylabel("Oraciones")
293
+
294
+ plt.tight_layout()
295
+ return fig
296
+
297
+ except Exception as e:
298
+ logger.error(f"Error en create_cohesion_heatmap: {str(e)}")
299
+ return None