5.5 KiB
Zusatzblatt: Textanalyse [75 Punkte]
🎓 Benotetes Assignment 🎓
📆 Fällig: 06.01.2024 📆
In einem in Kanada abgestürzten Raumschiff der außerirdischen Kryptonier wurden militärische Dokumente entdeckt, die mit einem bisher unbekannten außerirdischen Programm verschlüsselt wurden. Nun soll eine irdische Software entwickelt werden, um die Texte zu entschlüsseln und so eine mögliche Invasion der Kryptonier aufzuhalten.
Der erste Schritt zum Knacken eines Codes besteht immer darin, die Häufigkeit von Buchstaben und Worten in durchschnittlichen Texten dieser Sprache zu kennen.
Da Sie noch nicht genau wissen, ob die kryptonische Sprache auf Zeichen oder Wörtern basiert, wollen Sie sowohl die Häufigkeit von Wörtern als auch von Buchstaben analysieren. Glücklicherweise ist eine große Menge von kryptonischen Schund- und Kriegsromanen gefunden worden, sodass diese als Basis für die Analyse dienen können.
Sie bekommen daher die Aufgabe eine Software zu entwickeln, die die kryptonischen Texte auf Wort- und Buchstabenhäufigkeiten hin untersucht. Da aber Ihr Sprachkurs für kryptonisch noch nicht abgeschlossen ist, testen Sie Ihre Software vorläufig mit irdischen Texten.
Entwickeln Sie eine Software zur Analyse von Wort- und Buchstabenhäufigkeiten in beliebigen Texten. Um diese Software wiederverwendbar und modular zu halten gehen Sie bitte wie im Folgenden beschrieben vor.
Hinweis: Verwenden Sie die Klassen aus dem Collections-API. Hierdurch können Sie den Aufwand für diese Aufgabe drastisch reduzieren. Machen Sie keine Casts, sondern verwenden Sie generischen Typen korrekt und typsicher.
TokenReader
Gehen Sie in das Paket pr2.collections.textanalyse.
Verwenden Sie den hier angegebenen speziellen Reader (TokenReader), der Ihnen über die readLineAsTokens die Möglichkeit gibt, beliebige Texte aus einem darunterliegenden Reader zu lesen und bereits zerlegt in einzelne Wörter auszulesen. D.h. die Verwenderin der Klasse TokenReader muss sich keine Gedanken darüber machen, wie sie den Text in einzelne Wörter zerlegt. Dieser spezielle Reader wandelt auch bereits alle gefundenen Wörter in Kleinbuchstaben um.
WortListe
Schreiben Sie eine Klasse WortListe, die die Verwaltung von Worthäufigkeiten übernimmt. Über eine Methode add(String wort) kann man Wörter hinzufügen. Die Klasse berechnet dann automatisch die Häufigkeiten und erlaubt es, die folgenden Informationen auszulesen:
- die absolute Häufigkeit eines bestimmten Wortes
- die relative Häufigkeit eines bestimmten Wortes
- die Anzahl aller gefundenen Wörter (d.h. inklusive Dubletten)
- die Anzahl unterschiedlicher Wörter (d.h. exklusive Dubletten)
Weiterhin soll WortListe es erlauben, über die gefundenen Worte mit einer foreach-Schleife zu iterieren, und zwar beginnend bei dem häufigsten Wort bis zum am wenigsten häufigsten Wort, d.h. die Klasse muss das Interface Iterable implementieren. Überlegen Sie sich, was der Iterator sinnvollerweise zurückgeben sollte, damit der Verwender der Klasse möglichst wenig Mühe hat.
Buchstabenliste
Schreiben Sie analog zu der vorhergehenden Klasse eine Klasse BuchstabenListe, die die Verwaltung von Buchstabenhäufigkeiten übernimmt. Über eine Methode add(String wort) kann man Wörter hinzufügen, die in ihre Buchstaben zerlegt und analysiert werden. Die Klasse berechnet dann automatisch die Häufigkeiten der Buchstaben und erlaubt es, die folgenden Informationen auszulesen:
- die absolute Häufigkeit eines bestimmten Buchstabens
- die relative Häufigkeit eines bestimmten Buchstabens
- die Anzahl aller gefundenen Buchstaben (d.h. inklusive Dubletten)
Textanalyse
Schreiben Sie ein Programm Textanalyse, das die oben beschriebenen Klassen nutzt, um beliebige Texte aus Textdateien zu analysieren. Der Name der zu analysierenden Textdatei wird auf der Kommandozeile angegeben. Das Programm lädt dann die Datei und analysiert sie entsprechend. Es gibt aus:
- den Namen der analysierten Datei
- die Anzahl der Wörter in der Datei
- die Anzahl unterschiedlicher Wörter in der Datei
- die 10 häufigsten Wörter (Rang, absolute Anzahl, prozentuale Häufigkeit und das Wort selbst)
- die Anzahl der Buchstaben in der Datei
- die 10 häufigsten Buchstaben (Rang, absolute Anzahl, prozentuale Häufigkeit und den Buchstaben selbst)
Eine Ausgabe des Werkzeugs sieht beispielsweise wie folgt aus:
Analyse der Datei kafka.txt
Wörter insgesamt: 2530
Unterschiedliche Wörter: 874
Rang - Anzahl (abs) - Häufigkeit (%) - Wort
1 - 80 - 3,16% - er
2 - 66 - 2,61% - sie
3 - 64 - 2,53% - und
4 - 59 - 2,33% - die
5 - 51 - 2,02% - der
6 - 46 - 1,82% - zu
7 - 45 - 1,78% - es
8 - 41 - 1,62% - nicht
9 - 38 - 1,50% - das
10 - 35 - 1,38% - in
Zeichen insgesamt: 12683
Rang - Anzahl (abs) - Häufigkeit (%) - Wort
1 - 2179 - 17,18% - e
2 - 1316 - 10,38% - n
3 - 990 - 7,81% - i
4 - 896 - 7,06% - r
5 - 827 - 6,52% - s
6 - 721 - 5,68% - t
7 - 704 - 5,55% - a
8 - 682 - 5,38% - h
9 - 594 - 4,68% - d
10 - 423 - 3,34% - c
Behandeln Sie bitte auch sinnvoll den Fall, dass die angegebene Datei nicht existiert oder der Verwender vergisst, den Dateinamen anzugeben.
TextAnalyse-Anwendung
Laden Sie sich den folgenden UTF-8 codierten Text herunter:
Analysieren Sie ihn mit dem oben beschriebenen Text-Analyse-Programm und geben Sie die Ausgabe als Teil Ihrer Ausarbeitung ab.