Acelere millones de reemplazos de expresiones regulares en Python 3

| | | | | | | | | | | | | |

Tengo dos listas:

  • una lista de alrededor de 750 000 "oraciones" (cadenas largas)
  • una lista de alrededor de 20 000 "palabras" que me gustaría eliminar de mis 750 000 oraciones

Entonces, tengo recorrer 750.000 frases y realizar unos 20.000 reemplazos, pero SOLO si mis palabras son realmente "palabras" y no forman parte de una cadena de caracteres más grande.

Hago esto compilando previamente mis palabras para que estén flanqueadas por el metacarácter de límite de palabra:

compiled_words = [re.compile(r"" + word + r"") for word in my20000words] 

Luego reviso mi " oraciones":

importar re para oración en oraciones: para palabra en palabras_compiladas: oración = re.sub(palabra, "", oración) # poner oración en una oración creciente list 

Este bucle anidado está procesando alrededor de 50 sentencias es por segundo, lo cual está bien, pero aun así me toma varias horas procesar todas mis oraciones.

  • ¿Hay alguna manera de usar el str. replace (que creo que es más rápido), pero aún requiere que los reemplazos solo ocurran en límites de palabras?

  • Alternativamente, ¿hay una forma de acelerar el método re.sub? Ya he mejorado marginalmente la velocidad saltándome re.sub si la longitud de mi palabra es > que la longitud de mi oración, pero no es una gran mejora.

Estoy usando Python 3.5.2