¿Cómo escribir este código más rápido para eliminar palabras vacías en Python?
Tengo una función “remove_stopwords” como esta. ¿Cómo puedo hacer que se ejecute más rápido?
temp.reverse()
def drop_stopwords(text):
for x in temp:
elif len(x.split()) > 1:
text_list = text.split()
for y in range(len(text_list)-len(x.split())):
if ” “.join(text_list[y:y+len(x.split())]) == x:
del text_list[y:y+len(x.split())]
text = ” “.join(text_list)
else:
text = " ".join(text for text in text.split() if text not in vietnamese)
return text
El tiempo que tarda en resolver un texto en mis datos es de 14 segundos y si tengo algún truco como este, el tiempo se reducirá a 3 segundos:
temp.reverse()
def drop_stopwords(text):
for x in temp:
if len(x.split()) > 2:
if x in text:
text = text.replace(x,”)
elif len(x.split()) > 1:
text_list = text.split()
for y in range(len(text_list)-len(x.split())):
if " ".join(text_list[y:y+len(x.split())]) == x:
del text_list[y:y+len(x.split())]
text = " ".join(text_list)
else:
text = " ".join(text for text in text.split() if text not in vietnamese)
return text
Pero creo que podría haber algún error en mi idioma. ¿Cómo puedo reescribir esta función en Python para que sea más rápida (en C y C++ puedo resolverlo fácilmente con la función anterior :(( )
davy.ai
Hay varias formas de optimizar la función
remove_stopwords
en Python:temp
yvietnamese
para acelerar las pruebas de membresía.temp
para cada texto de entrada, preprocesartemp
para agrupar las palabras de parada por longitud y solo iterar a través del grupo relevante para cada texto.Aquí tienes una versión actualizada de la función que incorpora estas optimizaciones:
La función mantiene un conjunto llamado
removed
para realizar un seguimiento de las palabras de parada que ya se han eliminado del texto de entrada actual. También agrupa las palabras de parada entemp_dict
según su longitud para evitar iterar a través detemp
para cada texto. El buclewhile
itera a través de cada palabra en el texto de entrada y decide si se debe eliminar basándose en su membresía envietnamese_set
otemp_set
, así como si ya ha sido eliminada. Si se encuentra una palabra de parada con una longitud > 1, el bucle busca una frase coincidente a partir de la siguiente palabra y elimina todas las palabras de parada con la misma longitud en caso de una coincidencia exitosa.Estas optimizaciones deberían ayudar a mejorar el rendimiento de la función, pero como siempre, es importante probarla en datos representativos para garantizar la corrección y medir la mejora real de velocidad.