Seite 1 von 1
Wörter zählen
Verfasst: Donnerstag 19. April 2018, 13:59
von kl.as
Hallo, ich habe eine Textdatei "Hallo Hallo wie geht es dir", bei welcher gezählt werden soll wie oft die Wörter vorkommen. Als Ergebnis möchte ich ein Dictionary in folgender Form:
{'Hallo': 2,
'wie': 1,
'geht': 1,
'es': 1,
'dir': 1}
Mein Code sieht folgender Maßen aus:
Code: Alles auswählen
result = {}
for f in files:
for line in read(f):
for word in line:
word = normalize(word)
counts = dict()
for word in normalize(word):
if word in counts:
counts[word]+=1
else:
counts[word]=1
return counts
return result
Ich bekomme als Ergebnis ein Dictionary das die einzelnen Buchstaben von nur einem Wort zählt, und finde den Fehler nicht.
Alle Variablen und Definitionen sind bereits definiert.
Danke für Hilfe!
Re: Wörter zählen
Verfasst: Donnerstag 19. April 2018, 14:02
von __deets__
Dein Problem ist, dass "for ding in string" nicht die Woerter iteriert, sondern - wie du schon festgestellt hast - die einzelnen Zeichen.
Was du brauchst ist "for wort in string.split()".
Re: Wörter zählen
Verfasst: Donnerstag 19. April 2018, 14:17
von kl.as
was meinst du mit "for ding in string" ? Ich werde nicht ganz schlau daraus :K
Re: Wörter zählen
Verfasst: Donnerstag 19. April 2018, 14:22
von __deets__
Das ist doch das was du tust. "for word in line" ist das gleiche.... :K Und das funktioniert ja nun offensichtlich nicht. Was du brauchst ist ein Weg, die Zeile aufzutrennen. Was mit "string.split()" geht. Was das genau tut kannst du ja mal in der Dokumentation nachsehen, dann wird dir auch klar, warum das funktioniert.
Re: Wörter zählen
Verfasst: Donnerstag 19. April 2018, 14:30
von Sirius3
@kl.as: Deine Funktion sieht noch etwas seltsam aus. `result` wird nicht verwendet, und bei zwei `return` wird auch nur das erste ausgeführt, weil dann die Funktion ja auch schon zum Aufrufer zurückkehrt. Du mußt Dein Problem in mehrere Teilstücke zerteilen und am besten das Ergebnis jedes Teilstücks in Listen speichern (später macht man das mit Generatoren):
1. Lesen der Dateien und aufspalten in Wörter (__deets__ hat ja schon erklärt, dass man das mit split macht)
2. Normalisieren der Wörter
3. Zählen der Wörter (dafür gibt es collections.Counter)
Re: Wörter zählen
Verfasst: Donnerstag 19. April 2018, 14:49
von kl.as
zu 1. das Lesen der der Datei und aufspalten des Textes (die Wörter sind alles einzelne Strings in einer Liste) habe ich mit read() bereits definiert und in einem anderen Teilstück des Codes gemacht.
zu 2. ebenso steht normalize() für die Funktion die die Wörter normalisiert (auch bereits definiert)
zu 3. das ist eben noch mein Problem bei welchem ich nicht weiterkomme

Re: Wörter zählen
Verfasst: Donnerstag 19. April 2018, 14:54
von Sirius3
@kl.as: dass die Funktionen bereits existieren, davon bin ich ausgegangen. Aber read liefert lines und nicht Wörter und die Weiterverarbeitung der Schritte 1 und 2 stimmt auch noch nicht.
Re: Wörter zählen
Verfasst: Donnerstag 19. April 2018, 15:00
von /me
kl.as hat geschrieben:Ich bekomme als Ergebnis ein Dictionary das die einzelnen Buchstaben von nur einem Wort zählt, und finde den Fehler nicht.
Du hast ja auch zu Beginn eine Schleifensammlung aus der im Endeffekt nur die letzte Zuweisung an word übrigbleibt. Ich gehe mal davon aus, dass das ein String ist. Mit "for word in normalize(word)" läufst du dann über jeden Buchstaben im Rückgabewert von normalize(word) und zählst den.
Warum würdest du denn ein anderes Ergebnis erwarten?
Re: Wörter zählen
Verfasst: Donnerstag 19. April 2018, 15:11
von /me
Sirius3 hat geschrieben:@kl.as: dass die Funktionen bereits existieren, davon bin ich ausgegangen. Aber read liefert lines und nicht Wörter und die Weiterverarbeitung der Schritte 1 und 2 stimmt auch noch nicht.
read ist vermutlich das da:
viewtopic.php?f=1&t=42417&p=323025#p323032
Ich habe so ein wenig den Eindruck, hier kopiert sich jemand ohne Python-Grundlagenwissen sein Programm aus Fragmenten zusammen. Dass das fehlschlägt ist kein Wunder.