Commit ba83919ea2f973805b6d5f4bb2d209febe8190fd
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
Showing
2 changed files
with
40 additions
and
6 deletions
... | ... | @@ -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 | } | ... | ... |
Please
register
or
login
to post a comment