SergioSCA commited on
Commit
64c84a7
·
verified ·
1 Parent(s): 65d0047

Update functions.py

Browse files
Files changed (1) hide show
  1. functions.py +22 -20
functions.py CHANGED
@@ -64,38 +64,35 @@ def generar_encabezado(tareas_seleccionadas):
64
 
65
  return ",".join(columnas_ordenadas)
66
 
67
- # Buscar datasets en HuggingFace con validación avanzada
68
  def buscar_datasets(tareas_seleccionadas, filtro_tamaño, filtro_licencia):
69
  try:
70
- # Traducir tareas al inglés para mejorar la búsqueda <button class="citation-flag" data-index="1">
71
- tareas_ingles = [tarea.lower().replace(" ", "_") for tarea in tareas_seleccionadas]
72
- query = "+".join(tareas_ingles)
73
- url = f"https://huggingface.co/api/datasets?search={query}&full=True" # Parámetro 'full' para más detalles <button class="citation-flag" data-index="1">
74
  response = requests.get(url)
75
  response.raise_for_status()
76
  datasets = response.json()
77
 
 
78
  datasets_utiles = []
79
  for dataset in datasets:
80
  try:
81
- # Verificar filtros
82
- if filtro_tamaño and dataset.get("size_categories", "").lower() != filtro_tamaño:
83
- continue
84
  if filtro_licencia and dataset.get("license", "").lower() != filtro_licencia:
85
  continue
 
 
86
 
87
  # Verificar columnas relevantes
88
  dataset_info = requests.get(f"https://huggingface.co/api/datasets/{dataset['id']}").json()
89
  if "features" in dataset_info:
90
- columnas_dataset = list(dataset_info["features"].keys())
91
- # Priorizar datasets con columnas útiles (ej. 'text' para NLP) <button class="citation-flag" data-index="1">
92
- if any(col in columnas_dataset for col in ["text", "image", "audio", "code"]):
93
- datasets_utiles.append(
94
- (dataset['id'], f"{dataset['id']} ({dataset['tags']}) - {dataset['description']}")
95
- )
96
 
97
  except requests.exceptions.RequestException:
98
- continue # Ignorar datasets con información inaccesible
99
 
100
  return datasets_utiles
101
 
@@ -103,7 +100,7 @@ def buscar_datasets(tareas_seleccionadas, filtro_tamaño, filtro_licencia):
103
  raise ValueError(f"Error al buscar datasets: {str(e)}")
104
 
105
 
106
- # Generar dataset combinado con validación de columnas
107
  def generar_dataset(encabezado, datasets_seleccionados, pagina_actual=1, filas_por_pagina=5):
108
  try:
109
  columnas = encabezado.split(",")
@@ -112,17 +109,22 @@ def generar_dataset(encabezado, datasets_seleccionados, pagina_actual=1, filas_p
112
  for dataset_id in datasets_seleccionados:
113
  try:
114
  dataset = load_dataset(dataset_id, split="train")
115
- columnas_dataset = dataset.features.keys()
116
 
117
- # Mapear columnas del dataset a las del encabezado
118
  mapeo = {}
119
  for col in columnas:
120
  if col == "id":
121
  mapeo[col] = lambda idx: f"id_{idx}"
122
- elif col in columnas_dataset:
123
  mapeo[col] = lambda fila, c=col: str(fila[c])
124
  else:
125
- mapeo[col] = lambda _: "valor_default" # Valor por defecto <button class="citation-flag" data-index="4">
 
 
 
 
 
126
 
127
  inicio = (pagina_actual - 1) * filas_por_pagina
128
  fin = pagina_actual * filas_por_pagina
 
64
 
65
  return ",".join(columnas_ordenadas)
66
 
67
+ # Buscar datasets usando tags oficiales de HuggingFace
68
  def buscar_datasets(tareas_seleccionadas, filtro_tamaño, filtro_licencia):
69
  try:
70
+ # Usar tags oficiales para búsqueda precisa
71
+ query = "+".join([f"task:{tarea}" for tarea in tareas_seleccionadas])
72
+ url = f"https://huggingface.co/api/datasets?search={query}&sort=downloads"
 
73
  response = requests.get(url)
74
  response.raise_for_status()
75
  datasets = response.json()
76
 
77
+ # Filtrar datasets útiles
78
  datasets_utiles = []
79
  for dataset in datasets:
80
  try:
81
+ # Verificar licencia y tamaño
 
 
82
  if filtro_licencia and dataset.get("license", "").lower() != filtro_licencia:
83
  continue
84
+ if filtro_tamaño and dataset.get("size_categories", "").lower() != filtro_tamaño:
85
+ continue
86
 
87
  # Verificar columnas relevantes
88
  dataset_info = requests.get(f"https://huggingface.co/api/datasets/{dataset['id']}").json()
89
  if "features" in dataset_info:
90
+ datasets_utiles.append(
91
+ (dataset['id'], f"{dataset['id']} ({dataset['tags']}) - {dataset['description']}")
92
+ )
 
 
 
93
 
94
  except requests.exceptions.RequestException:
95
+ continue
96
 
97
  return datasets_utiles
98
 
 
100
  raise ValueError(f"Error al buscar datasets: {str(e)}")
101
 
102
 
103
+ # Generar dataset con mapeo dinámico de columnas
104
  def generar_dataset(encabezado, datasets_seleccionados, pagina_actual=1, filas_por_pagina=5):
105
  try:
106
  columnas = encabezado.split(",")
 
109
  for dataset_id in datasets_seleccionados:
110
  try:
111
  dataset = load_dataset(dataset_id, split="train")
112
+ features = dataset.features
113
 
114
+ # Mapear columnas automáticamente
115
  mapeo = {}
116
  for col in columnas:
117
  if col == "id":
118
  mapeo[col] = lambda idx: f"id_{idx}"
119
+ elif col in features:
120
  mapeo[col] = lambda fila, c=col: str(fila[c])
121
  else:
122
+ # Buscar columna alternativa (ej. 'text' para 'text_input')
123
+ columna_alternativa = next(
124
+ (k for k in features if col.split("_")[0] in k),
125
+ "valor_default"
126
+ )
127
+ mapeo[col] = lambda fila, c=columna_alternativa: str(fila.get(c, "N/A"))
128
 
129
  inicio = (pagina_actual - 1) * filas_por_pagina
130
  fin = pagina_actual * filas_por_pagina