05_Praktikum-2_Wortstatistik/Worthaeufigkeitsanalyse.java

89 lines
3.2 KiB
Java
Raw Permalink Normal View History

2021-10-28 17:16:26 +02:00
import java.io.File;
2019-09-12 08:04:33 +02:00
import java.util.HashMap;
2021-10-28 17:16:26 +02:00
import java.util.Iterator;
import java.util.Locale;
2019-09-12 08:04:33 +02:00
import java.util.Map;
2017-09-17 17:06:36 +02:00
/**
* Zaehlt die Anzahl Vorkommnisse von Woertern ueber mehrere Zeichenketten.
* Es lassen sich eine beliebige Anzahl an Zeichenketten uebergeben. Die
* Statistik wird fortlaufend gefuehrt. Die Wortzaehlung laesst sich jederzeit
* ausgeben. Die Satzeichen . , ? ! " : ; werden entfernt. Alle Buchstaben
* werden in Kleinbuchstaben umgewandelt um beispielsweise das Wort 'die'
* inmitten eines Satzes und das Wort 'Die' am Anfang eines Satzes als gleiches
* Wort werten zu koennen.
2019-09-12 08:04:33 +02:00
*
2017-09-17 17:06:36 +02:00
* @version 1.0
* @author XXXX
*/
public class Worthaeufigkeitsanalyse {
2019-09-12 08:04:33 +02:00
// Anstelle der Map dürfen Sie auch andere Datentypen verwenden. Testen Sie auch TreeMap.
private Map<String, Integer> woerterHaeufigkeit = new HashMap<>();
2021-10-28 17:16:26 +02:00
private Map<String, Integer> zeichenHaeufigkeit = new HashMap<>();
private String text = new String();
2019-09-12 08:04:33 +02:00
/**
* Nimmt die uebergebene Zeichenkette in die Worthaeufigkeitsanalyse auf.
*
* @param text zu verarbeitende Zeichenkette
*/
public void verarbeiteText(String text) {
2021-10-28 17:16:26 +02:00
2019-09-12 08:04:33 +02:00
// TODO Ihre Implementation
2021-10-28 17:16:26 +02:00
text = text.toLowerCase(Locale.ROOT);
analyseWorthaeufigkeit(text);
analyseZeichenhaeufigkeit(text);
}
private void analyseWorthaeufigkeit(String text) {
String[] woerter = text.split("[.,?!\":; ]+");
for(String wort : woerter)
if(woerterHaeufigkeit.containsKey(wort)) {
woerterHaeufigkeit.put(wort, woerterHaeufigkeit.get(wort) + 1);
}
else {
woerterHaeufigkeit.put(wort, 1);
}
}
private void analyseZeichenhaeufigkeit(String text) {
for(int i = 0; i<text.length(); i++){
if(zeichenHaeufigkeit.containsKey(text.substring(i, i+1))) {
zeichenHaeufigkeit.put(text.substring(i, i+1), zeichenHaeufigkeit.get(text.substring(i, i+1)) + 1);
}
else {
zeichenHaeufigkeit.put(text.substring(i, i+1), 1);
}
}
2019-09-12 08:04:33 +02:00
}
2017-09-17 17:06:36 +02:00
2019-09-12 08:04:33 +02:00
/**
* Ausgabe der Worthaeufigkeitsanalyse auf der Konsole.
*/
public void druckeStatistik() {
2021-10-28 17:16:26 +02:00
System.out.println("Worthäufigkeiten:");
2019-09-12 08:04:33 +02:00
for (Map.Entry<String, Integer> wortHaeufigkeit : woerterHaeufigkeit.entrySet()) {
System.out.printf("%3d %-40s%n", wortHaeufigkeit.getValue(), wortHaeufigkeit.getKey());
}
2021-10-28 17:16:26 +02:00
System.out.println("Zeichenhäufigkeiten:");
for (Map.Entry<String, Integer> zeichenHaeufigkeit : zeichenHaeufigkeit.entrySet()) {
System.out.printf("%3d %-40s%n", zeichenHaeufigkeit.getValue(), zeichenHaeufigkeit.getKey());
}
2019-09-12 08:04:33 +02:00
}
2017-09-17 17:06:36 +02:00
2021-10-28 17:16:26 +02:00
2019-09-12 08:04:33 +02:00
public static void main(String[] args) {
Worthaeufigkeitsanalyse hauefigkeitsanalyse = new Worthaeufigkeitsanalyse();
hauefigkeitsanalyse.verarbeiteText("Fritz sagt: \"Die Softwareentwicklung ist meine Leidenschaft!\"");
hauefigkeitsanalyse.verarbeiteText("Hans meint, er teile die Leidenschaft mit Fritz.");
hauefigkeitsanalyse.verarbeiteText("John fuegt hinzu, dass die Softwareentwicklung nicht nur aus Programmieren bestehe, sondern es sich dabei um einen komplexen Prozess, bestehend aus vielen kleinen Komponenten, handelt.\"");
hauefigkeitsanalyse.druckeStatistik();
2021-10-28 17:16:26 +02:00
2019-09-12 08:04:33 +02:00
}
2021-10-28 17:16:26 +02:00
2019-09-12 08:04:33 +02:00
}