[PHP] Ähnliche Begriffe

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Schmitz, 20. November 2006 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 20. November 2006
    Ähnliche Begriffe

    Hallo
    folgendes Problem:
    ich habe eine Datebank mit Namen
    und eine passende suchfunktion
    hat jemand eine idee (muss auch nicht direkt in PHP sein - umsetzen kann ichs ja dann) wie ich ähnliche begriffe anzeigen lassen könnte?
    also wenn jemand Christof eingegeben hat auch Christian oder Christoph angezeigt werden?
    Bzw. nach möglichkeit auch Kristian etc.
    bin für alle ideen dankbar
    MfG Schmitz
     
  2. 20. November 2006
    AW: Ähnliche Begriffe

    hier:
    PHP - metaphone - String-Funktionen
    hier:
    PHP - similar_text - String-Funktionen
    und hier:
    PHP - soundex - String-Funktionen

    ich glaube es gibt auch eine ähnliche mysql-funktion
     
  3. 20. November 2006
    AW: Ähnliche Begriffe

    oh, die seite ist ja mittlerweile richtig informativ
    als ich mit PHP angefangen habe war die der totale müll, daher bin ich nie wieder drauf gegangen
    das problem ist: wenn ich zirka 1200 datensätze mit PHP durchgehe, leidet der speed leider sehr
    aber danke trotzdem
     
  4. 20. November 2006
    AW: Ähnliche Begriffe

    HA!

    ich hatte recht!

    soundex gibts auch für mysql...
    und zwar so:

    PHP:
    SELECT name SOUNDEX ( name ) AS  X FROM tabelle_namen HAVING X  SOUNDEX ( "Schmidt" );
    das würde dann z.b. folgendes liefern:
    name -> X
    schmidt -> S530
    schmitt -> S530
    schmid -> S530
     
  5. 20. November 2006
    AW: Ähnliche Begriffe

    WHERE name LIKE '%na%e' würde im String als Where Klausul auch schon reichen. Hat es mir zumindestens immer!
     
  6. 20. November 2006
    AW: Ähnliche Begriffe

    Dabei muesstest du aber den eingegebenen String erst splitten und die Ergebnisse mit soundex() sind eindeutiger.
     
  7. 20. November 2006
    AW: Ähnliche Begriffe

    bringt dir aber nur was, wenn du nach EINEM namen suchst... (bzw. nach einer bestimmten menge namen; dann verbunden mit "OR LIKE...")
    sobald du aber beliebig viele verschiedene namen suchen willst, die ähnlich geschrieben werden...
    (also: Christoph, Christoph, Christian, Kristian, Hund, Hand usw...)
    bringt dir dein LIKE nichts mehr...

    achja... mir fällt folgendes auf... Christian und Kristian wird er nicht als phonetisch gleich ansehen, hängt mit dem algo zusammen:
    soundex liefert den wert: anfangsbuchstabe+"einen zahlencode nach ein bestimmten tabelle"

    PS: so dürfte auch dieses Problem zu lösen sein (nicht getestet, bin aber gespannt ob es funktioniert...):

    PHP:
    SELECT name LEFT ( SOUNDEX ( name ),  CAR_LENGTH ( SOUNDEX ( name ))- 1 ) AS  X FROM tabelle_namen HAVING X  LEFT ( SOUNDEX ( "Schmitt" ),  CAR_LENGTH ( SOUNDEX ( "Schmitt" ))- 1 ); 
    -> Christian und Kristian dürften zu finden sein; genauso wie Tisch und Fisch.... als beispiel... (natürlich solltest du "Schmitt" durch eine php-variable ersetzen...
     
  8. 21. November 2006
    AW: Ähnliche Begriffe

    wow, danke ^^
    das sieht sehr gut aus
    leider muss ich das noch an mein script anpassen, das kann etwas dauern, da ich jetz gleich schon wieder weg muss
    aber ich sag dir bescheid obs geht oder nicht

    EDIT: hm, geht net

    Code:
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( SOUNDEX( name ) ) - 1 ) AS name2
    Scheint ein Problem mit dem CHAR_LENGTH zu sein, denn davor steht:
    Code:
    SELECT name, LEFT(SOUNDEX(name), CHAR_LENGTH(SOUNDEX(name))-1) AS name2
     
  9. 21. November 2006
    AW: Ähnliche Begriffe

    @the_dude japp da liegst du richtig, aber bei der einfachen Suche nach Namen mit der Einstellung dass Menschen etwas ähnlich geschriebenes suchen lassen sich mit "LIKE" auch gute ergebnisse erziehlen. Ohne "Splitten" geht es aber nicht wie du schon sagtest....


    @Time du hast noch nicht wirklich mit dem Ausdruck "LIKE" gearbeitet oder? Denn dein Kontra ist nicht wirklich stichfest!

    Ich suche Z.B. Kristof, Christoph etc "WHERE value LIKE '%risto%" da kriegste alle Worte mit dem Stamm Christo, Kristo wie auch immer.
    Du such Hand, Hund etc. "WHERE value LIKE "H%nd" ... Sind nur Beispiele und ich erreiche gute Ergebnisse damit. Ist natürich einige substr arbeit zu tun, dein aufruf wäre kürzer, aber damit ist meine Methode nicht falsch!
     
  10. 21. November 2006
    AW: Ähnliche Begriffe

    leider hast du anscheinend immernochnicht das problem erkannt...

    er hat 1200 datensätze in der datenbank, alles namen inklusive verschiedener schreibweisen. viel spaß beim erstellen aller LIKES mit denen du die verschiedenen schreibweisen der namen heraussucht... klar, es geht definitiv mit like, das habe ich nie bezweifelt; jedoch ist es zu viel arbeit, alle likes 1)herauszusuchen und 2)aktuell zu halten (bleiben die datensätze gleich? oder kommen welche dazu?? dann darfst du wieder im code rumwerkeln...)

    @schmitz: sry... fehler von mir; muss natürlich "char_length" und nicht "car_length" heißen...
     
  11. 21. November 2006
    AW: Ähnliche Begriffe

    falls du meinen post genau liest wirst du feststellen, dass ich da schon selber drauf gekommen bin
    hat aber irgentwie nichts geändert
    das mit dem LIKE ist meine momentane methode, aber da ich das nicht dermaßen kleinhacken will, suche ich halt eine andere
    momentan nehm ich nur den string an den leerstellen auseinander und such nach jedem wort einzeln
    evtl. habe ich mein problem nicht präzise genug ausgedrückt: ich will allgemein rechtschreibfehler berichtigen
    das heißt wenn jemand ausversehen einen buchstaben falsch eingibt, dass dann dieser halt wie bei google angezeigt wird
    da ich die tabelle mit den vorhandenen namen habe, müssten die korrekturen ja daher kommen
    da das mit dem mysql-befehl nicht funktioniert hat, habe ich mal auf PHP umgesattelt
    also erstmal alles in ein mehrdimensionales array eingelesen und dann mit foreach jedes mit meinem keyword verglichen
    PHP:
    if( soundex ( $value [ 'name' ]) ==  soundex ( $_GET [ 'keyword' ]))
    {
      echo 
    $value [ 'name' ]. "<br />" ;
    }
    if(
    strpos ( metaphone ( $value2 [ 'name' ]),  metaphone ( $_GET [ 'keyword' ])))
    {
      echo 
    $value2 [ 'name' ]. "<br />" ;
    }
    aber ich bekomme keine einzige ausgabe :angry:
     
  12. 21. November 2006
    AW: Ähnliche Begriffe

    @timer ... Ähm ich glaub eher du willst mich nicht verstehen und hast die situation allgemein noch nicht verstanden. Eine Suchfunktion die ähnliche Begriffe zeigt. Ob dynamisch oder statisch im Code (von wegen "viel spaß beim erstellen aller LIKES mit denen du die verschiedenen schreibweisen der namen heraussucht") aber verstanden dass name Like '%risto%' Kristof, Christof, Christoph, Christopher, MonteChristo auch "tausende" ähnliche Begriffe ausgeben kannst, hast du scheinbar noch nicht. Deine Lösung ist natürlich auch richtig, aber ich wiederhole mich gerne nochmal, es geht auch anders!
     
  13. 21. November 2006
    AW: Ähnliche Begriffe

    mach halt mal ein bisschen debugging...
    -> $value['name'] belegt? mit was?
    -> $_GET['keyword'] auch ausgeben lassen
    -> und... den namen und soundex dazu ausgeben lassen... vll gibts ja garnichts gleiches?!

    @makenx: und nochmal... das "%risto%" oder "H%nd" muss ja auch irgendwo herkommen... und das muss man händisch machen, das ist ein haufen arbeit und muss auch anders gehen!
     
  14. 21. November 2006
    AW: Ähnliche Begriffe

    values sind da
    keyword ist auch da, danach such ich ja schließlich schon im mysql-befehl (keine angst, da wird er vorher gefiltert )
    und es gibt echt keinen metaphone oder soundex schlüssel der passt
    und das obwohl ich nach Agend suche und Agent vorhanden ist
    das am anfang war nur ein beispiel
     
  15. 21. November 2006
    AW: Ähnliche Begriffe

    Wie ich bereits andeutete, du willst mich anscheind nicht verstehen. Wie ich bereits sagte ist meine Methode mit einiger substr - Arbeit zusätzlich besetzt und dass deine Methode auch stimmt. Ich weiß gar nicht wieso du mir jetzt wieder Kontra bieten willst ... Bißchen aneinander vorbeigeredet gelle?
    Aber/Und irgendwo muss die Kombination mit soundex auch herkommen, meine Methode macht vielleicht mehr Arbeit aber einmal eine Funktion schreiben die sinnvoll oder nach Gusto die Platzhalter in den String einfügt / Zeichen ersetzt und ab die Post, ohne großartig neue/für jemanden unbekannte SQL - Konstrukte mit Soundex zu verwenden. Zumal hier auch wieder interessant wäre ob der einfache Mustervergleich mit "Like" nicht vielleicht sogar schneller ist als "Soundex", und so wieder die substr-Arbeit wett macht.
     
  16. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.