Cześć, mam napotkałem powyższy problem, googluje kilka dni i nie znalazłem sensownego rozwiązania ... Tak jak w pytaniu chodzi o policzenie ilości występowania poszczególnych tagów HTML w Stringu. A potem posortowania ich według ich częstości występowania. Na stackoverflow znalazłem coś takiego, taki parser wykorzystujący bibliotekę jsoup.
Map<String, Long> counts = new HashMap<>();
String html = " your html string goes here ";
Document doc = Jsoup.parse(html);
Elements elements = document.body().select("*");
recursiveWalk(elements, counts);
// your map here, sort it
// method to walk the document
private void recursiveWalk(List<Element> elements, Map<String, Long> counts) {
for (Element el : elements) {
String tag = el.tagName();
long number = counts.getOrDefault(tag, 0L) + 1;
counts.put(tag, number);
recursiveWalk(elements.children(), counts);
}
}
Problem z powyższym rozwiązaniem polega na tym, że jeśli zawartość strony zawiera jakąś nazwę znacznika, na przykład "div" albo "body" to również to jest liczone jako znacznik. Podczas gdy to stanowi tylko część jakiegoś zdania napisanego na stronie...
Będę wdzięczny za pomoc :)