• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Wort-Vergleich Algorithmus

yss

Mitglied
Guten Morgen ;-)
Könnt ihr mir sagen, ob es schon einen fertigen Algorithmus gibt, der mir 2 Strings, welche aus max. 4 Wörtern bestehen, vergleicht und dabei sagt, ob sie gleich sind, oder falsch, oder sie fast gleich sind.
Beispiel:
Wort1Wort2Auswertung
AutoAutogleich
AutoKatzefalsch
AutoAutfast
AutoAutomfast
Guten MorgenGutenfast
Guten MorgenMorgenfast
 
Werbung:
Werbung:
Achsooo .. das kann JavaScript von sich aus nicht. Du hast hier 2 Möglichkeiten:

a) Verwende eine JavaScript-Bibliothek die so etwas unterstützt. Bei einer kurzen Suche habe ich das hier gefunden:
https://github.com/cemerick/jsdifflib
b) Schick die zu vergleichenden Strings per AJAX an den Server und verwende dort eine Programmiersprache oder MySQL um die Ähnlichkeit zu prüfen. Aber auch hier ist es relativ komplex phonetische Ähnlichkeiten zu bestimmen.
 
Sollte sich mit indexof() und einer doppelten Abfrage lösen lassen.

PHP:
var result = word 2.indexof(word1);

if (result != -1) {
    if (word1 == word2) {
        ... ;
    } ;
}
 
indexOf() kann auch eine Lösung sein, wenn nicht nicht nach "fast" gleich sucht sondern gucken möchte, ob Bestandteile von Wort1 in Wort2 vorkommen.
 
Werbung:
Ich hab jetzt mal folgendes Zusammengebastelt, jemand eine Idee, wie man es noch opitimieren könnte, dass z.B. bei einer Eingabe von "iiae" bei diesem Beispiel nicht "fast" rauskommt?
Code:
var vorlage = 'China Mobile';            
var wort = document.getElementById('word').value;
            wort = wort.toLowerCase();
            wort = wort.replace(' ','');
            vorlage = vorlage.toLowerCase();
            vorlage = vorlage.replace(' ','');
            if(wort !=''){
                if(wort == vorlage){
                    alert("Richtig!");
                }else{
                    if(wort.length > (vorlage.length*(1/3))){
                        if(vorlage.match(wort)){
                            alert("Fast!");
                        }else{    
                            var zaehler = 0;
                            for(i=0;i<wort.length;i++){
                                if(vorlage.indexOf(wort[i]) > -1){
                                    zaehler++;
                                }
                            }
                            if(zaehler < (vorlage.length*(1/2))){
                                alert("fast");
                            }else{
                                var zaehler = 0;
                                for(i = 0;i<wort.length;i++){
                                    if(wort.charAt(i) == vorlage.charAt(i)){
                                        zaehler++;
                                    }
                                }
                                if(zaehler >= (vorlage.length*(1/2))){
                                    alert("Fast");
                                }else{
                                    alert("Falsch1");
                                }
                            }
                        }
                    }else{
                        var zaehler = 0;
                        for(i = 0;i<wort.length;i++){
                            if(wort.charAt(i) == vorlage.charAt(i)){
                                zaehler++;
                            }
                        }
                        if(zaehler >= (vorlage.length*(1/2))){
                            alert("Fast");
                        }else{
                            alert("Falsch2");
                        }
                    }
                }
            }else{
                //Leer
                alert("Leer")
            }
 
Kurze effektive Lösung von meiner Seite in Bezug auf dein Eröffnungsposting.

Im HEAD-Bereich definiere ich neben der Vergleichs-Funktion zwei Funktionen zu "String.prototype".
Im Body habe ich dann mal deine Beispielwerte als Arrays definiert und diese dann durch eine for-Schleife gejagt :eek:), ich denke mal das dies eine sehr elegante Lösung geworden ist.

HTML:
<html>
    <head>
        <title>JScript</title>
        <script type="text/javascript">
            if (typeof String.prototype.startsWith != 'function') {
                String.prototype.startsWith = function (str) {
                        return this.slice(0, str.length) == str;
                };
            }
            if (typeof String.prototype.endsWith != 'function') {
                String.prototype.endsWith = function (str) {
                        return this.slice(-str.length) == str;
                };
            }
            function compare(a, b) {
                if (a == b) {
                        return 'gleich';
                } else if (a.startsWith(b) || b.startsWith(a) || a.endsWith(b) || b.endsWith(a)) {
                        return 'fast gleich';
                } else {
                        return 'ungleich';
                }
            }
        </script>
    </head>
    <body>
        <script type="text/javascript">
             var ar1 = ["Auto", "Auto", "Auto", "Auto", "Guten Morgen", "Guten Morgen"];
             var ar2 = ["Auto", "Katze", "Aut", "Autom", "Guten", "Morgen"];
             for (i = 0; i < ar1.length; i++) {
                 document.write(compare(ar1[i], ar2[i]) + '<br>');
             }
        </script>
    </body>
</html>

Ausgabe:
Code:
gleich
ungleich
fast gleich
fast gleich
fast gleich
fast gleich
 
Zurück
Oben