Verschiedene Wörter im Text

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Rubber1337
User
Beiträge: 5
Registriert: Dienstag 19. April 2016, 16:29

Hallo erstmal zusammen,
Ich bin ein Neueinsteiger in der Pythonprogrammierung.
Und zwar häng ich bei einer Übungsaufgabe fest.Es geht dabei um folgendes:
Ich habe ein Dokument (Text) welches nur aus wörtern besteht.
durch die funktion wordList.split() habe ich mir diesesn text in einzelne Wörter Zerlegt.
Mit len(wordList) konnt ich rausfinden wie viele worter der Text beinhaltet.
Jetzt will ich noch rausbekommen wie viel gleiche Wörter enthalten sind.
Mein Ansatz den Text mit ner for i in wordList die Liste zu durchlaufen um dann zum einen zu speichern und zu vergleichen, aber an dieser Stelle komme ich derZeit nicht weiter.
Vllt kann mir jdm. einen Weiteren Denkansatz bzw Punkt sagen in welche Richtung ich mich orientieren muss.
Greez
Rubber
BlackJack

@Rubber1337: Du suchst `collections.Counter`.

Namen schreibt man in Python üblicherweise klein_mit_unterstrichen und nicht mitGrossbuchstabenUmWorteZuTrennen. Ausnahme sind Klassen (MixedCase) und Konstanten (ALLES_GROSS).

Konkrete Grunddatentypen haben in Namen nichts verloren. Nenn die `wordList` einfach `words`. Es kommt öfter mal vor, dass man mit einem Grunddatentyp anfängt, beim Programmieren dann aber feststellt, dass man einen ähnlichen Typ, mit spezielleren Eigenschaften lieber verwenden möchte und dann entweder überall Namen ändern muss, oder falsche, irreführende Namen im Quelltext hat.
Rubber1337
User
Beiträge: 5
Registriert: Dienstag 19. April 2016, 16:29

Ok des sind schonmal gute infos die ich beachten sollte.
Bin jetzt soweit.

Code: Alles auswählen

        words = dokument.split()
	cnt = Counter()
	for word in words[]:
		cnt += 1 
	return cnt
Aber komm einfach nicht drauf in der Python dokomentation wird das fast genau so gemacht.
Zum einen kennt der Counter nicht(muss man den vllt imporieren anders inizialisieren) und zum anderen
dacht ich mir

Code: Alles auswählen

	cnt = Counter()
	for words in dokument[dokument.split()]:
		cnt += 1 
	return cnt
das des in Eckige Klammern mit muss.

Grüße
Rubber
Zuletzt geändert von Anonymous am Mittwoch 20. April 2016, 08:53, insgesamt 1-mal geändert.
Grund: Quelltext in Code-Tags gesetzt.
BlackJack

@Rubber1337: Das sieht mir jetzt sehr nach ”programmieren durch raten” aus. So funktioniert programmieren aber nicht, dass man sich Quelltext nimmt den man nicht versteht und dann solange herum rät wie man da irgend etwas ändert, bis es vielleicht das tut was man will. Erkläre doch mal jeden Teilausdruck von Deinem Code und was Du denkst was der als Ergebnis hat bzw. bewirkt, wie Du darauf kommst, und ob und wie Du überprüft hast, dass das tatsächlich so ist. Die interaktive Python-Shell ist da sehr praktisch zum ausprobieren und überprüfen.

Du sagst Du bist jetzt so weit, zeigst aber Code, der mit einer Ausnahme abbrechen wird, ohne das zu erwähnen. Das ist dann ja offensichtlich nicht richtig.

`Counter` ist nicht bekannt solange man es nicht importiert. Das Tutorial in der Python-Dokumentation erklärt das im Kapitel „Modules“.
Rubber1337
User
Beiträge: 5
Registriert: Dienstag 19. April 2016, 16:29

Code: Alles auswählen

anzahlDerWoerter(dokument)   //die funktion anzahlDerWoerter soll die Anzahl der wörter rausgeben und gibt ein dokument mit
 wort = dokument.split()          // zerteilt dokument in die wörter und speichert sie in wort
 anzahl = len(wort)                  //speichert die länge von wort in anzahl .. anzahl wird returnt
 return anzahl
das funktioniert schonmal .. ich baue das im Notepad++ und führe es auch dort immer aus Problem ist das ich oft die Fehler nicht verstehe.

Code: Alles auswählen

anzahlVerschiedenerWoerter(dokument)
 import Counter
 cnt = Counter()                             //Counter wird importiert und initialisiert
 for word in dokument.split[dokument]   
  cnt += 1                                      //durchlaufe das dokument und zähle counter hoch
 return cnt
Ja die zweite funktion bekomm ich nicht hin und hat zum teil wirklich was mit raten zu tun.
Eigtl müste sich das programm ja ein wort merken durchlaufen vergleichen löschen hochzählen. aber habe keine ahnung wie ich des anstellen soll
bzw wie ein einfacher lösungsweg ist
Zuletzt geändert von Anonymous am Mittwoch 20. April 2016, 14:46, insgesamt 1-mal geändert.
Grund: Quelltext in Code-Tags gesetzt.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Rubber1337 hat geschrieben:Eigtl müste sich das programm ja ein wort merken durchlaufen vergleichen löschen hochzählen. aber habe keine ahnung wie ich des anstellen soll bzw wie ein einfacher lösungsweg ist
Lesen der Dokumentation zu Counter hilft. Ein Counter zählt selber, da musst du nicht manuell dran herumfummeln.

Beispiel:

Code: Alles auswählen

>>> from collections import Counter
>>> c = Counter(['abc', 'de', 'f', 'de', 'gh'])
>>> c
Counter({'de': 2, 'abc': 1, 'f': 1, 'gh': 1})
BlackJack

@Rubber1337: Wie wär's wenn Du tatsächlich mal Python-Quelltext schreibst und nicht etwas was nur so ähnlich wie Python aussieht. Und wenn Du einen Fehler bekommst, den Du nicht verstehst, dann zeig den Quelltext und den Fehler inklusive Traceback. So wie die Kommunikation im Moment läuft bringt das nichts. Wir wissen nicht was Du tatsächlich machst und welche Fehler Du tatsächlich bekommst. Also kann man schlecht helfen.
Rubber1337
User
Beiträge: 5
Registriert: Dienstag 19. April 2016, 16:29

Der Fehler ist
TypeError: unhashable type: 'list'


meine funktion ist .. dokument wird ja mitgegeben.. \me hat mir in der tat geholfen aber dann müsste er mir doch so des ergebnis liefern.
Und ist das kein python code?

[Codebox=python file=Unbenannt.py]
from collections import Counter
words = dokument.split()
c = Counter([words])
return c
[/Codebox]

PS: bin in Woche 2 der Python programmierung erst angekommen.
BlackJack

@Rubber1337: Nein das ist kein Python-Code. Du bekommst bei dem gezeigten Quelltext eine andere Meldung und zwar bereits vom Compiler, bevor das überhaupt ausgeführt werden könnte. Zeig bitte den tatsächlichen Quelltext und den tatsächlichen Traceback, und den dann bitte auch komplett, und nicht nur die letzte Zeile.

Ausserdem könntest Du mal das was Du geschrieben hast, mit dem von /me vergleichen. Da ist ein Unterschied, der genau zu dem Fehler führt. Was übergibst Du denn `Counter`?
Rubber1337
User
Beiträge: 5
Registriert: Dienstag 19. April 2016, 16:29

War am ganzen falschen dampfer und habe es jetzt über eine Menge gemacht.

Des mit dem quellcode versteh ich net ganz..

dokument = dokument.replace(".", " ")
dokument = dokument.replace(",", " ")
dokument = dokument.upper()
dokument = dokument.split()
words_menge = set(dokument)

anzahl = len(words_menge)

return anzahl

Und klappt (:
Antworten