This repository has been archived by the owner on Apr 18, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 24
/
worker2.js
47 lines (44 loc) · 1.69 KB
/
worker2.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
importScripts('string_score.min.js');
var data;
var DEBUG = false;
var fields = ['Department', 'Semester', 'Paper', 'Year'];
onmessage = function(e) {
if (e.data.type === 'data') {
if (DEBUG) console.log('Got data');
data = e.data.data;
for (var i = 0; i < data.length; ++i) {
for (var f = 0; f < fields.length; ++f) {
data[i][fields[f]] = data[i][fields[f]].toLowerCase();
}
}
} else if (e.data.type === 'query') {
var query = e.data.query;
query = query.toLowerCase();
var terms = query.split(/\s+/);
var fuzz = 0.3;
console.log('got query: ', query);
for (var j = 0; j < data.length; ++j) {
data[j].score = {'Department': 0, 'Semester': 0, 'Paper': 0, 'Year': 0, 'total': 1};
for (var t = 0; t < terms.length; ++t) {
var maxTermScore = 0, maxField;
for (var f = 0; f < fields.length; ++f) {
var termFieldScore = data[j][fields[f]].score(terms[t], fuzz);
if (termFieldScore > maxTermScore) {
maxTermScore = termFieldScore;
maxField = f;
}
}
data[j].score[fields[maxField]] += maxTermScore;
}
for (var f = 0; f < fields.length; ++f) {
data[j].score.total += Math.pow(Math.max(data[j].score[fields[f]], 0.2) - 0.2, 1);
}
}
data.sort(function(a, b) {
return b.score.total - a.score.total;
});
var results = data.slice(0, 40);
console.log('results: ', results);
postMessage(results);
}
};