18 Dez

Anpassung des Soundex-Algorithmus für die deutsche Sprache

“Maier” oder “Mayer”, “Schmidt” oder “Schmitt”, “Hofmann” oder “Hoffmann”? Wer kennt das Problem nicht: eine Person ist in der Datenbank unauffindbar, weil die exakte Schreibung ihres Namens nicht bekannt ist.

Damit Namen auch bei ungenauer Schreibung gefunden werden können, darf der Suchalgorithmus nicht nur exakte Übereinstimmungen berücksichtigen. Eine solche unscharfe Suche (fuzzy search) liefert der Soundex-Algorithmus, der ursprünglich von Robert C. Russell für die Indizierung von Namen in einer Volkszählung entwickelt und im Jahr 1918 patentiert wurde. Dabei werden Wörter gemäß ihrem Klang so codiert, dass ähnlich lautende Wörter durch ähnliche Codes repräsentiert werden.

Das Prinzip des Soundex-Algorighmus

Die vom Soundex-Algorithmus gebildeten Codewörter bestehen aus einem Buchstaben – dem Anfangsbuchstaben des zu codierenden Wortes – gefolgt von drei Ziffern, die unterschiedliche Laute repräsentieren. Folgende Schritte werden bei der Codierung durchgeführt:

  1. Alle Buchstaben werden in Großbuchstaben umgewandelt und Satzzeichen (z.B. Bindestrich) aus dem Wort entfernt
    => ‘Soundex-Code’ wird zu SOUNDEXCODE
  2. Der erster Buchstabe des Wortes wird beibehalten
  3. Die Vokale “A”, “E”, “I”, “O”, “U”, die sog. Halbvokale “W” und “Y” sowie das “H” (im Wortinneren häufig als stummer Konsonant gebraucht) sollen ignoriert werden und werden zunächst durch 0 ersetzt
    => aus SOUNDEXCODE wird S00ND0XC0D0
  4. Konsonanten werden gemäß folgender Tabelle durch Ziffern ersetzt
    Code Buchstabe
    1 B, P, F, V
    2 C, G, K, Q, X, S, Z, J
    3 D, T
    4 L
    5 M, N
    6 R

    => aus S00ND0XC0D0 wird S0053022030

  5. Alle Folgen von gleichen Ziffern werden durch nur eine Ziffer ersetzt; dadurch werden Doppelbuchstaben wie einfache Buchstaben behandelt, so dass “Hoffmann” und “Hofmann” und sogar “Hofman” als gleich betrachtet werden. Da zu diesem Zeitpunkt die Konsonanten bereits durch Codeziffern repräsentiert werden, werden außerdem auch Folgen von Buchstaben, die in die gleiche Kategorie eingeordnet wurden, als doppelte Buchstaben behandelt, so dass z.B. die Buchstabenfolge “ck” als ein Laut betrachtet wird.
    => aus S0053022030 wird S005302030
  6. Da die Vokale, H, W und Y ignoriert werden sollen, werden die Nullen entfernt.
    => aus S0053022030 wird S5323
  7. Das Codewort wird mit Nullen auf drei Ziffern aufgefüllt bzw. auf drei Ziffern verkürzt
    => aus S5323 wird S532

Notwendige Anpassungen für die deutsche Sprache

Da der Soundex-Algorithmus für den englischen Sprachraum entwickelt wurde, müssen erst einige Anpassungen vorgenommen werden, damit der Algorithmus auch für die deutsche Sprache gute Suchergebnisse liefert (vgl. Tabelle).

Code Buchstabe
0 a, e, i, o, u, ä, ö, ü, y, j, H
1 b, p, f, v, w
2 c, g, k, q, x, s, z, ß
3 d, t
4 l
5 m, n
6 r
7 ch

Am offensichtlichsten ist wohl, dass das deutsche Alphabet mit den Umlauten “ä”, “ö” und “ü” sowie dem “ß” über Buchstaben verfügt, die im Englischen nicht existieren. Da die deutschen “Umlaute” aus phonetischer Hinsicht nichts anderes als Vokale sind, werden “ä”, “ö” und “ü” auch genauso wie die anderen Vokale behandelt und bei der Codierung zunächst durch Nullen ersetzt und später eliminiert. Das “scharfe ß” wird wie das einfache “s” durch die Ziffer 2 repräsentiert.

Da es den Buchstaben “ß” nur als Kleinbuchstaben gibt, sollten die Buchstaben im ersten Schritt des Algorithmus nicht in Groß- sondern in Kleinbuchstaben umgewandelt werden.

Ein weiterer Unterschied zwischen dem Deutschen und dem Englischen liegt in der Funktion des Buchstaben “j”. Während das “j” im Englischen (wie in “just” oder “join”) als Zischlaut ausgesprochen wird, der im Deutschen durch die Buchstabenfolge “tsch” repräsentiert wird, erfüllt das “j” im Deutschen die gleiche Funktion wie im Englischen das “y” (vgl. “Yes” und “Ja”) und muss demnach in die Gruppe der Vokale und Halbvokale fallen.

Ähnlich verhält sich der Buchstabe “w”, der im Englischen als Halbvokal (wie in “what”) oder als stummer Buchstabe (wie in “awesome”) auftritt, im Deutschen aber als stimmhafter Gegenpart zu den Buchstaben “f” oder “v” gebraucht wird. Deshalb muss das “w” im Deutschen mit 1 codiert werden.

Eine Besonderheit der deutschen Sprache ist außerdem die Buchstabenfolge “ch”, die Laute wie in “ich” oder “ach” repräsentiert. Beide Laute existieren in der englischen Sprache nicht. Da “ch” in keine der vorhandenen Kategorien passt, wird eine siebte Kategorie geschaffen.

Als weitere Anpassung an die deutsche Sprache wäre noch zu untersuchen, ob die Länge der Codewörter, die auf drei Ziffern beschränkt ist, für die deutsche Sprache angemessen ist, da im Deutschen die Wortlänge tendenziell länger ist als im Englischen.

Weitere Verbesserungen des Soundex Algorithmus

Die beschriebenen Anpassungen berücksichtigen die Unterschiede der deutschen Sprache im Vergleich zum Englischen und verbessern somit die Ergebnisse, die der Soundex-Algorithmus liefert. Dennoch birgt der Soundex-Algorithmus einige Probleme, die dadurch noch nicht behoben werden. Eines dieser Probleme ist, dass der Soundex-Code den ersten Buchstaben des Wortes als festen Bestandteil übernimmt. Das hat zur Folge, dass gleich lautende Wörter, die mit verschiedenen Buchstaben beginnen, nicht als gleich erkannt werden. Wird nach “Carina” gesucht, wird die gleich lautende “Karina” nicht gefunden.

Deswegen ist es ein weiterer Schritt, die Anfangsbuchstaben ebenfalls zu kategorisieren, so dass zumindest “C” und “K” oder “V” und “F” gleich behandelt werden. Dabei muss entschieden werden, wie grob die Kategorisierung für den Anfangsbuchstaben erfolgen soll, denn je mehr Wörter den gleichen Code erhalten, desto höher ist zwar die Wahrscheinlichkeit, dass ein falsch geschriebener Name gefunden wird, aber desto höher ist auch die Anzahl der Treffer, die mit dem ursprünglich gesuchten Namen nur noch wenig Ähnlichkeit aufweisen.

Als Kompromiss zwischen der Genauinkeit der Suche und der Wahrscheinlichkeit, einen falsch geschriebenen Namen zu finden, können mehrere Suchalgorithmen hintereinander geschalten werden, so dass zunächst nur die exakten Treffer angezeigt werden. Die Ergebnisse des Soundex-Verfahrens werden dann weiter unten in der Trefferliste angezeigt. Daran anschließend können dann noch weitere Ergebnisse von vergröberten Varianten des Soundex-Algorithmus aufgelistet werden.

Share this

Leave a reply