Suchender: Wie unterscheidet man bei Suche ob1 oder 2 Worte etc

Hallo,
mal eine ganz blöde Frage:
Ich  habe eine Suchfunktion in der man beliebige Wörter eingeben kann.
Die Suche soll in einer Datenbank Personen finden.
Die Datenbankfelder in denen gesucht wird sind
"Vorname" "Name" und "falsche Schreibweise" (als Suchhilfe: da steht z.B. statt Hans Müller dann Hans Muller oder Hans Müler oder so etwas in der Art - macht bei diesem Beispiel nicht wirklich sinn aber aber es gibt einige Namen di prinzipiell falsch geschrieben werden...)

Jetzt kann ich bei der Sucheingabe natürlich verschiedene Eingaben machen z.B.

Hans Müller
"Hans Müller"
Hans+Müller
aber auch nur
Hans
oder nur
Müller

Wie kann ich das schreiben, daß alle Fälle berücksichtigt werden, wie muß ich den übergebenen String aufdröseln?
Fall 1 es stehen zwei Worte drin:
also suche in Name wo Wort 1 vorkommt und schaue in Vorname ob Wort 2 gleich ist, wenn das nicht dann suche in Vorname nach Wort 1 und dann schaue ob in Name Wort 2 gleich ist ansosnten suche in "falsche Schreibweise"
Fall 2 es steht nur ein Wort drin:
also suche in Name ob Wort 1 enthalten und gebe alle Datensätze aus dann suche in Vorname ob Wort 1 enthalten ist und gebe ebenfalls alle Daten aus.

Wie schaffe ich aber die Unterscheidung ob nur ein oder Zwei Wörter enthalten sind, bzw. ob die Wörter mit + oder - Verbunden sind oder ob die Wörter in Anführngszeichen stehen..
etc etc

Gibt es für so was fertige Scripts? Gibt es bei der Suchfunktion noch andere Sachen die ich beachten muß? Wie sieht es bei Sonderzeichen aus wie Umlauten, AKzenten, oder diese netten Dänischen kombinationen von z.B. ae als einen Buchstaben? Muß ich diese alle vor der Suche bzw. in der Datenbank umwandeln oder werden solche Sachen automatisch trotzdem gefunden?

Soviele Fragen und so wenig Ahnung...
Wäre euch dankbar, wenn ihr mir helfen würdet.

Danke und Grüße,
Klaus

  1. gudn tach!

    Wie schaffe ich aber die Unterscheidung ob nur ein oder Zwei Wörter enthalten sind, bzw. ob die Wörter mit + oder - Verbunden sind oder ob die Wörter in Anführngszeichen stehen.. [?]

    am geeignetsten sind dafuer imho regulaere ausdruecke.

    nicht unwichtig ist der tipp:
    "Do not use preg_match() if you only want to check if one string is contained in another string. Use strpos() or strstr() instead as they will be faster."

    Wie sieht es bei Sonderzeichen aus wie Umlauten, AKzenten, oder diese netten Dänischen kombinationen von z.B. ae als einen Buchstaben? Muß ich diese alle vor der Suche bzw. in der Datenbank umwandeln oder werden solche Sachen automatisch trotzdem gefunden?

    wenn du ueberall utf-8 verwendest, duerfen auch umlaute und so'n kaes' eingegeben werden und stellen keine probleme dar. beachte jedoch, dass nicht jeder immer auch alle buchstaben so einfach tippen kann.

    prost
    seth

    1. Hi,

      wenn du ueberall utf-8 verwendest, duerfen auch umlaute und so'n kaes' eingegeben werden und stellen keine probleme dar. beachte jedoch, dass nicht jeder immer auch alle buchstaben so einfach tippen kann.

      ich bin mir nicht sicher, aber ich glaube sein Problem ist genau anders herum. Wenn jemand in der Suche "ä", im Datensatz aber "ae" eingibt, wird das dann auch gefunden? Die Antwort darauf wäre in aller Regel NEIN. Dafür braucht es String-Matching-Algorithmen oder Ersetzungstabellen.

      MfG
      Rouven

      --
      -------------------
      ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
  2. Moin!

    mal eine ganz blöde Frage:

    Das ist absolut keine blöde Frage, sondern eine der kompliziertesten, die man sich so vorstellen kann.

    Ich  habe eine Suchfunktion in der man beliebige Wörter eingeben kann.
    Die Suche soll in einer Datenbank Personen finden.

    Computer können auf "einfache" Weise nur identische Bytes finden. Alles, was darüber hinaus geht, muß ihnen aufwendig beigebracht werden. Und "suchen, wie ein Mensch simpel sucht" ist definitiv sehr aufwendig.

    Die Datenbankfelder in denen gesucht wird sind
    "Vorname" "Name" und "falsche Schreibweise" (als Suchhilfe: da steht z.B. statt Hans Müller dann Hans Muller oder Hans Müler oder so etwas in der Art - macht bei diesem Beispiel nicht wirklich sinn aber aber es gibt einige Namen di prinzipiell falsch geschrieben werden...)

    Gerade diese "Falsche Schreibweise" ist doch das komplizierte. Natürlich kannst du da eine eigene Spalte definieren und dort auch exakt EINE falsche Schreibweise eintragen - aber Menschen sind kreativ, gerade bei Tippfehlern.

    Was das entdecken von ähnlich klingenden Namen angeht, bieten sowohl PHP als auch MySQL ein paar Funktionen an. Beide kennen z.B. die soundex-Funktion (http://de.php.net/soundex), PHP noch ein paar weitere, die sich auf "Textähnlichkeit" beziehen.

    Wie kann ich das schreiben, daß alle Fälle berücksichtigt werden, wie muß ich den übergebenen String aufdröseln?

    Da bist du voll gefordert. Ein Suchstring ist für den Computer erstmal nur eine Abfolge von Zeichen.

    Es ist komplett DEINE Aufgabe, dem Suchstring einen Sinn zu geben. Beispielsweise zu erkennen, dass ein Leerzeichen drin steht, welches du vielleicht als Worttrennzeichen betrachten willst. Oder das Pluszeichen - was soll das machen? Anführungszeichen um die Worte - was sollen die bewirken?

    Diesen Vorgang, aus einem Text für den Computer einen Sinn herauszulesen, nennt man "parsen" - und das ist eine der aufwendigen Arbeiten beim Suchen.

    Wie schaffe ich aber die Unterscheidung ob nur ein oder Zwei Wörter enthalten sind, bzw. ob die Wörter mit + oder - Verbunden sind oder ob die Wörter in Anführngszeichen stehen..

    Analysiere den Suchstring, gib ihm "Sinn", und ermittle, was genau gesucht werden soll.

    Gibt es für so was fertige Scripts? Gibt es bei der Suchfunktion noch andere Sachen die ich beachten muß? Wie sieht es bei Sonderzeichen aus wie Umlauten, AKzenten, oder diese netten Dänischen kombinationen von z.B. ae als einen Buchstaben? Muß ich diese alle vor der Suche bzw. in der Datenbank umwandeln oder werden solche Sachen automatisch trotzdem gefunden?

    Du darfst davon ausgehen, dass du komplett alles selbst machen mußt. Willst du beispielsweise erlauben, dass der Benutzer nach "Mueller" suchen darf, und auch "Müller" finden soll, mußt du der Suche beibringen, dass ein "ü" auch als "ue" gefunden werden kann. In der Datenbank den Namen als "Mueller" eintragen geht allerdings ja nicht, weil dort - so nehme ich an - die Originalnamen stehen müssen. Das gleiche gilt auch für alle Akzentzeichen, die auch ohne Akzent gesucht werden könnten, sowie natürlich auch mit dem "falschen" Akzent, und im Prinzip gleichbedeutend behandelt werden, wie die Grundzeichen ohne Akzent.

    Es gibt natürlich auch fertige Suchmaschinen. Die haben allerdings meist eine gezielte Aufgabenstellung, also beispielsweise indizieren sie die gesamte Website, und bieten dafür dann eine Suche an. Siehe z.B. "htdig". Das kannst du für deine Datenbank nicht verwenden, weil du ja keine "Webseiten" suchen kannst, sondern Namen suchst.

    Soviele Fragen und so wenig Ahnung...

    Du hast dir mit so einer Suche definitiv eine der kompliziertesten Aufgaben ausgesucht. Es ist alles andere als einfach.

    Ich würde empfehlen, klein anzufangen. Erstmal Beschränkungen auferlegen: Suche nur nach genau EINEM Namen, und die Suche findet dann auch nur exakte Übereinstimmungen in der Schreibweise. Davon ausgehend kann man dann Ergänzungen schreiben, also beispielsweise eine unscharfe Suche nach dem Namen einbauen, oder den Suchstring komplizierter werden lassen.

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!