Datenbanken

Borland Database Engine

Soundex-Suche in Datenbanken

Wie kann ich in meiner Datenbank eine Soundex-Suche integrieren?

Frage

Damit eine Soundex-Suche automatisiert erfolgt, muß der Soundex in einem indizierten Feld abgelegt werden. Allerdings ist es dem Anwender nicht zuzumuten, den Code selbst einzutragen. Vielmehr muß eine Anwendung den Soundex selbst ermitteln und in das Feld eintragen. Dazu wird der Event BeforePost, der sowohl in TTable als auch TQuery verfügbar ist, abgefangen und bearbeitet, indem das Soundex-Feld mit dem zugehörigen Code belegt wird.

Algorithmus

Der SOUNDEX-Algorithmus geht zurück auf Knuth, der bereits Anfang der 70er Jahre die Grundprinzipien des Algorithmus in 'The Art Of Computer Programming' beschrieb. Der Algorithmus basiert auf 11 Regeln:

  • Alle Buchstaben eines Wortes werden in Großbuchstaben umgewandelt.
  • Der erste Buchstabe eines Wortes wird unverändert übernommen.
  • Die Vokale 'A', 'E', 'I' und 'O', sowie die Konsonanten 'H', 'W' und 'Y' werden bei der Soundex-Generierung nicht berücksichtigt.
  • Aufeinanderfolgende gleiche Buchstaben werden als ein Buchstabe aufgefaßt.
  • Die Buchstaben 'B', 'F', 'P' und 'V' werden als '1' codiert.
  • Die Buchstaben 'C', 'G', 'J', 'K', 'Q', 'S', 'X' und 'Z' werden als '2' codiert.
  • 'D' und 'T' werden als '3' codiert.
  • 'L' wird als '4' codiert.
  • 'M' und 'N' werden als '5' codiert.
  • 'R' wird als '6' codiert.
  • Der sich so ergebende Code muß 4 Zeichen haben. Ist er kürzer, wird er mit Nullen aufgefüllt, ansonsten werden die überzähligen Buchstaben abgeschnitten.

Lösung

Soundex-Codes sind stets mit Vorsicht zu genießen. Das nachfolgende Beispiel, das für alle Wörter den Code M600 liefert, soll dies verdeutlichen.

Name

Soundex

Name

Soundex

Meier

M600

Meaeir

M600

Mayer

M600

Maeihr

M600

Meyer

M600

Myr

M600

Im vorliegenden Beispiel werden alle Arten von 'Meiers' gefunden, wobei die beiden Nullen dadurch zustande kommen, daß außer dem 'R' kein Buchstabe in eine Ziffer codiert werden kann. Kommen weitere Buchstaben hinzu, wird der Wiedererkennungswert eingeschränkt. So erzeugen z. B.:

Name

Soundex

Meierlein

M645

Meierhausen

M625

Obermeier

O165

Aussagekraft

Die Umwandlung eines Strings in einen Soundex wird über die Unit SOUNDEX.CPP eingebunden, die nur eine Funktion implementiert:

AnsiString GetSoundex(AnsiString S)

Die Funktion generiert einen Soundex-Code, der als Ergebnis der Funktion zurückgegeben wird. Wurde ein leerer String als Parameter übergeben, ist das Funktionsergebnis ein String, der nur aus (4) Nullen besteht.

Realisation





Sachgebiet


© 2009-2012 by Alojado Publishing. Alle Rechte vorbehalten. Ausgewiesene Marken gehören ihren jeweiligen Eigentümern.
Mit der Benutzung dieser Seite erkennen Sie die Nutzungsbedingungen und die Datenschutzerklärung an. Der Betreiber übernimmt keine Haftung für den Inhalt verlinkter externer Internetseiten.
Seite erzeugt 2012-05-20 03:13:29 von textarchiv.alojado.de