Мне нужно быстро извлечь текст из файлов HTML. Я использую следующие регулярные выражения вместо полноценного парсера, поскольку мне нужно быть быстрым, а не точным (у меня больше, чем терабайт текста). Профилировщик показывает, что большую часть времени в моем сценарии тратится в процедуре re.sub. Каковы хорошие способы ускорить мой процесс? Я могу реализовать некоторые части в C, но мне интересно, поможет ли это, учитывая, что время проведено внутри re.sub, который, я думаю, будет эффективно реализован.Ускорение регулярных выражений в 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)
....
Спасибо!
Я уверен, приличный (X) HTML-парсер (или немного ручной синтаксический анализатор) выполняет регулярное выражение. –
похоже, что вы вызываете .sub() довольно много раз, если «текст» большой, будет гораздо эффективнее попытаться сделать то, что вам нужно в одном регулярном выражении. В вашем вопросе вы не уточнили, какое регулярное выражение медленное, вы имели в виду, что все они объединены медленными или есть индивидуальный, который особенно медленный? –
@Bart: Любая причина думать, что полный анализ будет быстрее, чем регулярное выражение? Любая причина думать, что ручной парсер будет превосходить тонко настроенную и оптимизированную библиотеку регулярных выражений? – Abhi