Python :: Aufgabe #136

2 Lösungen Lösungen öffentlich

Wörterzählen in Textdateien

Anfänger - Python von hollst - 23.12.2016 um 09:50 Uhr
Man schreibe ein Programm, das bei einer beliebigen Textdatei (ASCII)

a) alle Wörter und
b) alle unterschiedlichen Wörter der Längen 1, 2, 3 ... zählt, wobei zwischen Groß- und Kleinbuchstaben nicht zu unterscheiden sei.

Als Wörter-Trennzeichen sind zu verwenden:

a) alle Sonderzeichen (' ', '.', ',', tab ...) sowie Zahlen (0, 1 ... 9) und
b) alle Chars, die nicht zum Aphabet (abc...xyzäöü) gehören (damit wäre a) bereits automatisch erfüllt).

Anmerkungen:
a) Es gibt auch im Deutschen Wörter der Länge 1, z. B. in "a tempo" oder " a priori" oder bei Abkürzungen ("z. B.").
b) Als Beispieltext kann von hier die komplette Bibelausgabe nach Martin Luther 1912 als ASCII-Datei heruntergeladen und verwendet werden (ist mit 4 MB zu lang als Anhang hier, selbst als *.rar noch ca. 1.2 MB).

Viel Spaß und schöne Weihnachten sowie einen guten Rutsch und Start in 2017.

Lösungen:

vote_ok
von ZRX88 (2770 Punkte) - 29.12.2016 um 20:12 Uhr
Programm erfüllt nur Wortertrennung a. Für ideen wie man es ohne die reg-expression macht wäre ich dankbar.

Quellcode ausblenden Python-Code
# count words in textfiles\

import os
import re
from collections import Counter

path = 'C:\Users\Robert\Desktop'
file_name = 'Luther.txt'

os.chdir(path)
word_list = []

with open(file_name,'rb') as f:
    for row in f:
        for word in re.split('(,|\.|-|:|\r|\n|\t|\?|\!| |[0-9]{1})',str(row.lower())):
            if re.search('[a-z]',word):
                word_list.append(word)

List = Counter(word_list)

word_length =[]
for elems in List.keys():
    word_length.append(len(elems))
print(List)
print(Counter(word_length))
vote_ok
von Gisbert5020 (3120 Punkte) - 12.02.2019 um 20:42 Uhr
Quellcode ausblenden Python-Code
import re

datei = open("datei.txt", encoding ="utf8").read().lower()
woerter = list(re.findall(r"\b([a-z,ä,ö,ü,ß,']+)\b", datei))
wort_anzahl={}

for wort in woerter:
    l = len(wort)
    if l in wort_anzahl:
        wort_anzahl[l] +=1
    else:
        wort_anzahl[l] = 1
print("   Alle Wörter")
print("Wortlänge   Anzahl")
wort_anzahl_liste = list(wort_anzahl.items())
for (wl,anz) in sorted(wort_anzahl_liste):
    print(" {0:8d} {1:8d}".format(wl,anz))

wort_anzahl={}
woerters = set(woerter)
for wort in woerters:
    l = len(wort)
    if l in wort_anzahl:
        wort_anzahl[l] +=1
    else:
        wort_anzahl[l] = 1
print("Alle unterschiedlichen Wörter")
print("Wortlänge   Anzahl")
wort_anzahl_liste = list(wort_anzahl.items())
for (wl,anz) in sorted(wort_anzahl_liste):
    print(" {0:8d} {1:8d}".format(wl,anz))