Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Ähnliche Namen finden - SOUNDEX-Problem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Ähnliche Namen finden - SOUNDEX-Problem

    Ich beschäftige mich grade damit, falsch geschriebene Familiennamen trotz der Tippfehler in einem Wörterbuch zu finden.

    Ein erster Versuch ging vollständig schief:

    PHP-Code:

    $gesucht
    'hesser';

    // in der Referenztabelle gibt es "hessel"

    $sql "SELECT name FROM allenamen WHERE name SOUNDS LIKE '$gesucht'";
    ...

    // Das findet mehr als 1000 Zeilen, darunter Haack, Hacke, 
    // Haeschke und auch Huxhage. Alle haben den Soundex-Code H200 
    Gibt es irgendeinen anderen Algorhythmus, der besser funktioniert? Hat jemand eine Idee, wie man da rangehen kann?
    [PHP]if ($var != 0) {
    $var = 0;
    }[/PHP]

  • #2
    SOUNDEX ist auf Namen/Begriffe aus dem englischen Sprachraum zugeschnitten.

    Für deutsche Wörter eignet sich bspw. die Kölner Phonetik besser - musst du dann aber selber implementieren.
    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

    Kommentar


    • #3
      Noch nie gemacht, aber nach dem was ich eben in der Doku dazu gelesen habe, würde ich mal sowas probieren:
      PHP-Code:
      $sql 'SELECT `name` 
              FROM `allenamen` 
              WHERE SUBSTRING(SOUNDEX(`name`), 1, 4) = SUBSTRING(SOUNDEX("' 
      $gesucht '"),1, 4)'
      Und wie mein Vorredner gesagt hat, ist des eigentlich nur für englische Namen.
      "My software never has bugs, it just develops random features."
      "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

      Kommentar


      • #4
        SUBSTRING(SOUNDEX(`name`), 1, 4)
        Das ist immer noch "H200".


        Kölner Phonetik habe ich noch nie gehört, dann schau ich mal, ob das hilfreich sein kann.


        Nachtrag:
        Hier http://www.x3m.ch/codezonex/cms/webs...anphonetic.htm
        steht eine fertige PHP-Funktion zum Download bereit. Ich probiere mal aus, ob mir das weiterhilft.
        [PHP]if ($var != 0) {
        $var = 0;
        }[/PHP]

        Kommentar


        • #5
          Paul.Schramenko, inwiefern sollte denn eine Kürzung des "Hashes" die Ergbnismenge verbessern können?
          [COLOR="#F5F5FF"]--[/COLOR]
          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
          [COLOR="#F5F5FF"]
          --[/COLOR]

          Kommentar


          • #6
            Zitat von Wolla Beitrag anzeigen
            Das ist immer noch "H200".
            Ähm ich glaube nein.

            Zitat von nikosch Beitrag anzeigen
            Paul.Schramenko, inwiefern sollte denn eine Kürzung des "Hashes" die Ergbnismenge verbessern können?
            Ich habe mich auf die MySQL-Doku gestützt

            Gibt einen Soundex-String aus str zurück. Zwei Strings, die fast identisch klingen, sollten identische Soundex-Strings haben. Ein Soundex-String ist standardmäßig vier Zeichen lang, die Funktion SOUNDEX() gibt aber einen beliebig langen String zurück. Sie können SUBSTRING() für das Ergebnis verwenden, um einen Standard-Soundex-String zu erhalten. Alle nicht alphabetischen Zeichen in str werden ignoriert. Alle internationalen alphabetischen Zeichen außerhalb des Bereichs A bis Z werden als Vokale behandelt.

            Code:
            mysql> SELECT SOUNDEX('Hello');
                    -> 'H400'
            mysql> SELECT SOUNDEX('Quadratically');
                    -> 'Q36324'
            Hinweis: Diese Funktion implementiert den Soundex-Originalalgorithmus und nicht die gängigere erweiterte Version, wie sie auch von D. Knuth beschrieben wird. Der Unterschied besteht darin, dass die Originalversion zuerst Vokale und dann Duplikate verwirft, während die erweiterte Version umgekehrt vorgeht.
            Wenn ich da falsch liege, bitte ich um eine Klarstellung, wieso, da mich das Ganze auch interessiert!
            "My software never has bugs, it just develops random features."
            "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

            Kommentar


            • #7
              SELECT SOUNDEX('Haack') --> Ausgabe H200
              SELECT SUBSTRING(SOUNDEX('Haack'), 1, 4) --> Ausgabe H200

              Kannst du in deinem PHPmyadmin ausprobieren, wobei man das ja schon an der Konstruktion erkennen kann - die ersten vier Bytes eines vier-Bytes-Strings sind identisch mit dem Gesamtstring.

              Mit der Kölner Phonetik experimentiere ich noch. Die Treffermenge ist noch nicht so, wie ich sie brauche.
              [PHP]if ($var != 0) {
              $var = 0;
              }[/PHP]

              Kommentar


              • #8
                Code:
                mysql> SELECT SOUNDEX('moep');
                             -> 'M100'
                "My software never has bugs, it just develops random features."
                "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                Kommentar


                • #9
                  Kölner Phonetik (optimiert für die deutsche Sprache)

                  Zitat von Wolla Beitrag anzeigen
                  Nachtrag:
                  Hier http://www.x3m.ch/codezonex/cms/webs...anphonetic.htm
                  steht eine fertige PHP-Funktion zum Download bereit. Ich probiere mal aus, ob mir das weiterhilft.
                  Die URL hat geändert: http://www.x3m.ch/xlab/index.php/pho...e-sprache.html

                  Kommentar

                  Lädt...
                  X