En el post de hoy vamos a ver un algoritmo con Python para contar las ocurrencias de una palabra en una oración (cantidad de veces que se repite la palabra) o cadena sin usar split
ni count
, además de que no va a importar si la cadena no tiene espacios.
Con el código Python expuesto aquí vas a aprender a contar la cantidad de palabras en un string con la opción de encontrar solo coincidencias completas.
Recuerda que ya anteriormente te enseñé a hacerlo con split y luego incluso contamos el porcentaje.
Explicación del algoritmo
Nota: aquí hay un vídeo explicando esto con más detalles https://youtu.be/dfKpwMvxJVY
Tenemos 2 cosas: la palabra buscada y la cadena en donde vamos a buscar. Debemos devolver la cantidad de veces que la palabra se encuentra en la cadena.
Lo que haremos será recorrer la cadena usando índices numéricos, es decir, desde el 0 hasta la longitud de la cadena menos 1.
En cada recorrido de índice, vamos a cortar la cadena desde el índice hasta el índice + longitud de la palabra buscada
para extraer un fragmento.
Lo que estamos haciendo es ir letra por letra buscando la palabra gracias a ese fragmento. Ahora solo resta comparar ese fragmento con la palabra buscada y aumentar el contador.
Al final no vamos a usar ninguna función de Python, además de len
(que igualmente puede ser reemplazada por una función propia).
Función en Python
Una vez explicado el algoritmo, veamos la función. Este método recibe la palabra buscada, la cadena y una bandera indicando si solo debe buscar coincidencias completas.
Esta última bandera sirve para saltar al final del fragmento cada que se encuentra una coincidencia. Al ejecutar el código verás a lo que me refiero.
def conteo_palabras(palabra_buscada, cadena, solo_coincidencias_completas=False):
# Si no se puede usar len, usa: https://parzibyte.me/blog/2019/07/03/python-longitud-cadena-lista-sin-len/
longitud_palabra_buscada = len(palabra_buscada)
conteo = 0
indice = 0
while indice < len(cadena)-longitud_palabra_buscada+1:
fragmento = cadena[indice:indice+longitud_palabra_buscada]
# Lo siguiente solo es para depurar
print(f"'{fragmento}'", end=",")
if fragmento == palabra_buscada:
conteo += 1
if solo_coincidencias_completas:
indice += longitud_palabra_buscada
else:
indice += 1
else:
indice += 1
return conteo
cadena = "askakanasindsananadsjsdanana"
busqueda = "ana"
conteo_completo = conteo_palabras(busqueda, cadena, False)
print("")
conteo_saltando = conteo_palabras(busqueda, cadena, True)
print(
f"\nAl buscar {busqueda} en {cadena} el conteo completo es {conteo_completo}, saltando es {conteo_saltando}")
Al ejecutar el código del ejemplo tenemos la siguiente salida:
Si te fijas, cuando saltamos al final del fragmento al encontrar la búsqueda, el conteo es 3 porque no permite que la búsqueda sea parte de otra coincidencia, mientras que cuando permitimos que las palabras estén combinadas el conteo es 5.
Obviamente tú puedes cambiar la búsqueda y la cadena en donde se va a buscar.
Como puedes ver, no usamos la función count ni split de Python, todo lo hicimos con un algoritmo manual.
Así es como podemos encontrar la cantidad de veces que una palabra se repite en una cadena con Python.