lexicon aus einzelzeichen erstellen

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
ssulger
User
Beiträge: 3
Registriert: Sonntag 2. Dezember 2007, 20:10

hallo liebe python-gemeinde,
ich hätte da mal eine frage bezüglich der funktion lexicon(). wir möchten ein programm so modifizieren, dass es anstelle von worttokens/worttypes zeichentokens/zeichentypes in ein lexikon einliest. wir sind bis hierher gekommen:

Code: Alles auswählen

# -*- coding: cp1252 -*-

in_file = open("glocke_test.txt", 'r')
out_file = open("output_glocke_test.txt", 'w')

number_of_signs = 0
lexicon = {}

zl = []
a = 0

# Read the input file, computing the lexicon
# as each line is read in
for line in in_file:
    line = line.split()
    for item in line:
        zl_token = list(item)
        zl = zl + zl_token
        sign = item in zl
    for item in zl:
        a += 1
        number_of_signs += 1
        sign_number = lexicon.get(zl[a], 0)
        lexicon[zl[a]] = sign_number + 1

print zl
in_file.close()

# Print the lexicon to the output file, sorted
# according to reversed frequency (from highest
# to lowest)
signs = lexicon.items()

print signs

signs.sort(key=lambda x:x[1], reverse=True)
for item in signs:
   print>>out_file, token[0], token[1]
out_file.close()

print "Anzahl Zeichen: ", number_of_signs
print "Anzahl Zeichen-Types:", lexicon
leider funktioniert das ganze nicht. hat einer ne idee? ist das mit der liste überhaupt der richtige ansatz?

vielen dank für eure hilfe,
gruß, sebastian
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Wie sieht denn die Eingabedatei aus, und wie soll die lexicon-Struktur aussehen?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
ssulger
User
Beiträge: 3
Registriert: Sonntag 2. Dezember 2007, 20:10

die eingabedatei ist eine normale .txt-datei mit einem kurzen satz; die ausgabedatei soll folgendermaßen aussehen:

e 8
b 3
o 2
. 1

usw.; also einfach eine textdatei mit den vorkommenden zeichen und ihren häufigkeiten.

vielen dank für die rasche antwort,

sebastian
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Ah, okay. Das könnte etwa so ausschauen:

Code: Alles auswählen

in_file = open("glocke_test.txt", "r")
out_file = open("output_glocke_test.txt", "w")

lexicon = {}
for line in in_file:
    for char in line:
        if char.isspace(): continue # whitespace auslassen
        lexicon[char] = lexicon.get(char, 0) + 1
in_file.close()

sorted_lexicon = sorted(lexicon.iteritems(), key=lambda x: x[1], reverse=True)
for char, anzahl in sorted_lexicon:
    out_file.write("%s %s\n" % (char, anzahl))
out_file.close()

print "Anzahl Zeichen:", len(lexicon)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
ssulger
User
Beiträge: 3
Registriert: Sonntag 2. Dezember 2007, 20:10

super!
kannst du uns noch kurz erklären, wie isspace funktioniert? die python-hilfe spuckt nur schrott dazu aus.
und: für was steht "iteritems"? "%s", %s\n"??
entschuldige die anfängerfragen, wir sind hier echt am verzweifeln.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Kein Problem. Zu isspace() steht was ganz brauchbares in der Doku: http://docs.python.org/dev/library/stdt ... tr.isspace

"dict.iteritems()" ist vergleichbar mit "dict.items()", nur dass anstatt einer Liste ein Iterator zurückgegeben wird, der die Items nach und nach zurückgibt. So spart man sich eine überflüssige Liste, denn "sorted()" erzeugt ja wieder eine neue.

Die Strings mit "%s" darin gehören zum String Formatting, das hier dokumentiert ist: http://docs.python.org/dev/library/stdt ... operations
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Antworten