Python: obtenga la frecuencia de palabras en porcentaje

Dada una lista de strings, la tarea es escribir un programa en Python para obtener un porcentaje de participación de cada palabra en la lista de strings.

Explicación Computacional: (Ocurrencia de X palabra / Total de palabras) * 100.

Ejemplo:

Entrada: test_list = [“Gfg es mejor para geeks”, “All love Gfg”, “Gfg es mejor para CS”, “Para CS geeks Gfg es mejor”]

Output : {‘Gfg’: 0.21052631578947367, ‘is’: 0.15789473684210525, ‘best’: 0.15789473684210525, ‘for’: 0.10526315789473684, ‘geeks’: 0.10526315789473684, ‘All’: 0.05263157894736842, ‘love’: 0.05263157894736842, ‘CS’: 0.10526315789473684 , ‘Para’: 0.05263157894736842}

Explicación: Porcentaje de frecuencia de cada palabra wrt. se calculan todas las demás palabras de la lista. Gfg ocurre 4 veces. Palabras totales = 19. 

Entrada: test_list = [“Gfg es mejor para geeks”, “All love Gfg”]

Salida: {‘Gfg’: 0.25, ‘is’: 0.125, ‘best’: 0.125, ‘for’: 0.125, ‘geeks’: 0.125, ‘All’: 0.125, ‘love’: 0.125}

Explicación: Porcentaje de frecuencia de cada palabra wrt. se calculan todas las demás palabras de la lista.

Método #1: Usando sum() + Counter() + join() + split()

En esto, realizamos la tarea de obtener cada palabra usando split() después de unir cada string usando join(). Counter() obtiene la frecuencia de cada palabra asignada. Publique que el tamaño de todas las palabras calculado usando sum(), puede obtener la parte requerida de cada palabra, aprovechando la frecuencia almacenada en Counter.

Python3

# Python3 code to demonstrate working of
# Each word frequency percentage
# Using sum() + Counter()+ join() + split()
from collections import Counter
 
# initializing list
test_list = ["Gfg is best for geeks",
             "All love Gfg",
             "Gfg is best for CS",
             "For CS geeks Gfg is best"]
              
# printing original list
print("The original list is : " + str(test_list))
 
# concatenating using join
joined = " ".join(ele for ele in test_list)
 
# mapping using Counter()
mappd = Counter(joined.split())
 
# getting total using sum
total_val = sum(mappd.values())
 
# getting share of each word
res = {key: val / total_val for key,
       val in mappd.items()}
 
# printing result
print("Percentage share of each word : " + str(res))

Producción:

La lista original es: [‘Gfg es mejor para geeks’, ‘All love Gfg’, ‘Gfg es mejor para CS’, ‘For CS geeks Gfg is best’]

Percentage share of each word : {‘Gfg’: 0.21052631578947367, ‘is’: 0.15789473684210525, ‘best’: 0.15789473684210525, ‘for’: 0.10526315789473684, ‘geeks’: 0.10526315789473684, ‘All’: 0.05263157894736842, ‘love’: 0.05263157894736842, ‘ CS’: 0.10526315789473684, ‘Para’: 0.05263157894736842}

Método n.º 2: Usar una sola línea combinada 

Similar al método anterior, simplemente combinando cada segmento para proporcionar una solución compacta de una sola línea.

Python3

# Python3 code to demonstrate working of
# Each word frequency percentage
# Using combined one-liner
from collections import Counter
 
# initializing list
test_list = ["Gfg is best for geeks", "All love Gfg",
            "Gfg is best for CS", "For CS geeks Gfg is best"]
              
# printing original list
print("The original list is : " + str(test_list))
 
# mapping using Counter()
mappd = Counter(" ".join(ele for ele in test_list).split())
 
# getting share of each word
res = {key: val / sum(mappd.values()) for key,
       val in mappd.items()}
 
# printing result
print("Percentage share of each word : " + str(res))

Producción:

La lista original es: [‘Gfg es mejor para geeks’, ‘All love Gfg’, ‘Gfg es mejor para CS’, ‘For CS geeks Gfg is best’]

Percentage share of each word : {‘Gfg’: 0.21052631578947367, ‘is’: 0.15789473684210525, ‘best’: 0.15789473684210525, ‘for’: 0.10526315789473684, ‘geeks’: 0.10526315789473684, ‘All’: 0.05263157894736842, ‘love’: 0.05263157894736842, ‘ CS’: 0.10526315789473684, ‘Para’: 0.05263157894736842}7894736842}

La complejidad de tiempo y espacio de todos los métodos es la misma:

Complejidad de tiempo: O(n)

Espacio Auxiliar: O(n)

Método #3: Usando join(), split() y count()

Inicialmente, una todos los elementos de la lista por espacio, luego divida la string por espacio, lo que dará como resultado una lista. Ahora itere sobre una lista y verifique si el elemento ya está presente o no en las claves del diccionario. Si no está presente, agregue el elemento como clave para diccionario con ocurrencia de palabra dividida por la longitud de la lista como valor (nada más que porcentaje de frecuencia de palabra)

Python3

# Python3 code to demonstrate working of
# Each word frequency percentage
# Using count() and split()
 
# initializing list
test_list = ["Gfg is best for geeks",
            "All love Gfg",
            "Gfg is best for CS",
            "For CS geeks Gfg is best"]
             
# printing original list
print("The original list is : " + str(test_list))
 
# concatenating using join
joined = " ".join(ele for ele in test_list)
p=joined.split()
d=dict()
for i in p:
    if i not in d.keys():
        d[i]=p.count(i)/len(p)
 
# printing result
print("Percentage share of each word : " + str(d))
Producción

The original list is : ['Gfg is best for geeks', 'All love Gfg', 'Gfg is best for CS', 'For CS geeks Gfg is best']
Percentage share of each word : {'Gfg': 0.21052631578947367, 'is': 0.15789473684210525, 'best': 0.15789473684210525, 'for': 0.10526315789473684, 'geeks': 0.10526315789473684, 'All': 0.05263157894736842, 'love': 0.05263157894736842, 'CS': 0.10526315789473684, 'For': 0.05263157894736842}

Publicación traducida automáticamente

Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *