Kölner Phonetik
Verfasst: Montag 22. Dezember 2008, 20:13
hallo!
ich habe hier einmal die 'Kölner Phonetik' implementiert.
feedback zum code nehme ich gern entgegen!
lg
roschi
ich habe hier einmal die 'Kölner Phonetik' implementiert.
feedback zum code nehme ich gern entgegen!
Code: Alles auswählen
# -*- coding: iso-8859-15 -*-
"""
Dieses Modul stellt eine Implementation
der 'Kölner Phonetik' dar.
Beispiele zur Verwendung:
>>> encode("Moritz Müller")
'678657'
>>> encode("Moriz Müler")
'678657'
>>> encode("Laura Mayer")
'5767'
>>> encode("Laura Meier")
'5767'
"""
import re
RULETABLE = {re.compile(r".[A|E|I|J|O|U|Y|Ä|Ö|Ü].", re.I): "0",
re.compile(r".[B].", re.I): "1",
re.compile(r".[P][^H]", re.I): "1",
re.compile(r".[D|T][^C|S|Z]", re.I): "2",
re.compile(r".[F|V|W].", re.I): "3",
re.compile(r"[P][H].", re.I): "3",
re.compile(r".[G|K|Q].", re.I): "4",
re.compile(r"[\b][C][A|H|K|L|O|Q]", re.I): "4",
re.compile(r"[^S|Z][C][A|H|K|O|Q|U|X]", re.I): "4",
re.compile(r"[^C|K|Q][X].", re.I): "48",
re.compile(r".[L].", re.I): "5",
re.compile(r".[M|N].", re.I): "6",
re.compile(r".[R].", re.I): "7",
re.compile(r".[S|Z|ß].", re.I): "8",
re.compile(r"[S|Z][C].", re.I): "8",
re.compile(r"\b[C][^A|H|K|L|O|Q|R|U|X]", re.I): "8",
re.compile(r".[C][^A|H|K|O|Q|U|X]", re.I): "8",
re.compile(r".[D|T][C|S|Z]", re.I): "8",
re.compile(r"[C|K|Q][X].", re.I): "8"
}
def encode(inputstring):
"""
encode(string) -> string
Gibt den phonetischen Code des übergebenen Strings zurück.
"""
encoded = ""
for i in xrange(len(inputstring)):
part = inputstring[i - 1:i + 2]
if len(inputstring) == 1:
part = " %s " % inputstring[0]
elif i == 0:
part = " %s" % inputstring[:2]
elif i == len(inputstring) - 1:
part = "%s " % inputstring[i - 1:]
for rule, code in RULETABLE.iteritems():
if rule.match(part):
encoded += code
break
while [v for v in RULETABLE.itervalues() if encoded.find(v * 2) != -1]:
for v in RULETABLE.itervalues():
encoded = encoded.replace(v * 2, v)
if encoded:
encoded = encoded[0] + encoded[1:].replace("0", "")
return encoded
roschi