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 sautantre.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