3 usuarios conectados

Generar slug. Ejercicio en Python

Comparte esto

 
Escribe una función en Python llamada generar_slug que tome una cadena de texto en español como entrada y devuelva su representación en formato slug. Un slug es una versión de una cadena de texto que se optimiza para ser utilizada en URLs, nombres de archivo o identificadores. Generalmente, se convierte a minúsculas, se reemplazan los espacios con guiones y se eliminan los caracteres especiales.


Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  Solución al Ejercicio: Generar slug

📋 Copiar código


import re

def generar_slug(texto):
  """
  Genera un slug a partir de una cadena de texto en español SIN importar unicodedata.

  Args:
    texto: La cadena de texto de entrada.

  Returns:
    La cadena en formato slug.
  """
  # Mapeo de caracteres acentuados y 'ñ' a sus equivalentes sin acento
  reemplazos_acentos = {
      'á': 'a', 'é': 'e', 'í': 'i', 'ó': 'o', 'ú': 'u', 'ü': 'u', 'ñ': 'n',
      'Á': 'A', 'É': 'E', 'Í': 'I', 'Ó': 'O', 'Ú': 'U', 'Ü': 'U', 'Ñ': 'N'
  }

  # Reemplazar caracteres acentuados
  texto_sin_acentos = ''.join(reemplazos_acentos.get(c, c) for c in texto)

  # Convertir a minúsculas
  texto_lower = texto_sin_acentos.lower()

  # Reemplazar espacios y otros caracteres no alfanuméricos con guiones
  texto_slug = re.sub(r'[^\w\s-]', '', texto_lower).strip()
  texto_slug = re.sub(r'[-\s]+', '-', texto_slug)
  return texto_slug

# Ejemplos de uso
texto1 = "Hola Mundo Cruel"
resultado1 = generar_slug(texto1)
print(f"Slug de '{texto1}': '{resultado1}'")

texto2 = "Este es un Texto con Acentos y Ñ: áéíóúüñ"
resultado2 = generar_slug(texto2)
print(f"Slug de '{texto2}': '{resultado2}'")

texto3 = "Un título con ¡caracteres especiales!"
resultado3 = generar_slug(texto3)
print(f"Slug de '{texto3}': '{resultado3}'")

texto4 = "  Espacios al principio y al final  "
resultado4 = generar_slug(texto4)
print(f"Slug de '{texto4}': '{resultado4}'")

texto5 = "Múltiples   espacios   seguidos"
resultado5 = generar_slug(texto5)
print(f"Slug de '{texto5}': '{resultado5}'")

texto6 = ""
resultado6 = generar_slug(texto6)
print(f"Slug de '': '{resultado6}'")

Explicación del Código:

  1. import re:

    • re: Se utiliza para trabajar con expresiones regulares, que permiten realizar búsquedas y reemplazos de patrones en la cadena de texto.
  2. def generar_slug(texto)::

    • Define una función llamada generar_slug que toma una cadena de texto (texto) como entrada.
  3. reemplazos_acentos = { ... }:

    • Se crea un diccionario llamado reemplazos_acentos.
    • Este diccionario mapea las letras acentuadas en español (minúsculas y mayúsculas) y la 'ñ' (minúscula y mayúscula) a sus equivalentes sin acento o 'n'.
  4. texto_sin_acentos = ''.join(reemplazos_acentos.get(c, c) for c in texto):

    • Reemplazar caracteres acentuados:
      • reemplazos_acentos.get(c, c): Para cada carácter c en el texto, intenta obtener su reemplazo del diccionario reemplazos_acentos. Si el carácter está en el diccionario, se obtiene el valor de reemplazo; si no, se obtiene el carácter original.
      • ''.join(...): Une todos los caracteres resultantes en una nueva cadena llamada texto_sin_acentos, que ahora no contiene acentos ni la 'ñ'.
  5. texto_lower = texto_sin_acentos.lower():

    • Convertir a minúsculas:
      • texto.lower(): Convierte toda la cadena texto_sin_acentos a minúsculas para asegurar que el slug resultante esté en minúsculas.
  6. texto_slug = re.sub(r'[^\w\s-]', '', texto_lower).strip():

    • Reemplazar caracteres no alfanuméricos:
      • re.sub(r'[^\w\s-]', '', texto_lower): Utiliza una expresión regular para reemplazar cualquier carácter que no sea una letra (\w), un espacio en blanco (\s) o un guion (-) con una cadena vacía (eliminándolos).
      • .strip(): Elimina cualquier espacio en blanco al principio o al final de la cadena resultante.
  7. texto_slug = re.sub(r'[-\s]+', '-', texto_slug):

    • Reemplazar espacios con guiones:
      • re.sub(r'[-\s]+', '-', texto_slug): Reemplaza una o más ocurrencias consecutivas de guiones (-) o espacios en blanco (\s) con un solo guion (-).
  8. return texto_slug:

    • Devuelve la cadena texto_slug, que es la versión del texto original en formato slug.

Ejemplos de Uso:

Los ejemplos muestran cómo la función convierte diferentes cadenas de texto en español a su formato slug, manejando acentos (a través del diccionario de reemplazo), la 'ñ' (también a través del diccionario), caracteres especiales (que son eliminados) y múltiples espacios (que son reemplazados por un solo guion)