Przyspiesz miliony zamienników wyrażeń regularnych w Pythonie 3

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

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ąc re.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