Accélérez des millions de remplacements de regex dans Python 3

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

J'ai deux listes :

  • une liste d'environ 750 000 "phrases" (chaînes longues)
  • une liste d'environ 20 000 "mots" que j'aimerais supprimer de mes 750 000 phrases

Donc, j'ai pour parcourir 750 000 phrases et effectuer environ 20 000 remplacements, mais UNIQUEMENT si mes mots sont en réalité des "mots" et ne font pas partie d'une plus grande chaîne de caractères.

Je fais cela en pré-compilant mes mots afin qu'ils soient flanqués du métacaractère de limite de mot  :

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

Puis je parcoure mon " phrases" :

import re for phrase in sentences: for word in compiled_words: phrase = re.sub(word, "", sentence) # mettre la phrase dans un croissant list 

Cette boucle imbriquée traite environ 50 phrases es par seconde, ce qui est bien, mais il faut encore plusieurs heures pour traiter toutes mes phrases.

  • Existe-t-il un moyen d'utiliser le str. remplacer (qui, je pense, est plus rapide), mais nécessitant toujours que les remplacements ne se produisent qu'aux limites de mots ?

  • Alternativement, y a-t-il un moyen d'accélérer la méthode re.sub ? J'ai déjà légèrement amélioré la vitesse en sautant re.sub si la longueur de mon mot est > que la longueur de ma phrase, mais ce n'est pas vraiment une amélioration.

J'utilise Python 3.5.2