Seite 1 von 1

lexicon aus einzelzeichen erstellen

Verfasst: Sonntag 2. Dezember 2007, 20:17
von ssulger
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

Verfasst: Sonntag 2. Dezember 2007, 20:44
von birkenfeld
Wie sieht denn die Eingabedatei aus, und wie soll die lexicon-Struktur aussehen?

Verfasst: Sonntag 2. Dezember 2007, 20:48
von ssulger
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

Verfasst: Sonntag 2. Dezember 2007, 20:53
von birkenfeld
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)

Verfasst: Sonntag 2. Dezember 2007, 21:20
von ssulger
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.

Verfasst: Sonntag 2. Dezember 2007, 21:25
von birkenfeld
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