Anteil eines Buches

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
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Guten Abend

Ich habe eine simple Frage: Wie kann ich zB 20% eines nltk-Buches extrahieren?
Ich dachte an sowas, aber das scheint nicht zu klappen, wegen dem Index:

Code: Alles auswählen

def percentage(liste, prozent):
  nr = 0
  for line in liste:
    nr += 1
  anteil = (nr/100)*prozent #bis hier ok
  txt = liste[0:anteil] # ich möchte den Textanteil so haben, dass ich ihn nachher gut weiterverarbeiten kann (am besten nicht in einer Liste...)
  for word in txt:
    print word # do something
Danke,
Marcel
Zuletzt geändert von Anonymous am Freitag 23. November 2012, 10:21, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@MarcelF6: *Hust*, schau Dir mal bitte die `len()`-Funktion an.

Was klappt denn an dem Index nicht? Explodiert der Rechner? Bekommst Du ein unerwartetes Ergebnis? Falls ja, worin unterscheidet es sich vom Erwarteten?
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Ah, also

anteil = (len(liste)/100)*prozent

Aber: Bei der Weiterverarbeitung kommt weiterhin die Fehlermeldung:
"slice indices must be integers or None or have an __index__ method"
Ich sollte den Textanteil wohl besser nicht in Listenform (d.h. jedes Wort als Listeneintrag) haben, oder?
Wie ist das möglich?
(oder wie wäre sonst eine Weiterverarbeitung möglich, anstelle von: for word in txt ?)

Danke,
Marcel
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Die Fehlermeldung ist doch recht eindeutig:
Wenn du slicen willst müssen die benutzten Werte Integer oder None sein (oder eine Klasse die eine __index__-Methode hat).
0 ist offensichtlich ein Integer, aber was ist anteil?
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

sparrow hat geschrieben:0 ist offensichtlich ein Integer, aber was ist anteil?
Bzw: Welche Typen kann ``anteil`` abhängig vom gegebenen ``prozent`` wohl annehmen...?

Und wenn wir schon dabei sind: Es ist schon klar, dass `(len(liste) / 100)` potenziell zu einem ungenauen Ergebnis führt (Stichwort: Integer-Division)?
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Ich bin gerade nicht an meinem Computer, aber meint ihr also, dass es mit int(anteil) in der eckigen Klammer klappen sollte?
Bezüglich Division: Da hab' ich schon dran gedacht, die Division aus __future__ zu importieren; keine Angst :)
(alternative hätte ich auch ein Punkt oder 'float' setzen können...)
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

MarcelF6 hat geschrieben: Bezüglich Division: Da hab' ich schon dran gedacht, die Division aus __future__ zu importieren; keine Angst :)
Tja, was soll man sagen. Hättest du es nicht gemacht, hätte es funktioniert ;)
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Haha Ironie des Schicksals :P
Aber ist das Ergenis so nicht ungenau? (ok, Kommastellen wären sowieso unbrauchbar...)
Werde es später dann gleich testen ;)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

der Weg der ganzen Zahlen mit Rundung:

Code: Alles auswählen

anteil = (len(liste)*prozent+50)//100
MarcelF6
User
Beiträge: 226
Registriert: Samstag 3. März 2012, 21:30

Wieso "+50", wenn ich fragen darf?
Antworten