Soundex Code
Kategorisierung: | Kodierungen / zahlenbasiert |
Siehe auch: | Kölner Phonetik |
Herkunft / Verwendung: |
Soundex ist sozusagen ein phonetischer Hashwert. Soundex-Werte haben die Eigenschaft, dass ähnlich ausgesprochene Wörter den gleichen Soundex-Wert erzeugen. Dies kann zur Suche in Datenbanken verwendet werden, wenn man die Aussprache, aber nicht die genaue Schreibweise kennt. Soundex liefert einen String aus 4 Zeichen, beginnend mit einem Buchstaben und folgend von 3 Ziffern zurück und ist für die englische Sprache bestimmt. Praktisches Beispiel: Wenn man nur die Aussprache eines Namens kennt, etwa "Meier" und nicht genau weiß, ob dieser Maier, Meier, Mayer, Meyer oder auch Mayr, dann kann man nach dem Soundex in der Datenbank suchen und wird unter "M600" alle Schreibvarianten wiederfinden. Entwickelt wurde Soundex von Robert Russell und Margaret Odell wurde 1918 patentiert. Eine Variante davon, der sogennnte "American Soundex", wurde in den 1930ern dazu benutzt, die Daten der Volkszählung in den USA der Jahre 1890 bis 1920 zu analysieren. Schon früh wurde in der Datenbanksprache für Oracle (PL/SQL) ein Befehl Soundex integriert. Dies hat sicher zur weiteren Verbreitung dieses Algorithmus geführt. Das Verfahren ist für die englische Sprache zugeschnitten und ist nur bedingt für die deutsche geeignet. Zum Beispiel wird das "Y" ignoriert, weil im englischen meist als Vokal benutzt wird. Das deutsche "J" gleicht eher dem englischen "Y". Außerdem kennt die deutsche Sprache mehrbuchstabige Laute wie "ch" und "sch". Es gibt ein für die deutsche Sprache besser geeignete Kodierung, die sogenannte Koelner Phonetik. Der hier verwendete Soundex Algorithmus ist leicht an die deutsche Sprache angepasst, denn er ordnet auch ein "ß" als "s" ein. Zu bemerken wäre auch, dass ein Soundex-Code immer 4 Stellen lang ist. Damit ist er für längere Wörter wenig aussagekräftig. |
Spezifikation des Algorithmus
Der erste Buchstabe des Ursprungwortes wird in Großbuchstaben übernommen. Danach wird jeder Buchstabe in eine der folgenden 6 Kategorien eingeordnet:1 B, F, P, V
2 C, G, J, K, Q, S, X, Z
3 D, T
4 L
5 M, N
6 R
Vokale und andere, nicht aufgeführte Buchstaben werden ignoriert und gehen nicht in den Code ein.Aufeinanderfolgende, gleiche Ziffern im Code werden ausgelassen, Doppelbuchstaben führen also nur zu einmalige Nennung einer Ziffer.
Hat der Soundex-Code 4 Stellen erreicht, wird die Kodierung abgebrochen und das Ergebnis steht fest. Ist das Ergebnis weniger als 4 Stellen lang, wird mit Nullen aufgefüllt.
Die hier implementierte Version des Soundex-Algorithmus entspricht damit dem "American Soundex" (1). Als Erweiterung wird das deutsche "ß" als "ss" mit dem Wert 2 gewertet. Der American Soundex Algorithmus wird wie folgt beschrieben:
American SoundexDer in der meisten SQL-Sprachen implementierte, für computertechnische Umsetzung vereinfachte Algorithmus funktioniert ein klein wenig anders und kann in einigen Fällen andere Werte zurückgeben.
1. Retain the first letter of the name and drop all other occurrences of a, e, i, o, u, y, h, w.
2. Replace consonants with digits as follows (after the first letter):
b, f, p, v = 1
c, g, j, k, q, s, x, z = 2
d, t = 3
l = 4
m, n = 5
r = 6
3. If two or more letters with the same number are adjacent in the original name (before step 1), only retain the first letter; also two letters with the same number separated by 'h' , 'w' or 'y' are coded as a single number, whereas such letters separated by a vowel are coded twice. This rule also applies to the first letter.
4. If there are too few letters in the word to assign three numbers, append zeros until there are three numbers. If there are four or more numbers, retain only the first three.
Beispiele
Klartext: | Null Eins Zwei Drei Vier Fünf Sechs Sieben Acht Neun Zehn Elf Zwölf |
Kodiert: | N400 E520 Z000 D600 V600 F510 S200 S150 A230 N500 Z500 E410 Z410 |
Klartext: | Erika Mustermann |
Kodiert: | E620 M236 |
Dekodierung von E620 M236:
Soundex gibt nur den ersten Buchstaben und die drei nachfolgenden Konsonanten wieder. Doppelkonsonanten werden gekürzt. Jede der nachfolgenden Zeilen steht für einen möglichen Buchstaben. Zwischen den Zeilen können sich beliebig viele der folgende Buchstaben befinden: AEIOU HWY ÄÖÜ, denn diese wurden bei der Kodierung ausgelassen.
e
r (i)
cgjkqsxzß
...
--------
m (u)
cgjkqsxzß
dt (e)
r
...
--------