Vielen Dank für eure Antworten!
Als technikaffiner, aber nicht programmierfähiger User bin ich ein wenig überwältigt, dass es für diese - für mich relativ naheliegende - Funktionalität keinen automatisierten Mechanismus gibt.
Da ich momentan in einer Linux-Distribution unterwegs bin, habe ich inzwischen mit pdftotext den Inhalt meines PDF in eine Textdatei extrahiert. Trotz folgender Syntax Warning hat die Maßnahme augenscheinlich funktioniert. Es wurde auf jeden Fall eine test.txt angelegt, die auch korrekt und vollständig eingelesen zu sein scheint:
Code:
louisxiv@pc:~/Dokumente> pdftotext /home/louisxiv/Dokumente/test.pdf /home/louisxiv/Dokumente/test.txt
Syntax Warning: Invalid Font Weight
Da ich den von
@KuestenNebel verlinkten Python-Code leider weder verstehe, noch weiß, wie ich ihn überhaupt ausführe, hat man mir in meiner Linux-Community zu einem bash-Skript nach folgender Vorlage geraten:
https://unix.stackexchange.com/questions/41479/find-n-most-frequent-words-in-a-file
Dabei habe ich zuerst den Code des Threaderstellers genutzt, wobei dieser eine Ausgabe produziert, deren Inhalt sich mir nicht erschließt:
Code:
cat test.txt | tr -c '[:alnum:]' '[\n*]' | uniq -c | sort -nr | head -3
183
177
173
Also habe ich den Hinweis der am besten bewerteten Antwort integriert und ein "sort" eingefügt, was bereits deutlich bessere Ergebnisse gebracht hat:
Code:
cat test.txt | tr -c '[:alnum:]' '[\n*]' | sort | uniq -c | sort -nr | head -3
33449
2038 und
1757 die
Das gleiche Ergebnis ergibt sich übrigens auch aus der alternativen Form des Codes:
Code:
tr -c '[:alnum:]' '[\n*]' < test.txt | sort | uniq -c | sort -nr | head -3
Problematisch ist, dass die vom Code verlangte von "tr" zu interpretierende Zeichenmenge nicht mit deutschen Sonderzeichen wie Umlauten zurecht kommt. Die Worte werden an den Stellen der Sonderzeichen abgehakt und verfälschen das Wortzählergebnis.
Nach einem Blick in "tr --help" habe ich es abgesehen von "alnum" auch mit "graph" versucht, leider ohne Erfolg.
Code:
tr --help
Aufruf: tr [OPTION]… MENGE1 [MENGE2]
Zeichen bei Ausgabe auf Standardeingabe wandeln, verdichten und/oder löschen
-c, -C, --complement das Komplement von MENGE1 verwenden
-d, --delete Zeichen der MENGE1 löschen, nicht wandeln
-s, --squeeze-repeats jede Eingabefolge eines wiederholten Zeichens, das
in MENGE1 enthalten ist, durch ein einzelnes
Vorkommens dieses Zeichens ersetzen
-t, --truncate-set1 zuerst MENGE1 auf die Länge von MENGE2 abschneiden
--help diese Hilfe anzeigen und beenden
--version Versionsinformation anzeigen und beenden
MENGEn werden angegeben als Zeichenketten. Die meisten Zeichen stehen für sich
selbst. Interpretierte Folgen sind:
\NNN Zeichen mit Oktalwert NNN (1 bis 3 oktale Ziffern)
\\ Rückschrägstrich (\)
\a hörbarer Ton (Piep)
\b Zeichen zurück
\f Seitenvorschub
\n Zeilenvorschub
\r Wagenrücklauf
\t horizontaler Tabulator
\v vertikaler Tabulator
ZEICH1-ZEICH2 alle Zeichen von ZEICH1 bis ZEICH2 aufsteigend
[ZEICH*] in MENGE2, Kopien von ZEICH bis zur Länge von MENGE1
[ZEICH*ANZ] ANZ Kopien von ZEICHEN, ANZ ist oktal, wenn es mit 0 beginnt
[:alnum:] alle Buchstaben und Ziffern
[:alpha:] alle Buchstaben
[:blank:] alle horizontalen Leerzeichen/Tabulatoren
[:cntrl:] alle Steuerzeichen
[:digit:] alle Ziffern
[:graph:] alle druckbaren Zeichen, ohne Leerzeichen
[:lower:] alle Kleinbuchstaben
[:print:] alle druckbaren Zeichen, einschl. Leerzeichen
[:punct:] alle Satzzeichen
[:space:] alle horizontalen oder vertikalen Leerzeichen/Tabulatoren
[:upper:] alle Großbuchstaben
[:xdigit:] alle hexadezimalen Ziffern
[=ZEICHEN=] alle Zeichen äquivalent zu ZEICHEN
Also habe ich es mit Hilfe einer Unicode-Tabelle mit einer Zeichenmenge ZEICH1-ZEICH2 von A bis ω versucht, da mir diese als unsaubere, aber für wissenschaftliche Texte praktikable Lösung erschien:
Code:
tr -c 'A-ω' '[\n*]' < test.txt | sort | uniq -c | sort -nr | head -3
Tatsächlich sind Umlaute damit kein Problem mehr, die nicht erkannten Einträge und abgehakten Worte halten sich in Grenzen. Dennoch würde ich gerne eine elegantere Lösung für die Zeichenmenge finden. Jemand eine Idee?
Weiterhin erkennt man an 33449 Einträgen "", 2038 "und" sowie 1757 "die", dass die Ergebnisliste durch viele für mich inhaltlich irrelevante Einträge sehr aufgeblasen ist.
Der Autor der populärsten Antwort im geteilten Link adressiert dies durch das Einbinden einer "stop words"-Liste "eign".
Code:
tr -c '[:alnum:]' '[\n*]' < test.txt | fgrep -v -w -f /usr/share/groff/current/eign | sort | uniq -c | sort -nr | head -3
Diese liegt in meiner Distribution jedoch leider nicht einmal in Englisch vor. Habt ihr einen Hinweis, wo es seriöse solcher Listen für Englisch und Deutsch herunterzuladen gibt und/oder wie ich nur Einträge mit größergleich 4 Zeichen anzeigen lassen kann?