Liste von Nomen extrahieren

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
magi
User
Beiträge: 5
Registriert: Donnerstag 5. Mai 2011, 17:05

Hallo,
wie der Titel sagt, möchte ich aus einem Text eine Liste aller groß geschriebenen Wörter ausgeben. Wenn ich das mit folgendem Code probiere, dann stehen in der Ausgabe-Datei nur Chinesische Schriftzeichen. Woran kann das liegen?

Code: Alles auswählen

# coding=utf-8
from __future__ import division

import re 
import codecs

text = unicode(open("beispiel.txt","rU").read(),"utf-8")
tokens = text.split()

# Suchen aller Wörter, die mit einem Großbuchstaben beginnen
gross = re.compile(u"^[A-ZÖÄÜ]")

nomina = []

for i in range(0, len(text)):
    wort = text[i]
    if gross.search(wort):
        nomina.append(wort)

# Ausgabedatei öffnen
out = codecs.open('ausgabe.txt','w','utf-8')

# Alphabetisch sortierte Ausgabe
for nomen in nomina:
    print >> out, nomen
out.close()

Vielen Dank für eure Hilfe
BlackJack

@magi: Wie siehst Du Dir die Ausgabe denn an? Welche Kodierung wird dabei von der Software angenommen, mit der Du das anschaust? Kann es sein dass die einfach falsch rät weil da ungewöhnlicher Text in der Datei steht? Dein Programm schreibt da nämlich nur Grossbuchstaben in die Datei und keine Worte. Schau Dir mal im Programm an was Du da in der Schleife an `wort` bindest. Das ist sicher nicht das was Du wolltest. ;-)

Die Schleife geht nicht nur über die falschen Werte, sondern auch sehr ”unpythonisch” einen Umweg über einen Index. Wenn man ``for i in xrange(len(obj)):`` hat und das `i` dann nur für Indexzugriffe auf `obj` benutzt, will man 99,9% der Fälle eigentlich *direkt* über die Elemente von `obj` iterieren; ohne das unnötige `i`.

Die Schleife könnte man auch kompakter als ”list comprehension” schreiben.

Der Kommentar vor der Ausgabe ist wahrscheinlich: da wird nichts alphabetisch sortiert, die Ausgabe ist das also nur dann, wenn die Eingabe es schon war.

Statt der ``>>``-Syntax bei ``print`` würde ich an der Stelle eher die Methoden auf Dateiobjekten zum Schreiben der Daten empfehlen.

Dateien sollte man auch wieder schliessen. Das sicher zu stellen geht am einfachsten mit der ``with``-Anweisung.
Antworten