import gradio as gr import json from transformers import pipeline import re # Template del autodiagnóstico TEMPLATE = { "datos_generales": { "nombre": "", "sector": "", "fecha": "" }, "reto": { "descripcion": "", "contexto": "", "alcance": "" }, "conocimientos_cogtech": { "terminos_desconocidos": [], "conceptos_dudosos": [], "areas_desconfianza": [] }, "dominio_actual": { "aspectos_dominados": [], "experiencia_previa": [], "recursos_disponibles": [] }, "entrampes": { "tecnicos": [], "implementacion": [], "organizacionales": [] }, "objetivos": { "corto_plazo": [], "esperados_microtaller": [] } } # Inicializar el modelo de clasificación de texto classifier = pipeline("zero-shot-classification") def extraer_terminos_tecnicos(texto): """Extrae términos técnicos del texto usando el modelo de clasificación""" candidatos = texto.split() labels = ["AI", "machine learning", "programming", "data science", "cognitive technology"] resultados = [] for termino in candidatos: if len(termino) > 4: # Filtrar palabras muy cortas clasificacion = classifier(termino, labels) if clasificacion['scores'][0] > 0.5: resultados.append(termino) return resultados def identificar_entrampes(texto): """Identifica posibles entrampes en el texto""" entrampes = { "tecnicos": [], "implementacion": [], "organizacionales": [] } # Palabras clave para cada tipo de entrampe keywords = { "tecnicos": ["error", "falla", "bug", "técnico", "código", "programa"], "implementacion": ["proceso", "tiempo", "recursos", "implementar", "desplegar"], "organizacionales": ["equipo", "presupuesto", "política", "aprobación", "gestión"] } oraciones = texto.split('.') for oracion in oraciones: oracion = oracion.lower() for tipo, palabras in keywords.items(): if any(palabra in oracion for palabra in palabras): entrampes[tipo].append(oracion.strip()) return entrampes def procesar_texto(texto_input): """Procesa el texto de entrada y genera un autodiagnóstico estructurado""" # Inicializar el autodiagnóstico con el template autodiagnostico = TEMPLATE.copy() # Extraer términos técnicos terminos = extraer_terminos_tecnicos(texto_input) autodiagnostico["conocimientos_cogtech"]["terminos_desconocidos"] = terminos # Identificar entrampes entrampes = identificar_entrampes(texto_input) autodiagnostico["entrampes"] = entrampes # Extraer objetivos (oraciones que empiezan con "quiero", "necesito", "busco") objetivos = [] for linea in texto_input.split('.'): if any(palabra in linea.lower() for palabra in ["quiero", "necesito", "busco"]): objetivos.append(linea.strip()) autodiagnostico["objetivos"]["esperados_microtaller"] = objetivos # Convertir a JSON return json.dumps(autodiagnostico, indent=2, ensure_ascii=False) # Crear la interfaz de Gradio with gr.Blocks() as app: gr.Markdown("# Autodiagnóstico CogTech") gr.Markdown(""" Describe tu reto o proyecto relacionado con tecnologías cognitivas. La aplicación analizará tu texto y generará un autodiagnóstico estructurado. """) with gr.Row(): texto_input = gr.Textbox( label="Tu descripción", placeholder="Describe tu reto, dudas, objetivos y contexto...", lines=10 ) json_output = gr.JSON(label="Autodiagnóstico Estructurado") analizar_btn = gr.Button("Generar Autodiagnóstico") analizar_btn.click( fn=procesar_texto, inputs=texto_input, outputs=json_output ) gr.Markdown(""" ### Instrucciones: 1. Describe tu reto o proyecto en el campo de texto 2. Incluye tus dudas, objetivos y contexto 3. Haz clic en "Generar Autodiagnóstico" 4. Descarga el JSON resultante """) # Lanzar la aplicación app.launch()