J'ai besoin d'extraire rapidement du texte à partir de fichiers HTML. J'utilise les expressions régulières suivantes au lieu d'un analyseur à part entière puisque je dois être rapide plutôt que précis (j'ai plus d'un téraoctet de texte). Le profileur montre que la plupart du temps dans mon script est passé dans la procédure re.sub. Quels sont les bons moyens d'accélérer mon processus? Je peux implémenter certaines portions en C, mais je me demande si cela va aider étant donné que le temps est passé à l'intérieur re.sub, qui je pense serait implémenté efficacement.Accélération des expressions régulières en Python
# Remove scripts, styles, tags, entities, and extraneous spaces:
scriptRx = re.compile("<script.*?/script>", re.I)
styleRx = re.compile("<style.*?/style>", re.I)
tagsRx = re.compile("<[!/]?[a-zA-Z-]+[^<>]*>")
entitiesRx = re.compile("&[0-9a-zA-Z]+;")
spacesRx = re.compile("\s{2,}")
....
text = scriptRx.sub(" ", text)
text = styleRx.sub(" ", text)
....
Merci!
Je suis assez sûr un analyseur html décent (x) (ou un peu parseur fait à la main) surpasse regex. –
Il semble que vous appeliez .sub() plusieurs fois, si "texte" est grand, il sera beaucoup plus efficace d'essayer de faire ce dont vous avez besoin dans une regex. Dans votre question, vous n'avez pas précisé quelle regex est lente, est-ce que vous vouliez dire que toutes les combinaisons sont lentes, ou y en a-t-il une qui soit particulièrement lente? –
@Bart: Une raison de penser faire une analyse complète sera plus rapide que regex? Toute raison de penser qu'un analyseur fait à la main surpassera une bibliothèque regex optimisée et optimisée? – Abhi