v3 / modules /text_analysis /discourse_analysis.py
AIdeaText's picture
Update modules/text_analysis/discourse_analysis.py
ee5caf5 verified
raw
history blame
3.22 kB
# modules/text_analysis/discourse_analysis.py
import streamlit as st
import spacy
import networkx as nx
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import logging
logger = logging.getLogger(__name__)
from .semantic_analysis import (
create_concept_graph,
visualize_concept_graph,
identify_key_concepts,
get_stopwords,
POS_COLORS,
POS_TRANSLATIONS,
ENTITY_LABELS
)
def compare_semantic_analysis(text1, text2, nlp, lang):
"""
Realiza el análisis semántico comparativo entre dos textos
Args:
text1: Primer texto a analizar
text2: Segundo texto a analizar
nlp: Modelo de spaCy cargado
lang: Código de idioma
Returns:
tuple: (fig1, fig2, key_concepts1, key_concepts2)
"""
try:
# Procesar los textos
doc1 = nlp(text1)
doc2 = nlp(text2)
# Identificar conceptos clave con parámetros específicos
key_concepts1 = identify_key_concepts(doc1, min_freq=2, min_length=3)
key_concepts2 = identify_key_concepts(doc2, min_freq=2, min_length=3)
# Crear y visualizar grafos
G1 = create_concept_graph(doc1, key_concepts1)
G2 = create_concept_graph(doc2, key_concepts2)
fig1 = visualize_concept_graph(G1, lang)
fig2 = visualize_concept_graph(G2, lang)
# Limpiar títulos
fig1.suptitle("")
fig2.suptitle("")
return fig1, fig2, key_concepts1, key_concepts2
except Exception as e:
logger.error(f"Error en compare_semantic_analysis: {str(e)}")
raise
def create_concept_table(key_concepts):
"""
Crea una tabla de conceptos clave con sus frecuencias
Args:
key_concepts: Lista de tuplas (concepto, frecuencia)
Returns:
pandas.DataFrame: Tabla formateada de conceptos
"""
try:
df = pd.DataFrame(key_concepts, columns=['Concepto', 'Frecuencia'])
df['Frecuencia'] = df['Frecuencia'].round(2)
return df
except Exception as e:
logger.error(f"Error en create_concept_table: {str(e)}")
raise
def perform_discourse_analysis(text1, text2, nlp, lang):
"""
Realiza el análisis completo del discurso
Args:
text1: Primer texto a analizar
text2: Segundo texto a analizar
nlp: Modelo de spaCy cargado
lang: Código de idioma
Returns:
dict: Resultados del análisis
"""
try:
# Realizar análisis comparativo
fig1, fig2, key_concepts1, key_concepts2 = compare_semantic_analysis(
text1, text2, nlp, lang
)
# Crear tablas de resultados
table1 = create_concept_table(key_concepts1)
table2 = create_concept_table(key_concepts2)
return {
'graph1': fig1,
'graph2': fig2,
'key_concepts1': key_concepts1,
'key_concepts2': key_concepts2,
'table1': table1,
'table2': table2,
'success': True
}
except Exception as e:
logger.error(f"Error en perform_discourse_analysis: {str(e)}")
return {
'success': False,
'error': str(e)
}