Seite 1 von 1

[Python] Wortdurchschnittlslänge errechenen.

Verfasst: 05.06.2011, 17:01
von no^mis
hey!

ich habe ne frage zu meinem code. Ich soll die Durchschnittslänge der Wörter eines Textes errechnen mit Python.

1. wieso tuts der join befehl nicht? der löscht mir die leerzeichen nicht, muss ich da was importieren?
2. wie kann ich mehrere verschiedene zeichen durch ein einzelnes zeichen ersetzen, ich habe eher ne drckige lösung dafür in meinem programm verwendet, funktioniert zwar auch, ist aber irre vieel schreibarbeit.

durch das nichtlöschen der leerzeichen werde ich vermutlich einen falschen durchschnittswert herausbekommen...

Der Code sieht wie folgt aus.

Code: Alles auswählen

#! /usr/bin/env python
# *-* coding:utf-8 *-*

from re import sub,findall,DOTALL

text=""""Dies ist ein simpler Beispieltext zur Errrechnung der Durchschnittslänge eines Wortes in einem beliebigen Text."""

text_bereinigt=text.replace(",","").replace(",","").replace(".","").replace(";","").replace(":","").replace("'","").replace("!","").replace("?","")

wortanzahl=text_bereinigt.split()
wert_wortanzahl=float(len(wortanzahl))

zeichenanzahl="".join(text_bereinigt)
wert_zeichenanzahl=float(len(zeichenanzahl))

durchschnittswort=float(wert_zeichenanzahl/len(wortanzahl))

print "Der Text hat folgende Eigenschaften: \n\n",int(wert_wortanzahl)," Wörter \n",int(wert_zeichenanzahl)," Zeichen \n","Das Durchschnittswort hat",durchschnittswort," Zeichen."
Ahja und weiss einer, wie man den Zeilenumbruch bei IDLE für Mac aktiviert? Mein Beispieltext ist um einiges länger.

Danke!

Verfasst: 05.06.2011, 17:26
von xxx
1) Du splittest auf wortanzahl aber joinst auf text_bereinigt. D.h. der join sollte auf wortanzahl sein

2) Dafür kannst du dicts nutzen:

Code: Alles auswählen


woerter_dict = {"ae": "a", "ue": "u"}
text = "Das ist ein suesser Taeter"

for k, v in woerter_dict.iteritems():
    text = text.replace(k, v)

>>> Das ist ein susser Tater

Generell kannst du dir viel Code sparen, wenn bisschen mit List-Comprehensions arbeitest:

Code: Alles auswählen

word_count = [len(x) for x in text.split()]
average = sum(word_count) / float(len(word_count))

Verfasst: 05.06.2011, 21:56
von no^mis
ach super, ich bin auch ein idiot ey. ja ich muss mir dieses listending nochmal genauer anschauen, bin noch totaler newbie. aber danke!