Hallo,
gegeben sei der Text 'hausgartenkatzegartenhund'. Meine Funktion würde nun finden: garten , garte , arten , gart , arte , rten , gar , art , rte , ten. Ist es nun wirklich das, was man beim Kasiski-Test wirklich macht? Oder "zählt" nur das längste eines Wortes - hier also nur garten? Wenn ja, wie filtere ich zuverlässig alle anderen Treffer raus? du interessierst dich ja nicht für den Inhalt der Wiederholungen sondern für die Abstände; kürzere Doppelungen würde ich also nur registrieren, wenn die Abstände unterschiedlich sind.
Leichter gesagt als getan...
Wenn ich dich nun richtig verstehe, sagst du, dass nur das längste 'zählt'.
Heißt also: WENN längeresWort.indexOf(kürzeresWort) != -1 //Das kürzere Wort ist vollständig im längeren enthalten
UND abstandZwischenLängeresWortUndWiederholung == abstandZwischenKürzeresWortUndWiederholung //Wenn beide Abstände identisch sind
DANN kürzeresWort fliegt aus dem Array
richtig?
(Kryptogramm: hasehase
Script findet: hase , Indexe: 0 & 4 , Abstand hase - hase: 4
Script findet: has , Indexe: 0 & 4 , Abstand has - has: 4
Script findet: ase , Indexe: 1 & 5 , Abstand ase - ase: 4)
Nun wollte ich auch eine solche Prozent-Bewertung anbieten. Allerding kann ich nicht nachvollziehen, nach welchem Prinzip ich die Anzahl der gefundenen Teiler in eine Prozentangabe überführen könnte. Ich sehe auch nicht, was Prozente hier aussagen sollen; ich würde eher ein gewichtetes Scoringverfahren verwenden, um die Teiler nach Güte zu sortieren.
Schon wieder muss ich sagen, dass du mit Worten sparst. Momentan erreiche ich mit meinem Script folgende Verteilung der ganzzahligen Teiler für den zuvor erwähnten Text (links: meine Treffer , rechts: die zuvor gezeigt Prozent-Wertung):
|2 lett. 824 | 2 lett. 56.9% |3 lett. 798 | 3 lett. 54.4% |4 lett. 517 | 4 lett. 37.9% |5 lett. 106 | 5 lett. 13.4% |6 lett. 786 | 6 lett. 71.4% |7 lett. 129 | 7 lett. 12.2% |8 lett. 249 | 8 lett. 31.2% |9 lett. 371 | 9 lett. 27.7% |10 lett. 104 |10 lett. 23.3% |11 lett. 56 |11 lett. 7.1% |12 lett. 500 |12 lett. 54.8% |13 lett. 70 |13 lett. 8.8% |14 lett. 123 |14 lett. 22.7% |15 lett. 104 |15 lett. 22.6% |16 lett. 138 |16 lett. 27.8% |17 lett. 32 |17 lett. 6.4% |18 lett. 365 |18 lett. 47.3% |19 lett. 58 |19 lett. 5.7%
Gut, ich als Mensch könnte ahnen, dass da was bei 6 im Busch ist, aber wie bringe ich einem Script sowas bei? Wie kann sagen: _dies_ kommt auf Rang 1, _das_ kommt auf Rang 2 etc. oder ach schau doch mal dahin, das sieht auffällig aus?
Reinhard