Versnel miljoenen regex-vervangingen in Python 3

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

Ik heb twee lijsten:

  • een lijst van ongeveer 750K "zinnen" (lange reeksen)
  • een lijst van ongeveer 20K "woorden" die ik zou willen verwijderen uit mijn 750.000 zinnen

Dus ik heb om 750.000 zinnen te doorlopen en ongeveer 20K vervangingen uit te voeren, maar ALLEEN als mijn woorden daadwerkelijk "woorden" zijn en geen deel uitmaken van een grotere reeks tekens.

Ik doe dit door mijn woorden vooraf te compileren zodat ze worden geflankeerd door de woordgrensmetateken:

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

Vervolgens loop ik door mijn " zinnen":

importeer re voor zin in zinnen: voor woord in gecompileerde_woorden: zin = re.sub(woord, "", zin) # zet zin in een groeiende list 

Deze geneste lus verwerkt ongeveer 50 zinnen es per seconde, wat leuk is, maar het duurt nog steeds enkele uren om al mijn zinnen te verwerken.

  • Is er een manier om de str. vervang-methode (die volgens mij sneller is), maar vereist nog steeds dat vervangingen alleen plaatsvinden bij woordgrenzen?

  • Als alternatief, is er een manier om de re.sub methode te versnellen? Ik heb de snelheid al iets verbeterd door re.sub over te slaan als de lengte van mijn woord > dan de lengte van mijn zin, maar het is niet echt een verbetering.

Ik gebruik Python 3.5.2