alternative suchwörter vorschlagen

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

  • alternative suchwörter vorschlagen

    weis nicht ob ichhier richtig bin -> ihr kennt doch bei manchen suchmaschinen das wenn die suche kein ergebnis bringt (weil suchwort falsch geschrieben) die seite andere suchwörter vorschlägt. so ala meinten sie .... ?

    ich hab mir grad ne funktion gebastelt die mir alle kombination eines suchwortes durchspielt und dann diese in der datenbank sucht. bei einer strlen von 4-5 ist das systemlaufzeit technisch nicht mehr tragbar. also was tun wie machen die grossen das?

    danke für jeden vorschlag

    fra7l7

  • #2
    hmm,

    ich habe eine ähnlich performante, jedoch doch noch schnellere lösung verwendet ... per similar_text(), wenn ich mich recht erinner ... zwar mußt du immer noch alle db-einträge durchgehen, aber ... nimmst dann eben den eintrag mit der höchsen prozentzahl.

    die großen machen das glaub ich noch ein wenig (vollständig?) anders ... das 'meinten sie' kommt dann wohl auch bei ähnlichen suchbegriffen, die wesentlich mehr ergebnisse ergeben würden.
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      bei MySql kannst vielleicht noch was performance rausholen, wenn du über die Keywords einen fulltext-Index erzeugst.
      (wenn du das nicht schon gemacht hast)

      Dann dauert zwar das schreiben ein wenig länger, aber die Abfragen sollten dann noch was flotter laufen.

      Kommentar


      • #4
        - aj similar text ist gut -> ich halte das für die einzigste ware methode. ich meld mich zurück wenn ich das ma ausprobiert habe

        Kommentar


        • #5
          habs eingebaut -> und ist echt klasse auf php.net hab ich noch ne bessere funktion gefunden die nochmal schneller ist als similar_text() . ein vorschlag habe ich dann noch für alle die das versuchen auch zu machen -> bei vielen datensätz wäre es sinnvoll nur die zum vergleich einzuziehen die eine str länge von +-1 haben!

          PHP-Code:

          function LCS_Length($s1$s2)
          {
            
          $m strlen($s1);
            
          $n strlen($s2);

            
          //this table will be used to compute the LCS-Length, only 128 chars per string are considered
            
          $LCS_Length_Table = array(array(128),array(128));


            
          //reset the 2 cols in the table
            
          for($i=1$i $m$i++) $LCS_Length_Table[$i][0]=0;
            for(
          $j=0$j $n$j++) $LCS_Length_Table[0][$j]=0;

            for (
          $i=1$i <= $m$i++) {
             for (
          $j=1$j <= $n$j++) {
               if (
          $s1[$i-1]==$s2[$j-1])
                 
          $LCS_Length_Table[$i][$j] = $LCS_Length_Table[$i-1][$j-1] + 1;
               else if (
          $LCS_Length_Table[$i-1][$j] >= $LCS_Length_Table[$i][$j-1])
                 
          $LCS_Length_Table[$i][$j] = $LCS_Length_Table[$i-1][$j];
               else
                 
          $LCS_Length_Table[$i][$j] = $LCS_Length_Table[$i][$j-1];
             }
            }
            return 
          $LCS_Length_Table[$m][$n];
          }

          function 
          str_lcsfix($s)
          {
            
          $s str_replace(" ","",$s);
            
          $s ereg_replace("[éèêëËÊÉÈ]","e"$s);
            
          $s ereg_replace("[àáâãäåÄÅÃÂÁÀ]","a"$s);
            
          $s ereg_replace("[ìíîïÏÎÍÌ]","i"$s);
            
          $s ereg_replace("[òóôõöÖÕÔÓ]","o"$s);
            
          $s ereg_replace("[ÜÛÚÙùúûü]","u"$s);
            
          $s ereg_replace("[Ç]","c"$s);
            return 
          $s;
          }

          function 
          get_lcs($s1$s2)
          {
            
          //ok, now replace all spaces with nothing
            
          $s1 strtolower(str_lcsfix($s1));
            
          $s2 strtolower(str_lcsfix($s2));

            
          $lcs LCS_Length($s1,$s2); //longest common sub sequence

            
          $ms = (strlen($s1) + strlen($s2)) / 2;

            return ((
          $lcs*100)/$ms);

          Kommentar


          • #6
            kränker scheiss!

            Kommentar

            Lädt...
            X