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à saltandore.sub
se la lunghezza della mia parola è > della lunghezza della mia frase, ma non è un gran miglioramento.
Sto usando Python 3.5.2