Wort-Vergleich Algorithmus

Guten Morgen :wink:
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:
[TABLE=„class: grid, width: 400“]
[TR]
[TD]Wort1[/TD]
[TD]Wort2[/TD]
[TD]Auswertung[/TD]
[/TR]
[TR]
[TD]Auto[/TD]
[TD]Auto[/TD]
[TD]gleich[/TD]
[/TR]
[TR]
[TD]Auto[/TD]
[TD]Katze[/TD]
[TD]falsch[/TD]
[/TR]
[TR]
[TD]Auto[/TD]
[TD]Aut[/TD]
[TD]fast[/TD]
[/TR]
[TR]
[TD]Auto[/TD]
[TD]Autom[/TD]
[TD]fast[/TD]
[/TR]
[TR]
[TD]Guten Morgen[/TD]
[TD]Guten[/TD]
[TD]fast[/TD]
[/TR]
[TR]
[TD]Guten Morgen[/TD]
[TD]Morgen[/TD]
[TD]fast[/TD]
[/TR]
[/TABLE]

Dafür kannst Du die if-Bedingung verwenden.

if( wort1 == wort2 ){..}

Das ist mir klar. Aber diese if-Bedingung sagt mir nicht, ob sie fast gleich sind…

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) {
… ;
} ;
}[/PHP]

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.

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?

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 :o), ich denke mal das dies eine sehr elegante Lösung geworden ist.

[HTML]

JScript [/HTML]

Ausgabe:

gleich
ungleich
fast gleich
fast gleich
fast gleich
fast gleich