Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Soundex-Algorithmus für Deutsch (https://www.delphipraxis.net/36037-soundex-algorithmus-fuer-deutsch.html)

urs.liska 14. Dez 2004 23:18


Soundex-Algorithmus für Deutsch
 
Hallo,

kennt jemand einen auf die deutsche Sprache abgestimmten Soundex-Algorithmus – am besten gleich in einer Delphi-Implementation?

Und sehe ich es richtig, dass man eigentlich auf den als BUchstaben kodierten ersten Buchstaben verzichten könnte und diesen gleich auch als Ziffer wiedergeben könnte? Das würde ja die Trefferquote erhöhen (da "Kakao" ja doch genauso klingt (und schmeckt) wie "Cacao").

MfG
Urs

Stefan Hueg 14. Dez 2004 23:50

Re: Soundex-Algorithmus für Deutsch
 
Mein Chef hat in seiner Diplomarbeit über einen alternativen Algorithmus geschrieben, werde ihn mal dazu fragen.

urs.liska 15. Dez 2004 01:04

Re: Soundex-Algorithmus für Deutsch
 
Das wäre ja prima :P
Urs

jensw_2000 15. Dez 2004 21:45

Re: Soundex-Algorithmus für Deutsch
 
Hi,

teste doch mal die TSoundex Komponente von Indigo Software an.
Mir gefällt sie gut.

ae - ä
ß - ss
Maier - Meyer
usw. erkennt der der Algorithmus

http://www.torry.net/vcl/mmedia/voice/soundex.zip


:hi:

glkgereon 15. Dez 2004 21:48

Re: Soundex-Algorithmus für Deutsch
 
also so weit ich weiss gibt es einen sprachlichen unterschied zwischen ss und ß :gruebel:

ß wird lang, ss kurz gesprochen :warn:

Kernel32.DLL 15. Dez 2004 22:01

Re: Soundex-Algorithmus für Deutsch
 
Zitat:

Zitat von glkgereon
ß wird lang, ss kurz gesprochen :warn:

naß => nass;
Fluß => Fluss;
Paß => Pass;

Nee, irgendwie sehe ich da keinen sprachlichen unterschied. Ich spreche beide Versionen gleich aus :gruebel:

NicoDE 15. Dez 2004 22:04

Re: Soundex-Algorithmus für Deutsch
 
Zitat:

Zitat von Kernel32.DLL
Nee, irgendwie sehe ich da keinen sprachlichen unterschied. Ich spreche beide Versionen gleich aus :gruebel:

Vielleicht meint er den Konsonanten davor :)

Hansa 15. Dez 2004 23:18

Re: Soundex-Algorithmus für Deutsch
 
Man sollte sich vielleicht mal die Definition von Soundex ansehen. 8)

Stefan Hueg 16. Dez 2004 10:29

Re: Soundex-Algorithmus für Deutsch
 
Also was du dir bei Bei Google suchenPhonetischer AND Code anschauen solltest ist "Phonetischer Code". Das nächste wäre Bei Google suchenAspell.

Gruß

Stefan

sakura 16. Dez 2004 10:31

Re: Soundex-Algorithmus für Deutsch
 
Zitat:

Zitat von glkgereon
also so weit ich weiss gibt es einen sprachlichen unterschied zwischen ss und ß :gruebel:

ß wird lang, ss kurz gesprochen :warn:

Beim SoundEx get es nicht um gleich sondern um ähnlich. So behandelt SoundEx auch P und B, oder D und T gleich. SoundEx behandelt sogar alle Vokale gleich.

...:cat:...

MathiasSimmack 16. Dez 2004 10:50

Re: Soundex-Algorithmus für Deutsch
 
Zitat:

Zitat von Kernel32.DLL
Zitat:

Zitat von glkgereon
ß wird lang, ss kurz gesprochen :warn:

naß => nass;
Fluß => Fluss;
Paß => Pass;

Nee, irgendwie sehe ich da keinen sprachlichen unterschied. Ich spreche beide Versionen gleich aus :gruebel:

Einen sprachlichen Unterschied kann man auch nicht sehen sondern bestenfalls hören. Abgesehen davon ist der Vergleich von dir Quark, weil du lediglich die alte und neue Schreibweise gegenüber stellst. Ein besseres Beispiel wäre gewesen:

Masse => Maße

urs.liska 16. Dez 2004 11:03

Re: Soundex-Algorithmus für Deutsch
 
@Stefan Hueg:
Vielen Dank für den Link, aber ich komme da leider nicht weiter. Ich finde etliches unter dem Stichwort phonetischer Code. Aber das sind anscheinend alles Anwendungsbeispiele, also Fälle, bei denen zur Identifizierung eben ein phonetischer Code verwendet wird - aber nicht, wie dieser konstruiert wird.

urs.liska 16. Dez 2004 11:14

Re: Soundex-Algorithmus für Deutsch
 
@jensw_2000
Danke für den Link.
Die Komponente ist gut kommentiert und hilft mir daher weiter. Es ist offensichtlich wirklich so, dass die Konvention, bei der Soundex-Berechnung den ersten Buchstaben einfach zu übernehmen willkürlich ist und zu falschen Ergebnissen führt (so wäre Foto <> Photo).

Was ich jetzt bräuchte, wäre eine einigermaßen erforschte Liste mit Buchstaben-Code-Zuordnungen für das Deutsche.

glkgereon 16. Dez 2004 11:48

Re: Soundex-Algorithmus für Deutsch
 
Zitat:

Zitat von MathiasSimmack
Zitat:

Zitat von Kernel32.DLL
Zitat:

Zitat von glkgereon
ß wird lang, ss kurz gesprochen

naß => nass;
Fluß => Fluss;
Paß => Pass;

Nee, irgendwie sehe ich da keinen sprachlichen unterschied. Ich spreche beide Versionen gleich aus

Einen sprachlichen Unterschied kann man auch nicht sehen sondern bestenfalls hören. Abgesehen davon ist der Vergleich von dir Quark, weil du lediglich die alte und neue Schreibweise gegenüber stellst. Ein besseres Beispiel wäre gewesen:

Masse => Maße

Jo, exakt! :thumb:

naß ist alte Rechtschreibung und sollte damit für solch einen algo net gelten...
wenn, dann müsste es mit langem "a" gesprochen werden...

das beispierl Masse => Maße ist wesentlich besser und korrekt

sakura 16. Dez 2004 11:56

Re: Soundex-Algorithmus für Deutsch
 
Zitat:

Zitat von glkgereon
naß ist alte Rechtschreibung und sollte damit für solch einen algo net gelten...
wenn, dann müsste es mit langem "a" gesprochen werden...

Sehr wohl sollten "naß" und "nass" im SoundEx gleich bewertet werden, da es um Ähnlichkeiten geht. SoundEx wurde ursprünglich entwickelt, um Telefonberatern die Suche in der Kundendatei zu erleichtern. Über eine schlechtere Verbindung kann man nicht einmal M und B unbedingt von einander unterscheiden, also werden diese Buchstaben gleich ausgewertet.

SoundEx teilt alle Buchstaben des Alphabets in ca. 6 Gruppen ein. Jeder Gruppe hat einen Wert, welcher zur Analyse und zum späteren Vergleich herangezogen wird. Kommt ein Wert zwei Mal direkt aufeinander vor, wird der zweite ignoriert. Sagen wir mal, dass "naß" zu "314" wird, dann würde "nass" zu "3144" werden, allerdings wird "44" zu "4" zusammengefasst, daraus folgt, dass auch "nass" zu "314" wird und somit identisch zu "naß" ist ;-)

Jetzt gibt es noch die Möglichkeit den Anfangsbuchstaben beizubehalten, aber das soll für obiges egal sein :zwinker:

...:cat:...

MathiasSimmack 16. Dez 2004 12:02

Re: Soundex-Algorithmus für Deutsch
 
@sakura: Deine Einwände sind allesamt richtig, und keiner bestreitet sie. Ob "naß" oder "nass". In beiden Fällen ist das gleiche gemeint, und es gibt lediglich den Unterschied zwischen alter und neuer Rechtschreibung. Dagegen dürfte "Maße" und "Masse" nicht das gleiche Ergebnis haben, als Beispiel.

Mir persönlich ist das Thema aber ohnehin egal :mrgreen:, mir ging´s nur um den Vergleich von unserem Cornel; von wg "ich sehe den sprachlichen Unterschied nicht". ;)

sakura 16. Dez 2004 12:26

Re: Soundex-Algorithmus für Deutsch
 
Zitat:

Zitat von MathiasSimmack
es gibt lediglich den Unterschied zwischen alter und neuer Rechtschreibung. Dagegen dürfte "Maße" und "Masse" nicht das gleiche Ergebnis haben.

Falsch, auch diese beiden würden das gleiche Ergebnis erzeugen. Es geht beim SoundEx nicht um die Rechtschreibung, im Gegenteil, SoundEx versucht diese vollständig zu egalisieren ;-) Wenn man eine SoundEx Implementation nutzt, welche abschließende Vokale nicht verschluckt (das ist iA Implementierungssache), dann wird "Maße" zu "3141" und "Masse" zu "31441", da "44" zu "4" wird, wird auch "Masse" zu "3141". Somit würde SoundEx "Maße" und "Masse" als ähnlich genug erkennen, um für beide das gleiche Ergebnis zu produzieren.

Nochmal: SoundEx wurde entwickelt, um ähnlich klingende Wörter zu erkennen. Ein Deutscher würde vielleicht den Unterschied zwischen Hrn. Masse und Hrn. Maße erkennen, aber hättest Du einen Kunden der Hr. Funakoshi heißt, würdest Du wohl nicht mehr sicher sein, wie der sich schreibt :roll: Deswegen macht SoundEx im Deutschen auch keine Unterscheidung zw. A,E,I,O,U,Y,J oder der Gruppe D,T,P,B,M,N etc.

...:cat:...

Hansa 16. Dez 2004 12:48

Re: Soundex-Algorithmus für Deutsch
 
Ich will es einmal so verdeutlichen : hier gibts ja wohl keinen, der keine Fremdsprache kann / lernen muß. Dann kennt ihr ja bestimmt diese komische "Lautschrift", oder wie die heißt. Diese komische Schrift, die etwas nach griechisch aussieht. Das kommmt so ziemlich auf Soundex raus. Man hat also für ein Wort eine Übersetzung, wie es gesprochen wird. Soundex geht noch einen Schritt weiter und berücksichtigt auch Ähnlichkeiten.

Beispiel : angenommen GROß geschriebene Sachen würden kurz gesprochen, dann würde "Masse" in dem Beispiel Soundex z.B. wie "mASe" und die Maße wären "mase". Wie die Katze sagt, hat das mit der Schreibweise nichts zu tun. Jedes Wort einer Sprache muß eben nur "übersetzt" werden. Insofern könnte jeder, der dieses "Alphabet" beherrscht einen chinesischen Satz richtig aussprechen, ohne ihn schreiben zu können.

sakura 16. Dez 2004 13:02

Re: Soundex-Algorithmus für Deutsch
 
Zitat:

Zitat von Hansa
Beispiel : angenommen GROß geschriebene Sachen würden kurz gesprochen, dann würde "Masse" in dem Beispiel Soundex z.B. wie "mASe" und die Maße wären "mase".

Mit dem Unterschied, dass sich SoundEx auch nicht für die Länge (das Volumen, etc) eines Buchstaben juckt ;-)

...:cat:...

sakura 16. Dez 2004 14:22

Re: Soundex-Algorithmus für Deutsch
 
Liste der Anhänge anzeigen (Anzahl: 1)
@urs....

Ich habe mal aus unseren Sourcen den SoundEx fürs Deutsche extrahiert. Da wir damals keine angenehme Lösung fürs Deutsche gefunden haben, ist der auf dem Mist eines Kollegen gewachsen, aber recht einfach zu verstehen und funktioniert (zumindest für unsere Kunden) wie gewünscht. :zwinker:

...:cat:...

MathiasSimmack 16. Dez 2004 14:37

Re: Soundex-Algorithmus für Deutsch
 
Zitat:

Zitat von sakura
Zitat:

Zitat von MathiasSimmack
es gibt lediglich den Unterschied zwischen alter und neuer Rechtschreibung. Dagegen dürfte "Maße" und "Masse" nicht das gleiche Ergebnis haben.

Falsch, auch diese beiden würden das gleiche Ergebnis erzeugen. Es geht beim SoundEx nicht um die Rechtschreibung, im Gegenteil, SoundEx versucht diese vollständig zu egalisieren ;-)

Gut, dann habe ich den Sinn von SoundEx bisher nicht verstanden. :oops:

Zitat:

Ein Deutscher würde vielleicht den Unterschied zwischen Hrn. Masse und Hrn. Maße erkennen, [...]
:mrgreen: Sieht irgendwie aus wie Hirnmasse.

urs.liska 16. Dez 2004 17:17

Re: Soundex-Algorithmus für Deutsch
 
@sakura
super, danke. konnte es mir noch nicht genau ansehe (weil mein kleiner auf dem schoß sitzt und quengelt), aber das ist wohl genau, was ich suche.

Urs

Kernel32.DLL 16. Dez 2004 19:18

Re: Soundex-Algorithmus für Deutsch
 
Zitat:

Zitat von MathiasSimmack
Mir persönlich ist das Thema aber ohnehin egal :mrgreen:

Richtig, mir ist das Thema im Prinzip auch egal. Ich wollte lediglich verdeutlichen, dass es momentan noch zwei Möglichkeiten gibt, das Wort "nass" zu schreiben und das so die Aussage glkgereons nicht hundertprozentig hinhaut.

Zitat:

Zitat von MathiasSimmack
, mir ging´s nur um den Vergleich von unserem Cornel; von wg "ich sehe den sprachlichen Unterschied nicht". ;)

Das war beabsichtigt. So was nennt man Rhetorische Figur
Falls dichs interessiert: Ich würde es als Oxymoron bezeichnen, aber darüber kann man sich streiten. (Und das sollte hier nicht näher ausgeführt werden)


mfg

Daniel

Acaenitus 7. Nov 2005 19:02

Re: Soundex-Algorithmus für Deutsch
 
[quote="sakura"]@urs....

Ich habe mal aus unseren Sourcen den SoundEx fürs Deutsche extrahiert. Da wir damals keine angenehme Lösung fürs Deutsche gefunden haben, ist der auf dem Mist eines Kollegen gewachsen, aber recht einfach zu verstehen und funktioniert (zumindest für unsere Kunden) wie gewünscht. :zwinker:


Hallo,

mich würde interessieren, wie Euer Soundex funktioniert, speziell welche Phonetischen Gruppen und welche Regeln. Ich arbeite allerdings mit VBA und nicht mit Delphi. Könnte ich die Informationen in Textform bekommen?

Grüsse
Anton

Teekeks 15. Feb 2009 20:14

Re: Soundex-Algorithmus für Deutsch
 
Hi!
Ich verwende schon ewig einen Soundex Algorytmus der Eigentlich für das Amerikanische gedacht war, aber von meinem Vater leicht angepasst wurde. Er funktioniert est super und es hat sich bis heute noch keiner beschwert...
hier ist er:
Delphi-Quellcode:
(* ------------------------------------------------------ *)
(*                    SOUNDEX.PAS                        *)
(*            Phonetisches Suchen mit Pascal             *)
(*             (c) 1990 Bodo Joest & TOOLBOX             *)
(*     Leichte Änderungen für Delphi32 JB, 2001           *)
(*     Anpassung für ersten Laut von Jens During         *)
(* ------------------------------------------------------ *)

UNIT Sound_Ex;

INTERFACE

FUNCTION SoundEx(CONST Idx: String): String;

IMPLEMENTATION

FUNCTION UpString(CONST Txt : String): String;
VAR
  i : INTEGER;
BEGIN
  Result := Txt;
  FOR i := 1 TO Length(Result) DO
    Result[i] := UpCase(Result[i]);
END;

FUNCTION SoundEx(CONST Idx : String): String;
            { Umwandlung eines Strings in eine Phonemkette }
CONST                                           { Phoneme }
  BFPV    = ['B', 'F', 'P', 'V'];
  CGJKQSXZ = ['C', 'G', 'J', 'K', 'Q', 'S', 'X', 'Z'];
  DT      = ['D', 'T'];
  L       = ['L'];
  MN      = ['M', 'N'];
  R       = ['R'];
VAR
  i      : INTEGER;
  Code   : String[5];
  CodeLen : BYTE ABSOLUTE Code;
  Index  : String;
BEGIN
  Index := UpString(Idx);
//Code := Index[1]; //Änderung JD,Phonemkennung ab Laut 1!!
  Code := '';
  i    := 1;
  WHILE (i <= Length(Index)) AND (CodeLen < 5) DO BEGIN
    IF     (Index[i] IN BFPV)    AND
            (Code[CodeLen] <> '1') THEN Code := Code + '1'
    ELSE IF (Index[i] IN CGJKQSXZ) AND
            (Code[CodeLen] <> '2') THEN Code := Code + '2'
    ELSE IF (Index[i] IN DT)      AND
            (Code[CodeLen] <> '3') THEN Code := Code + '3'
    ELSE IF (Index[i] IN L)       AND
            (Code[CodeLen] <> '4') THEN Code := Code + '4'
    ELSE IF (Index[i] IN MN)      AND
            (Code[CodeLen] <> '5') THEN Code := Code + '5'
    ELSE IF (Index[i] IN R)       AND
            (Code[CodeLen] <> '6') THEN Code := Code + '6';
    Inc(i);
  END;
  Code  := Code + '0000';
  Result := Code;
END;

END.
gruß Teekeks


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz