Accelera milioni di sostituzioni di espressioni regolari in Python 3

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

Ho due elenchi:

  • un elenco di circa 750.000 "frasi" (stringhe lunghe)
  • un elenco di circa 20.000 "parole" che vorrei eliminare dalle mie 750.000 frasi

Quindi, ho per scorrere 750.000 frasi ed eseguire circa 20.000 sostituzioni, ma SOLO se le mie parole sono effettivamente "parole" e non fanno parte di una stringa di caratteri più ampia.

Lo sto facendo precompilando le mie parole in modo che siano affiancate dal metacarattere del confine di parola :

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

Quindi eseguo il mio " frasi":

import re per la frase nelle frasi: per la parola nelle parole_compilate: frase = re.sub(parola, "", frase) # inserisce la frase in una frase in crescita list 

Questo ciclo annidato sta elaborando circa 50 frasi es al secondo, il che è carino, ma ci vogliono ancora diverse ore per elaborare tutte le mie frasi.

  • C'è un modo per usare il str. replace metodo (che credo sia più veloce), ma richiede comunque che le sostituzioni avvengano solo ai limiti delle parole?

  • In alternativa, c'è un modo per velocizzare il metodo re.sub? Ho già leggermente migliorato la velocità saltando re.sub se la lunghezza della mia parola è > della lunghezza della mia frase, ma non è un gran miglioramento.

Sto usando Python 3.5.2