Textstatistik.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. # -*- coding: utf-8 -*-
  2. import sys
  3. import re
  4. import os
  5. import platform
  6. import collections
  7. Regex_Worte = "[a-zA-ZäüöÄÜÖß]+"
  8. Regex_Saetze = "[.!?][ \"\n\r\f]"
  9. count_min = 0
  10. count_max = 0
  11. count_mittel = 0.0
  12. count_liste = []
  13. woerterbuch = []
  14. # Loeschen des Bildschirms
  15. if platform.system() == 'Windows':
  16. os.system('cls')
  17. else:
  18. os.system('clear')
  19. # Erklaerung der Programmfunktion
  20. print("Text-Statistik")
  21. print("-" * 85)
  22. print("Die angegebene Datei wird auf die Anzahl von Sätzen und auf Worthäufigkeit analysiert.")
  23. print("-" * 85)
  24. print("\n")
  25. # Datei einlesen
  26. try:
  27. dateiname = raw_input("Name der zu analysierenden Datei: ")
  28. datei = open(dateiname)
  29. text = datei.read()
  30. datei.close()
  31. print("\n")
  32. except:
  33. print("Die angegebene Datei existiert leider nicht! Bitte Programm neu starten ...\n")
  34. sys.exit(0)
  35. # Anzahl der Worte in der Datei
  36. anzahl_worte = len(re.findall(Regex_Worte, text))
  37. # Anzahl der Sätze in der Datei - Problem: Ordnungszahlen, Punkt am Textende
  38. anzahl_saetze = len(re.findall(Regex_Saetze, text))
  39. # min., max. und mittlere Anzahl von Worten in einem Satz
  40. saetze = re.split(Regex_Saetze, text)
  41. for i in saetze:
  42. count_worte = len(re.findall(Regex_Worte, i))
  43. # sortierte Liste bilden, erstes und letztes Element = min und max
  44. if count_worte <> 0:
  45. count_liste.append(count_worte)
  46. count_liste.sort()
  47. count_min = count_liste[0]
  48. count_max = count_liste[len(count_liste)-1]
  49. count_mittel = "%.1f" % (float(anzahl_worte) / len(count_liste))
  50. # Häufigkeit von auftretenden Worten absteigend sortiert
  51. for i in saetze:
  52. i = i.replace("\n", "")
  53. i = i.replace(",", "")
  54. i = i.replace('"', "")
  55. i = i.replace("(", "")
  56. i = i.replace(")", "")
  57. i = i.replace(":", "")
  58. woerter = i.split(" ")
  59. woerterbuch = woerterbuch + woerter
  60. for i in woerterbuch:
  61. if not re.findall(Regex_Worte, i):
  62. woerterbuch.remove(i)
  63. woerterbuch = [i.lower() for i in woerterbuch]
  64. wordcount = collections.Counter(woerterbuch)
  65. # Ausgabe der Werte
  66. print("Ergebnis der Analyse:\n")
  67. print("Die Datei '" + dateiname + "' enthält " + str(anzahl_worte) +
  68. " Worte in " + str(anzahl_saetze) + " Sätzen. \n")
  69. print("Der kürzeste Satz besteht aus " + str(count_min) +
  70. " Worten und der längste Satz aus " + str(count_max) + " Worten.")
  71. print("Im Mittel habe die Sätze dieses Textes " +
  72. str(count_mittel) + " Worte. \n")
  73. print("Häufigkeit der Worte im Text: \n")
  74. # for key, value in wordcount.iteritems():
  75. # print('{0:>2}'.format(value) + " " + key)
  76. for key, value in sorted(wordcount.iteritems(), key=lambda (k, v): (v, k), reverse=True):
  77. print('{0:>4}'.format(value) + " " + key)
  78. print("\n\n-- Ende des Analyseberichts -- \n")