# -*- coding: utf-8 -*- import sys import re import os import platform import collections Regex_Worte = "[a-zA-ZäüöÄÜÖß]+" Regex_Saetze = "[.!?][ \"\n\r\f]" count_min = 0 count_max = 0 count_mittel = 0.0 count_liste = [] woerterbuch = [] # Loeschen des Bildschirms if platform.system() == 'Windows': os.system('cls') else: os.system('clear') # Erklaerung der Programmfunktion print("Text-Statistik") print("-" * 85) print("Die angegebene Datei wird auf die Anzahl von Sätzen und auf Worthäufigkeit analysiert.") print("-" * 85) print("\n") # Datei einlesen try: dateiname = raw_input("Name der zu analysierenden Datei: ") datei = open(dateiname) text = datei.read() datei.close() print("\n") except: print("Die angegebene Datei existiert leider nicht! Bitte Programm neu starten ...\n") sys.exit(0) # Anzahl der Worte in der Datei anzahl_worte = len(re.findall(Regex_Worte, text)) # Anzahl der Sätze in der Datei - Problem: Ordnungszahlen, Punkt am Textende anzahl_saetze = len(re.findall(Regex_Saetze, text)) # min., max. und mittlere Anzahl von Worten in einem Satz saetze = re.split(Regex_Saetze, text) for i in saetze: count_worte = len(re.findall(Regex_Worte, i)) # sortierte Liste bilden, erstes und letztes Element = min und max if count_worte <> 0: count_liste.append(count_worte) count_liste.sort() count_min = count_liste[0] count_max = count_liste[len(count_liste)-1] count_mittel = "%.1f" % (float(anzahl_worte) / len(count_liste)) # Häufigkeit von auftretenden Worten absteigend sortiert for i in saetze: i = i.replace("\n", "") i = i.replace(",", "") i = i.replace('"', "") i = i.replace("(", "") i = i.replace(")", "") i = i.replace(":", "") woerter = i.split(" ") woerterbuch = woerterbuch + woerter for i in woerterbuch: if not re.findall(Regex_Worte, i): woerterbuch.remove(i) woerterbuch = [i.lower() for i in woerterbuch] wordcount = collections.Counter(woerterbuch) # Ausgabe der Werte print("Ergebnis der Analyse:\n") print("Die Datei '" + dateiname + "' enthält " + str(anzahl_worte) + " Worte in " + str(anzahl_saetze) + " Sätzen. \n") print("Der kürzeste Satz besteht aus " + str(count_min) + " Worten und der längste Satz aus " + str(count_max) + " Worten.") print("Im Mittel habe die Sätze dieses Textes " + str(count_mittel) + " Worte. \n") print("Häufigkeit der Worte im Text: \n") # for key, value in wordcount.iteritems(): # print('{0:>2}'.format(value) + " " + key) for key, value in sorted(wordcount.iteritems(), key=lambda (k, v): (v, k), reverse=True): print('{0:>4}'.format(value) + " " + key) print("\n\n-- Ende des Analyseberichts -- \n")