Commit ba83919ea2f973805b6d5f4bb2d209febe8190fd

Authored by Georg Hopp
1 parent a6edfca1

fittingStrings verbessert. zuerst werden jetzt die Ergebnisse gelistet, die am A…

…nfang 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
... ... @@ -4,10 +4,14 @@
4 4
5 5 function distsort (_a, _b)
6 6 {
7   - var a = _a.substring (0, _a.indexOf('::'));
8   - var b = _b.substring (0, _b.indexOf('::'));
  7 + var a = _a.split ('::');
  8 + var b = _b.split ('::');
  9 + var cmp = a[0] - b[0];
9 10
10   - return a - b;
  11 + if (cmp == 0)
  12 + return (a[2]==b[2])?0:(a[2]<b[2])?-1:1;
  13 +
  14 + return cmp;
11 15 }
12 16
13 17 function fittingStrings (search, strings, cs)
... ... @@ -35,9 +39,38 @@ function fittingStrings (search, strings, cs)
35 39 else
36 40 _str = strings[str];
37 41
38   - var dist = levenshtein (_search, _str);
39   - var delta = _str.length - _search.length;
40   - var subDist = (delta > 0)? dist - delta: dist;
  42 + var dist = levenshtein (_search, _str);
  43 +
  44 + // --- neue version ---------------------------------
  45 + // in dieser version wird die Ähnlichkeit nur bis
  46 + // zu der Länge des kürzesten Strings geprüft, daher
  47 + // werden Ähnlichkeiten im hinteren Stringbereich
  48 + // nicht berücksichtigt. Hat zur folge das man wenn
  49 + // man z.B. nur 's' mit anderen Strings vergleicht
  50 + // als erste die Strings aufgelistet bekommt die mit s
  51 + // anfangen, die andere Version listet die, in denen
  52 + // ein s vorkommt.
  53 + var minLen = (_str.length < _search.length)?
  54 + _str.length:_search.length;
  55 + var subDist = levenshtein (
  56 + _search.substr (0, minLen), _str.substr (0, minLen));
  57 + // --------------------------------------------------
  58 +
  59 + // --- alte version ---------------------------------
  60 + // in dieser Version kommen die ähnlicheren Strings
  61 + // weiter nach oben, allerding wird die Position der
  62 + // Ähnlichkeit nicht berücksichtigt...
  63 + // Wenn die neue Version -1 gebracht hat schau ob
  64 + // überhaupt eine Ähnlichkeit drinsteckt, gib der
  65 + // aber ein penalty von minLen mit damit die nicht
  66 + // über den Einträgen steht die in der neuen Version
  67 + // ermittelt wurden.
  68 + if (subDist == minLen)
  69 + {
  70 + var delta = _str.length - _search.length;
  71 + subDist += (delta > 0)? dist - delta: dist;
  72 + }
  73 + // --------------------------------------------------
41 74
42 75 dists.push (subDist + '::' + dist + '::' + strings[str]);
43 76 }
... ...
... ... @@ -317,6 +317,7 @@ function personSearch1AltSurnameHandler (_event)
317 317 pSearch1.incSnameIdx ();
318 318 break;
319 319 case 13:
  320 + alert (pSearch1.snameDists);
320 321 return pSearch1.hide ('personSearch1_sBestFit');
321 322 default:
322 323 pSearch1.snameIdx = -1;
... ...
Please register or login to post a comment