AIdeaText commited on
Commit
0d6070b
·
verified ·
1 Parent(s): 92220ae

Update modules/text_analysis/discourse_analysis.py

Browse files
modules/text_analysis/discourse_analysis.py CHANGED
@@ -85,13 +85,6 @@ ENTITY_LABELS = {
85
  def compare_semantic_analysis(text1, text2, nlp, lang):
86
  """
87
  Realiza el análisis semántico comparativo entre dos textos
88
- Args:
89
- text1: Primer texto a analizar
90
- text2: Segundo texto a analizar
91
- nlp: Modelo de spaCy cargado
92
- lang: Código de idioma
93
- Returns:
94
- tuple: (fig1, fig2, key_concepts1, key_concepts2)
95
  """
96
  try:
97
  logger.info(f"Iniciando análisis comparativo para idioma: {lang}")
@@ -104,7 +97,7 @@ def compare_semantic_analysis(text1, text2, nlp, lang):
104
  doc1 = nlp(text1)
105
  doc2 = nlp(text2)
106
 
107
- # Identificar conceptos clave con parámetros específicos
108
  logger.info("Identificando conceptos clave del primer texto...")
109
  key_concepts1 = identify_key_concepts(doc1, stopwords=stopwords, min_freq=2, min_length=3)
110
 
@@ -114,22 +107,24 @@ def compare_semantic_analysis(text1, text2, nlp, lang):
114
  if not key_concepts1 or not key_concepts2:
115
  raise ValueError("No se pudieron identificar conceptos clave en uno o ambos textos")
116
 
117
- # Crear y visualizar grafos
118
  logger.info("Creando grafos de conceptos...")
119
  G1 = create_concept_graph(doc1, key_concepts1)
120
  G2 = create_concept_graph(doc2, key_concepts2)
121
 
 
122
  logger.info("Visualizando grafos...")
123
- plt.clf() # Limpiar figura actual
124
- fig1 = visualize_concept_graph(G1, lang)
125
- plt.clf() # Limpiar figura antes del segundo grafo
126
- fig2 = visualize_concept_graph(G2, lang)
127
 
128
- # Limpiar títulos y ajustar
129
- fig1.suptitle("", pad=20)
130
- fig2.suptitle("", pad=20)
 
 
131
 
132
- # Ajustar diseño
 
 
 
133
  plt.tight_layout()
134
 
135
  logger.info("Análisis comparativo completado exitosamente")
@@ -139,7 +134,11 @@ def compare_semantic_analysis(text1, text2, nlp, lang):
139
  logger.error(f"Error en compare_semantic_analysis: {str(e)}")
140
  plt.close('all') # Limpiar recursos en caso de error
141
  raise
 
 
 
142
 
 
143
  def create_concept_table(key_concepts):
144
  """
145
  Crea una tabla de conceptos clave con sus frecuencias
@@ -160,16 +159,11 @@ def create_concept_table(key_concepts):
160
  logger.error(f"Error en create_concept_table: {str(e)}")
161
  return pd.DataFrame(columns=['Concepto', 'Frecuencia'])
162
 
 
 
163
  def perform_discourse_analysis(text1, text2, nlp, lang):
164
  """
165
  Realiza el análisis completo del discurso
166
- Args:
167
- text1: Primer texto a analizar
168
- text2: Segundo texto a analizar
169
- nlp: Modelo de spaCy cargado
170
- lang: Código de idioma
171
- Returns:
172
- dict: Resultados del análisis
173
  """
174
  try:
175
  logger.info("Iniciando análisis del discurso...")
@@ -182,13 +176,21 @@ def perform_discourse_analysis(text1, text2, nlp, lang):
182
  raise ValueError("Modelo de lenguaje no inicializado")
183
 
184
  # Realizar análisis comparativo
185
- fig1, fig2, key_concepts1, key_concepts2 = compare_semantic_analysis(
186
- text1, text2, nlp, lang
187
- )
 
 
 
 
188
 
189
  # Crear tablas de resultados
190
- table1 = create_concept_table(key_concepts1)
191
- table2 = create_concept_table(key_concepts2)
 
 
 
 
192
 
193
  result = {
194
  'graph1': fig1,
@@ -205,7 +207,6 @@ def perform_discourse_analysis(text1, text2, nlp, lang):
205
 
206
  except Exception as e:
207
  logger.error(f"Error en perform_discourse_analysis: {str(e)}")
208
- plt.close('all') # Asegurar limpieza de recursos
209
  return {
210
  'success': False,
211
  'error': str(e)
@@ -213,7 +214,7 @@ def perform_discourse_analysis(text1, text2, nlp, lang):
213
  finally:
214
  plt.close('all') # Asegurar limpieza en todos los casos
215
 
216
- #################
217
  def create_concept_table(key_concepts):
218
  """
219
  Crea una tabla de conceptos clave con sus frecuencias
@@ -230,8 +231,6 @@ def create_concept_table(key_concepts):
230
  logger.error(f"Error en create_concept_table: {str(e)}")
231
  raise
232
 
233
-
234
-
235
  #################
236
  def perform_discourse_analysis(text1, text2, nlp, lang):
237
  """
 
85
  def compare_semantic_analysis(text1, text2, nlp, lang):
86
  """
87
  Realiza el análisis semántico comparativo entre dos textos
 
 
 
 
 
 
 
88
  """
89
  try:
90
  logger.info(f"Iniciando análisis comparativo para idioma: {lang}")
 
97
  doc1 = nlp(text1)
98
  doc2 = nlp(text2)
99
 
100
+ # Identificar conceptos clave
101
  logger.info("Identificando conceptos clave del primer texto...")
102
  key_concepts1 = identify_key_concepts(doc1, stopwords=stopwords, min_freq=2, min_length=3)
103
 
 
107
  if not key_concepts1 or not key_concepts2:
108
  raise ValueError("No se pudieron identificar conceptos clave en uno o ambos textos")
109
 
110
+ # Crear grafos
111
  logger.info("Creando grafos de conceptos...")
112
  G1 = create_concept_graph(doc1, key_concepts1)
113
  G2 = create_concept_graph(doc2, key_concepts2)
114
 
115
+ # Visualizar grafos
116
  logger.info("Visualizando grafos...")
 
 
 
 
117
 
118
+ # Primer grafo
119
+ plt.figure(figsize=(12, 8))
120
+ fig1 = visualize_concept_graph(G1, lang)
121
+ plt.title("Análisis del primer texto", pad=20)
122
+ plt.tight_layout()
123
 
124
+ # Segundo grafo
125
+ plt.figure(figsize=(12, 8))
126
+ fig2 = visualize_concept_graph(G2, lang)
127
+ plt.title("Análisis del segundo texto", pad=20)
128
  plt.tight_layout()
129
 
130
  logger.info("Análisis comparativo completado exitosamente")
 
134
  logger.error(f"Error en compare_semantic_analysis: {str(e)}")
135
  plt.close('all') # Limpiar recursos en caso de error
136
  raise
137
+ finally:
138
+ plt.close('all') # Asegurar limpieza en todos los casos
139
+
140
 
141
+ ############################################
142
  def create_concept_table(key_concepts):
143
  """
144
  Crea una tabla de conceptos clave con sus frecuencias
 
159
  logger.error(f"Error en create_concept_table: {str(e)}")
160
  return pd.DataFrame(columns=['Concepto', 'Frecuencia'])
161
 
162
+
163
+ ##########################################################
164
  def perform_discourse_analysis(text1, text2, nlp, lang):
165
  """
166
  Realiza el análisis completo del discurso
 
 
 
 
 
 
 
167
  """
168
  try:
169
  logger.info("Iniciando análisis del discurso...")
 
176
  raise ValueError("Modelo de lenguaje no inicializado")
177
 
178
  # Realizar análisis comparativo
179
+ try:
180
+ fig1, fig2, key_concepts1, key_concepts2 = compare_semantic_analysis(
181
+ text1, text2, nlp, lang
182
+ )
183
+ except Exception as e:
184
+ logger.error(f"Error en el análisis comparativo: {str(e)}")
185
+ raise
186
 
187
  # Crear tablas de resultados
188
+ try:
189
+ table1 = create_concept_table(key_concepts1)
190
+ table2 = create_concept_table(key_concepts2)
191
+ except Exception as e:
192
+ logger.error(f"Error creando tablas de conceptos: {str(e)}")
193
+ raise
194
 
195
  result = {
196
  'graph1': fig1,
 
207
 
208
  except Exception as e:
209
  logger.error(f"Error en perform_discourse_analysis: {str(e)}")
 
210
  return {
211
  'success': False,
212
  'error': str(e)
 
214
  finally:
215
  plt.close('all') # Asegurar limpieza en todos los casos
216
 
217
+ #################################################################
218
  def create_concept_table(key_concepts):
219
  """
220
  Crea una tabla de conceptos clave con sus frecuencias
 
231
  logger.error(f"Error en create_concept_table: {str(e)}")
232
  raise
233
 
 
 
234
  #################
235
  def perform_discourse_analysis(text1, text2, nlp, lang):
236
  """