|
import gradio as gr |
|
import json |
|
from transformers import pipeline |
|
import re |
|
|
|
|
|
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": [] |
|
} |
|
} |
|
|
|
|
|
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: |
|
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": [] |
|
} |
|
|
|
|
|
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""" |
|
|
|
autodiagnostico = TEMPLATE.copy() |
|
|
|
|
|
terminos = extraer_terminos_tecnicos(texto_input) |
|
autodiagnostico["conocimientos_cogtech"]["terminos_desconocidos"] = terminos |
|
|
|
|
|
entrampes = identificar_entrampes(texto_input) |
|
autodiagnostico["entrampes"] = entrampes |
|
|
|
|
|
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 |
|
|
|
|
|
return json.dumps(autodiagnostico, indent=2, ensure_ascii=False) |
|
|
|
|
|
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 |
|
""") |
|
|
|
|
|
app.launch() |
|
|