123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- # -*- 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")
|