File size: 7,397 Bytes
309ed7a c09a626 f5bf61e 309ed7a 37f1796 c09a626 37f1796 f0ecea4 37f1796 f5bf61e 4a9dbfa f5bf61e f0ecea4 f5bf61e 4a9dbfa f0ecea4 4a9dbfa f0ecea4 4a9dbfa f5bf61e f0ecea4 f5bf61e 4a9dbfa f5bf61e f0ecea4 c09a626 07db390 6e209ac 1c6da15 9d4bb80 1c6da15 309ed7a 1c6da15 9d4bb80 1c6da15 07db390 1c6da15 309ed7a 1c6da15 9d4bb80 c09a626 9d4bb80 9375a9e 42a034b 9375a9e 42a034b 9d4bb80 42a034b 9d4bb80 42a034b 9375a9e 9d4bb80 42a034b 9d4bb80 9375a9e a4788b3 64c84a7 1568785 a4788b3 64c84a7 1568785 64c84a7 1568785 425d4e3 64c84a7 425d4e3 64c84a7 425d4e3 64c84a7 1568785 425d4e3 64c84a7 a4788b3 425d4e3 1568785 425d4e3 64c84a7 1568785 a4788b3 425d4e3 a4788b3 64c84a7 1568785 64c84a7 425d4e3 64c84a7 425d4e3 64c84a7 425d4e3 a4788b3 1568785 425d4e3 1568785 425d4e3 1568785 a4788b3 1568785 a4788b3 425d4e3 a4788b3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# functions.py
import json
import requests
import matplotlib.pyplot as plt # Añadido import <button class="citation-flag" data-index="1">
from datasets import load_dataset
# Cargar modalidades y tareas (ahora devuelve una lista de tareas) <button class="citation-flag" data-index="1">
def cargar_modalidades_tareas():
try:
with open("modalidades_tareas.json", "r") as file:
return json.load(file)
except FileNotFoundError:
return {} # Devolver diccionario vacío si no existe
def actualizar_modalidades_tareas_desde_huggingface():
MODALIDADES = ["text-classification", "image-classification", "speech-recognition"]
MODALIDAD_TAREAS = cargar_modalidades_tareas() # Cargar JSON existente
for task in MODALIDADES:
response = requests.get(f"https://huggingface.co/api/datasets?task={task}&full=true&limit=5").json()
for dataset in response:
dataset_id = dataset["id"]
dataset_info = requests.get(f"https://huggingface.co/api/datasets/{dataset_id}").json()
# Añadir datos al JSON
if task not in MODALIDAD_TAREAS:
MODALIDAD_TAREAS[task] = {
"nombre": task.replace("-", " ").capitalize(),
"columnas": list(dataset_info.get("features", {}).keys()),
"datasets": {}
}
MODALIDAD_TAREAS[task]["datasets"][dataset_id] = {
"columnas": list(dataset_info.get("features", {}).keys()),
"licencia": dataset.get("license", "unknown")
}
# Guardar JSON con permisos explícitos <button class="citation-flag" data-index="2">
with open("modalidades_tareas.json", "w") as file:
json.dump(MODALIDAD_TAREAS, file, indent=4)
return list(MODALIDAD_TAREAS.keys()) # Devolver lista de tareas actualizadas
# Generar gráfica de barras
def generar_grafica_barras(tareas_seleccionadas, MODALIDAD_TAREAS):
try:
conteo = {}
for modalidad, datos in MODALIDAD_TAREAS.items():
tareas_modalidad = datos["tareas"].keys()
conteo[modalidad] = len([t for t in tareas_seleccionadas if t in tareas_modalidad])
# Crear gráfica con matplotlib
fig, ax = plt.subplots(figsize=(10, 6))
ax.barh(list(conteo.keys()), list(conteo.values()), color='skyblue')
ax.set_xlabel('Cantidad de Tareas Seleccionadas')
ax.set_ylabel('Modalidades')
ax.set_title('Distribución de Tareas por Modalidad')
ax.invert_yaxis()
return fig
except Exception as e:
raise ValueError(f"Error al generar gráfica: {str(e)}")
# Generar encabezado
def generar_encabezado(tareas_seleccionadas):
MODALIDAD_TAREAS = cargar_modalidades_tareas()
if not tareas_seleccionadas:
raise ValueError("Selecciona al menos una tarea.")
columnas = ["id"]
columnas_modulos = set()
for tarea in tareas_seleccionadas:
for modalidad, datos in MODALIDAD_TAREAS.items():
if tarea in datos["tareas"]:
# Añadir columnas generales de la modalidad
for col in datos["columnas_generales"]:
if col not in columnas_modulos:
columnas.append(col)
columnas_modulos.add(col)
# Añadir columnas específicas de la tarea
for col in datos["tareas"][tarea]:
if col not in columnas_modulos:
columnas.append(col)
columnas_modulos.add(col)
# Ordenar columnas: inputs → outputs → labels
columnas_ordenadas = ["id"] + sorted(
columnas[1:],
key=lambda x: (
"input" in x,
"output" in x,
"label" in x
)
)
return ",".join(columnas_ordenadas)
# Buscar datasets usando tags oficiales de HuggingFace
def buscar_datasets(tareas_seleccionadas, filtro_tamaño, filtro_licencia):
try:
# Usar tags oficiales para búsqueda precisa
query = "+".join([f"task:{tarea}" for tarea in tareas_seleccionadas])
url = f"https://huggingface.co/api/datasets?search={query}&sort=downloads"
response = requests.get(url)
response.raise_for_status()
datasets = response.json()
# Filtrar datasets útiles
datasets_utiles = []
for dataset in datasets:
try:
# Verificar licencia y tamaño
if filtro_licencia and dataset.get("license", "").lower() != filtro_licencia:
continue
if filtro_tamaño and dataset.get("size_categories", "").lower() != filtro_tamaño:
continue
# Verificar columnas relevantes
dataset_info = requests.get(f"https://huggingface.co/api/datasets/{dataset['id']}").json()
if "features" in dataset_info:
datasets_utiles.append(
(dataset['id'], f"{dataset['id']} ({dataset['tags']}) - {dataset['description']}")
)
except requests.exceptions.RequestException:
continue
return datasets_utiles
except Exception as e:
raise ValueError(f"Error al buscar datasets: {str(e)}")
# Generar dataset con mapeo dinámico de columnas
def generar_dataset(encabezado, datasets_seleccionados, pagina_actual=1, filas_por_pagina=5):
try:
columnas = encabezado.split(",")
filas = []
for dataset_id in datasets_seleccionados:
try:
dataset = load_dataset(dataset_id, split="train")
features = dataset.features
# Mapear columnas automáticamente
mapeo = {}
for col in columnas:
if col == "id":
mapeo[col] = lambda idx: f"id_{idx}"
elif col in features:
mapeo[col] = lambda fila, c=col: str(fila[c])
else:
# Buscar columna alternativa (ej. 'text' para 'text_input')
columna_alternativa = next(
(k for k in features if col.split("_")[0] in k),
"valor_default"
)
mapeo[col] = lambda fila, c=columna_alternativa: str(fila.get(c, "N/A"))
inicio = (pagina_actual - 1) * filas_por_pagina
fin = pagina_actual * filas_por_pagina
for i, fila in enumerate(dataset[inicio:fin]):
valores = []
for col in columnas:
if col == "id":
valores.append(mapeo[col](i))
else:
valores.append(mapeo[col](fila))
filas.append(",".join(valores))
except Exception as e:
filas.append(f"Error en {dataset_id}: {str(e)}")
return "\n".join([encabezado] + filas)
except Exception as e:
raise ValueError(f"Error al generar el dataset: {str(e)}") |