diff options
| author | Geo Halkiadakis <gchalkiadakis@sklavenitis.co.gr> | 2024-04-15 18:41:27 +0300 |
|---|---|---|
| committer | Geo Halkiadakis <gchalkiadakis@sklavenitis.co.gr> | 2024-04-15 18:41:27 +0300 |
| commit | 3894db0824bbb0023bce8402f1c4f578504fb8ce (patch) | |
| tree | d74e86ea41fb83ede379429e7b9bc3e4408f96ba /benchmark | |
| parent | b122279ece06a9381e805c6087f130b41616fe3d (diff) | |
| download | oseine-3894db0824bbb0023bce8402f1c4f578504fb8ce.tar.gz oseine-3894db0824bbb0023bce8402f1c4f578504fb8ce.tar.bz2 oseine-3894db0824bbb0023bce8402f1c4f578504fb8ce.zip | |
refactoring routes; added weighted exact and partial match routines
Diffstat (limited to 'benchmark')
| -rw-r--r-- | benchmark/match-str.js | 48 |
1 files changed, 35 insertions, 13 deletions
diff --git a/benchmark/match-str.js b/benchmark/match-str.js index fa802c1..2114f41 100644 --- a/benchmark/match-str.js +++ b/benchmark/match-str.js @@ -2,6 +2,7 @@ var microtime = require('microtime'); const match = require('../utils/match-util.js'); const memory_usage = require('../utils/mem-usage.js'); +const kb = require('../utils/kb-util.js'); const products = require('../data/products.json'); @@ -25,27 +26,48 @@ function run(query) { } } -// sumple search implementation -function matchQuery(q) { +// sample search implementation +function matchQuery(query) { var result = []; + let q = kb.keyboardize(query); + for(let i = 0; i < products.length; i++) { + + let rate = 0; let found = false; - let similarity = 0; - products[i].kb.split(' ').forEach( w => { - let sim = match.resemblance(q, w, 2); - if (sim > 0.5) { - found = true; - similarity = (sim > similarity) ? sim : similarity; - } - }); + let x; + let src = products[i].kb.split(' '); // (array) source of product (key-)words + if ((x = match.weighted_exact(q, src)) > 0) { + // console.log(products[i].kb, x); + rate = 5.0 + x; + found = true; + } + else if ((x = match.weighted_partial(q, src)) > 0) { + rate = 3.0 + x; + found = true; + } + else { + let similarity = 0; + src.forEach( w => { + let sim = match.resemblance(q, w, 2); + if (sim > 0.6) { + found = true; + similarity = (sim > similarity) ? sim : similarity; + } + }); + if (found) { + rate = 2 * similarity; + } + } + if (found) { - products[i].similarity = similarity; + products[i].rate = rate; result.push(products[i]); - } + } } - return result + return result.sort((a,b) => b.rate - a.rate).slice(0, 48);; } |
