summaryrefslogtreecommitdiff
path: root/benchmark/match-str.js
diff options
context:
space:
mode:
Diffstat (limited to 'benchmark/match-str.js')
-rw-r--r--benchmark/match-str.js48
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);;
}