Ankündigung

Einklappen
Keine Ankündigung bisher.

fehlerhafte Ergebnisse mit similar_text

Einklappen

Neue Werbung 2019

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

  • fehlerhafte Ergebnisse mit similar_text

    Ich versuche in einem Suchfeld, Vorschläge aus einer Datenbank herauszuholen.
    Dazu gibt es viele Vorschläge.
    Ich versuche es mit similar_text.
    Dabei stoße ich auf das Problem, dass ab einer gewissen Eingabelänge falsche Werte Angezeigt werden.

    Hier der wie ich die Abfrage durchführe:
    PHP-Code:
    //test  similar_text
    $suchText 'Entwicklerinnen und Entwickler und Analytikerinnen und Analytiker von Software und Anwendungen, anderweitig nicht genannt';
    $eingabeText 'sofware enwickler';

    echo 
    "Gesuchter Text: -".$suchText."-<br>";
    echo 
    "Eingabe Text: -".$eingabeText."-<br>";

    $suchText preg_replace('/ /','',strtoupper($suchText));
    $eingabeText preg_replace('/ /','',strtoupper($eingabeText));
    echo 
    "<table>";
    echo 
    "<tr><th></th><th>Vergleichstext</th><th>Idente Zeichen (?)</th><th>% der identen Zeichen</th><th>% von similar_text</th></tr>";
    for(
    $i=1;$i<=strlen($eingabeText);$i++) {
        
    $txtpart substr($eingabeText,0,$i);
        
    $vergleich similar_text(preg_replace('/ /','',strtoupper($suchText)),preg_replace('/ /','',strtoupper($txtpart)),$percent);
        
    $verproz $vergleich / (strlen($txtpart));
        
    $percent round($percent);
        echo 
    "<tr><td>".$i."</td><td>".$txtpart."</td><td>".$vergleich."</td><td>".$verproz."</td><td>".$percent."</td></tr>";
    }
    echo 
    "</table>"
    Und hier der Output:
    Gesuchter Text: -Entwicklerinnen und Entwickler und Analytikerinnen und Analytiker von Software und Anwendungen, anderweitig nicht genannt-
    Eingabe Text: -sofware enwickler-
    1 S 1 1 2
    2 SO 2 1 4
    3 SOF 3 1 5
    4 SOFW 4 1 7
    5 SOFWA 5 1 9
    6 SOFWAR 6 1 11
    7 SOFWARE 7 1 12
    8 SOFWAREE 8 1 14
    9 SOFWAREEN 9 1 15
    10 SOFWAREENW 9 0.9 15
    11 SOFWAREENWI 10 0.90909090909091 17
    12 SOFWAREENWIC 11 0.91666666666667 18
    13 SOFWAREENWICK 6 0.46153846153846 10
    14 SOFWAREENWICKL 7 0.5 11
    15 SOFWAREENWICKLE 8 0.53333333333333 13
    16 SOFWAREENWICKLER 9 0.5625 15

    Also ab dem 10.Zeichen wird es mir unklar?
    Mach ich was falsch,oder...

    Danke

  • #2
    Nein du machst nichts falsch, du verstehst nur die Funktion nicht.

    schaue es dir an bei phpsandbox.
    Hier der Code dazu
    PHP-Code:
    $first '12345678901234567890';
    $second "1234567890";

    for(
    $i=1;$i<=strlen($first);$i++) {
        
    $txtpart substr($first,0,$i);
        
    $vergleich similar_text($txtpart$second,$percent);
        echo 
    $txtpart " -- " $vergleich " -- " round($percent) ."<br>\n";

    Bei 10 Zeichen gib es 100'% Übereinstimmung, ab dem 11. Zeichen nimmt die Übereinstimmung wieder ab.

    Suchvorschläge sind übrigens ein ziemlich komplexes Thema. Viele grosse Seiten lassen die Vorschläge(auch manchmal TAGS genannt) von Menschen einordnen.
    Man denkt immer das alles automatisch per Algorithmus geschieht, dem ist aber oft nicht so, vieles wird von Menschen geprüft und in Datenbanken abgelegt, dies geschieht oftmals durch darauf spezialisierte Firmen, siehe auch den Begriff Crowdsourcing.

    Kommentar


    • #3
      Danke protestix,
      aber wie soll ich "Gibt die Anzahl übereinstimmender Zeichen in beiden Zeichenketten zurück." anders vesrtehen?
      Der angegebene Prozentwert ist ist das eine, aber der Rückgabewert der übereinstimmenden Zeichen sollte doch nachvollziehbar sein.
      In deinem Beispiel schaut es für mich so aus also ob er die doppelten Zahlen ignoriert, nicht zählt oder wie auch immer.
      In meinem Textbeispiel habe ich den 1.doppelten Wert schon bei Positon 8, wird aber gezählt, bei 10 wird ein neues Zeichen nicht gezählt und bei 13 nimmt der Rückgabewert stark ab, obwohl alle Zeichen enthalten sind.

      Ich werde mal versuchen die eingegebenen Wörter zu trennen und einzeln zu vergleichen, vielleicht hilft das.

      Danke für den tipp mit der sandbox, echt paraktisch für schnelle Test und zum Posten.

      Kommentar

      Lädt...
      X