Acelere milhões de substituições de regex no Python 3

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

Tenho duas listas:

  • uma lista de cerca de 750 mil "frases" (sequências longas)
  • uma lista de cerca de 20 mil "palavras" que eu gostaria de excluir das minhas 750 mil frases

Então, eu tenho para percorrer 750 mil frases e realizar cerca de 20 mil substituições, mas SOMENTE se minhas palavras forem realmente "palavras" e não fizerem parte de uma sequência maior de caracteres.

Estou fazendo isso pré-compilando minhas palavras para que elas sejam flanqueadas pelo metacaractere de limite de palavra :

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

Então eu percorro meu " sentenças":

import re para sentença em sentenças: para palavra em palavras_compiladas: sentença = re.sub(palavra, "", sentença) # coloque a sentença em um crescente list 

Este loop aninhado está processando cerca de 50 sentenças es por segundo, o que é bom, mas ainda leva várias horas para processar todas as minhas frases.

  • Existe uma maneira de usar o str. replace (que acredito ser mais rápido), mas ainda exigindo que as substituições ocorram apenas em limites de palavras?

  • Como alternativa, existe uma maneira de acelerar o método re.sub? Já melhorei a velocidade marginalmente pulando re.sub se o tamanho da minha palavra for > do que o comprimento da minha frase, mas não é uma grande melhoria.

Estou usando o Python 3.5.2