Мне иногда проще рег.выражениями (извиняюсь, но из головы могу их только в Perl-стиле писать):
1) удаляем скрипты и комментарии, типа:
r#<script.*?</script>##ig
r#<!--.*?--># #
2) удаляем все тэги
r#<[^>]+># #g
или все, кроме нужных:
r#</?(?!(?:h1|h2|...|strong))[^>]*?># #ig
П.с. я обычно еще перед этим собирал все в одну строку, и применял выражения с модификатором s ...а после - колдовал над пробелами.
П.с.с.
Если вы потом в nlp текст отдаете - там есть моменты с тем, что списки, например, могут не содержать точки в конце, и слепляя их в единый текст без пробелов - теряется понимание "конца предложения".