Beschleunigen Sie Millionen von Regex-Ersetzungen in Python 3

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

Ich habe zwei Listen:

  • eine Liste mit etwa 750.000 "Sätzen" (lange Zeichenfolgen)
  • eine Liste mit ungefähr 20.000 "Wörtern", die ich aus meinen 750.000 Sätzen löschen möchte

Also, ich habe sie um 750.000 Sätze zu durchlaufen und etwa 20.000 Ersetzungen durchzuführen, aber NUR, wenn meine Wörter tatsächlich "Wörter" und nicht Teil einer größeren Zeichenfolge sind.

Ich tue dies, indem ich meine Wörter so vorkompiliere, dass sie von dem -Wortgrenzen-Metazeichen flankiert werden:

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

Dann durchlaufe ich meine " Sätze":

re für Satz in Sätze importieren: für Wort in compilierte_Wörter: Satz = re.sub(Wort, "", Satz) # Satz in einen wachsenden setzen list 

Diese verschachtelte Schleife verarbeitet etwa 50 Sätze es pro Sekunde, was schön ist, aber es dauert immer noch mehrere Stunden, um alle meine Sätze zu verarbeiten.

  • Gibt es eine Möglichkeit, die str. replace-Methode (die meiner Meinung nach schneller ist), aber immer noch verlangt, dass Ersetzungen nur an Wortgrenzen erfolgen?

  • Alternativ, gibt es eine Möglichkeit, die re.sub-Methode zu beschleunigen? Ich habe die Geschwindigkeit bereits geringfügig verbessert, indem ich re.sub übersprungen habe, wenn die Länge meines Wortes > als die Länge meines Satzes, aber es ist keine große Verbesserung.

Ich verwende Python 3.5.2