Browse Source

fittingStrings verbessert. zuerst werden jetzt die Ergebnisse gelistet, die am Anfang der Strings passen, dann die die irgendwo passen und zuletzt wenn noch Alternativen zu füllen sind, die die gar nicht passen. Außderm wird jetzt bei gleicher Dist alphabethisch sortiert

master
Georg Hopp 18 years ago
parent
commit
ba83919ea2
  1. 45
      js/fittingStrings.js
  2. 1
      js/personAdmin/personSearch1.js

45
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]<b[2])?-1:1;
return cmp;
}
function fittingStrings (search, strings, cs)
@ -35,9 +39,38 @@ function fittingStrings (search, strings, cs)
else
_str = strings[str];
var dist = levenshtein (_search, _str);
var delta = _str.length - _search.length;
var subDist = (delta > 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]);
}

1
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;

Loading…
Cancel
Save