Wort- sowie Buchstabentripletthäufigkeit zählen
Verfasst: 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.
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)