Mam dwie listy:
- lista około 750 000 „zdań” (długie ciągi)
- lista około 20 tys. „słów”, które chciałbym usunąć z moich 750 tys. zdań
Więc mam przejść przez 750 000 zdań i wykonać około 20 000 zamian, ale TYLKO wtedy, gdy moje słowa są w rzeczywistości „słowami” i nie są częścią większego ciągu znaków.
Robię to, wstępnie kompilując moje słowa, tak aby były otoczone przez metaznak określający granice słowa:
compiled_words = [re.compile(r"" + słowo + r"") dla słowa w my20000words]
Następnie przechodzę przez moje " zdania":
import re for sentencja w zdaniach: for word in skompilowane_słowa: sentencja = re.sub(word, „”, zdanie) # wstaw zdanie do rosnącego list
Ta zagnieżdżona pętla przetwarza około 50 zdań es na sekundę, co jest miłe, ale przetworzenie wszystkich moich zdań nadal zajmuje kilka godzin.
Czy istnieje sposób na użycie
str. metoda replace
(która moim zdaniem jest szybsza), ale nadal wymaga, aby zamiana następowała tylko na granicach słów?Alternatywnie, czy istnieje sposób na przyspieszenie metody
re.sub
? Poprawiłem już nieznacznie prędkość, pomijającre.sub
, jeśli długość mojego słowa to > niż długość mojego zdania, ale nie jest to duża poprawa.
Używam Pythona 3.5.2