From ba83919ea2f973805b6d5f4bb2d209febe8190fd Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Thu, 11 Oct 2007 09:14:47 +0000 Subject: [PATCH] =?UTF-8?q?fittingStrings=20verbessert.=20zuerst=20werden?= =?UTF-8?q?=20jetzt=20die=20Ergebnisse=20gelistet,=20die=20am=20Anfang=20d?= =?UTF-8?q?er=20Strings=20passen,=20dann=20die=20die=20irgendwo=20passen?= =?UTF-8?q?=20und=20zuletzt=20wenn=20noch=20Alternativen=20zu=20f=C3=BClle?= =?UTF-8?q?n=20sind,=20die=20die=20gar=20nicht=20passen.=20Au=C3=9Fderm=20?= =?UTF-8?q?wird=20jetzt=20bei=20gleicher=20Dist=20alphabethisch=20sortiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/fittingStrings.js | 45 ++++++++++++++++++++++++++++----- js/personAdmin/personSearch1.js | 1 + 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/js/fittingStrings.js b/js/fittingStrings.js index 1fbab71..7392f0f 100644 --- a/js/fittingStrings.js +++ b/js/fittingStrings.js @@ -4,10 +4,14 @@ function distsort (_a, _b) { - var a = _a.substring (0, _a.indexOf('::')); - var b = _b.substring (0, _b.indexOf('::')); + var a = _a.split ('::'); + var b = _b.split ('::'); + var cmp = a[0] - b[0]; - return a - b; + if (cmp == 0) + return (a[2]==b[2])?0:(a[2] 0)? dist - delta: dist; + var dist = levenshtein (_search, _str); + + // --- neue version --------------------------------- + // in dieser version wird die Ähnlichkeit nur bis + // zu der Länge des kürzesten Strings geprüft, daher + // werden Ähnlichkeiten im hinteren Stringbereich + // nicht berücksichtigt. Hat zur folge das man wenn + // man z.B. nur 's' mit anderen Strings vergleicht + // als erste die Strings aufgelistet bekommt die mit s + // anfangen, die andere Version listet die, in denen + // ein s vorkommt. + var minLen = (_str.length < _search.length)? + _str.length:_search.length; + var subDist = levenshtein ( + _search.substr (0, minLen), _str.substr (0, minLen)); + // -------------------------------------------------- + + // --- alte version --------------------------------- + // in dieser Version kommen die ähnlicheren Strings + // weiter nach oben, allerding wird die Position der + // Ähnlichkeit nicht berücksichtigt... + // Wenn die neue Version -1 gebracht hat schau ob + // überhaupt eine Ähnlichkeit drinsteckt, gib der + // aber ein penalty von minLen mit damit die nicht + // über den Einträgen steht die in der neuen Version + // ermittelt wurden. + if (subDist == minLen) + { + var delta = _str.length - _search.length; + subDist += (delta > 0)? dist - delta: dist; + } + // -------------------------------------------------- dists.push (subDist + '::' + dist + '::' + strings[str]); } diff --git a/js/personAdmin/personSearch1.js b/js/personAdmin/personSearch1.js index 807779d..4183ef6 100644 --- a/js/personAdmin/personSearch1.js +++ b/js/personAdmin/personSearch1.js @@ -317,6 +317,7 @@ function personSearch1AltSurnameHandler (_event) pSearch1.incSnameIdx (); break; case 13: + alert (pSearch1.snameDists); return pSearch1.hide ('personSearch1_sBestFit'); default: pSearch1.snameIdx = -1;