Wort- sowie Buchstabentripletthäufigkeit zählen

Code-Stücke können hier veröffentlicht werden.
Antworten
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Donnerstag 27. Oktober 2005, 20:07

In einem anderen Forum wurde gefragt, wie man mit awk ein Histogram von Buchstabentripletts eines Textes erstellt.

Beispiel:"HALLO" enthält die Tripletts "HAL", "ALL", und "LLO"

Ich hab das mal in Python geschrieben. Vielleicht hilft es ja einem Hobbykryptologen.

Code: Alles auswählen

# -*- coding: latin-1 -*-
hist={}

import re

#besser wäre es, alle \w durch [-a-zA-Z'] zu ersetzen, ich war aber zu schreibfaul

# Wörter
#searchre = re.compile(r"\w+",re.LOCALE)

# Buchstabenpaare
#searchre = re.compile(r"\w(?=\w)",re.LOCALE)

# Buchstabentriplets
searchre = re.compile(r"\w(?=\w\w)",re.LOCALE)

for line in open("textfile"):
    for x in searchre.finditer(line):
        # +0 bei Wörtern (kein Lookahead)
        # +1 bei Paaren (Lookahead von einem Zeichen)
        # +2 bei Tripeln (Lookahead von zwei Zeichen)
        match = line[x.start(0):x.end(0)+2].lower()
        # Zählen
        try:
            hist[match] += 1
        except KeyError:
            hist[match] = 1

# dictionary als liste von (key,value)
res = hist.items()

# sortieren, allerdings nach dem zweiten Eintrag und nicht nach dem ersten
res.sort(lambda a,b:-cmp(a[1],b[1]))

# Ausgabe
for n,x in res:
    print "%8i %s"%(x,n)
Antworten