![]() |
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 |
Re: Soundex-Algorithmus für Deutsch
Mein Chef hat in seiner Diplomarbeit über einen alternativen Algorithmus geschrieben, werde ihn mal dazu fragen.
|
Re: Soundex-Algorithmus für Deutsch
Das wäre ja prima :P
Urs |
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 ![]() :hi: |
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: |
Re: Soundex-Algorithmus für Deutsch
Zitat:
Fluß => Fluss; Paß => Pass; Nee, irgendwie sehe ich da keinen sprachlichen unterschied. Ich spreche beide Versionen gleich aus :gruebel: |
Re: Soundex-Algorithmus für Deutsch
Zitat:
|
Re: Soundex-Algorithmus für Deutsch
Man sollte sich vielleicht mal die Definition von Soundex ansehen. 8)
|
Re: Soundex-Algorithmus für Deutsch
Also was du dir bei
![]() ![]() Gruß Stefan |
Re: Soundex-Algorithmus für Deutsch
Zitat:
...:cat:... |
Re: Soundex-Algorithmus für Deutsch
Zitat:
Masse => Maße |
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. |
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. |
Re: Soundex-Algorithmus für Deutsch
Zitat:
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 |
Re: Soundex-Algorithmus für Deutsch
Zitat:
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:... |
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". ;) |
Re: Soundex-Algorithmus für Deutsch
Zitat:
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:... |
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. |
Re: Soundex-Algorithmus für Deutsch
Zitat:
...:cat:... |
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:... |
Re: Soundex-Algorithmus für Deutsch
Zitat:
Zitat:
|
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 |
Re: Soundex-Algorithmus für Deutsch
Zitat:
Zitat:
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 |
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 |
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:
gruß Teekeks
(* ------------------------------------------------------ *)
(* 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. |
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