Better control over result ordering. This fixes #12
This commit is contained in:
parent
28e217b75b
commit
9649a83181
@ -26,12 +26,12 @@ class Deinflection {
|
||||
}
|
||||
|
||||
validate(validator) {
|
||||
for (let tags of validator(this.term)) {
|
||||
for (const tags of validator(this.term)) {
|
||||
if (this.tags.length === 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
for (let tag of this.tags) {
|
||||
for (const tag of this.tags) {
|
||||
if (tags.indexOf(tag) !== -1) {
|
||||
return true;
|
||||
}
|
||||
@ -47,11 +47,11 @@ class Deinflection {
|
||||
this.children.push(child);
|
||||
}
|
||||
|
||||
for (let rule in rules) {
|
||||
for (const rule in rules) {
|
||||
const variants = rules[rule];
|
||||
for (let v of variants) {
|
||||
for (const v of variants) {
|
||||
let allowed = this.tags.length === 0;
|
||||
for (let tag of this.tags) {
|
||||
for (const tag of this.tags) {
|
||||
if (v.ti.indexOf(tag) !== -1) {
|
||||
allowed = true;
|
||||
break;
|
||||
@ -79,8 +79,8 @@ class Deinflection {
|
||||
}
|
||||
|
||||
const paths = [];
|
||||
for (let child of this.children) {
|
||||
for (let path of child.gather()) {
|
||||
for (const child of this.children) {
|
||||
for (const path of child.gather()) {
|
||||
if (this.rule.length > 0) {
|
||||
path.rules.push(this.rule);
|
||||
}
|
||||
|
@ -95,11 +95,11 @@ class Translator {
|
||||
return 1;
|
||||
}
|
||||
|
||||
const p1 = v1.popular;
|
||||
const p2 = v2.popular;
|
||||
if (p1 && !p2) {
|
||||
const s1 = v1.score;
|
||||
const s2 = v2.score;
|
||||
if (s1 > s2) {
|
||||
return -1;
|
||||
} else if (!p1 && p2) {
|
||||
} else if (s1 < s2) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -154,31 +154,33 @@ class Translator {
|
||||
continue;
|
||||
}
|
||||
|
||||
let popular = false;
|
||||
const tags = [];
|
||||
for (const name of entry.tags) {
|
||||
const tag = {
|
||||
name,
|
||||
class: 'default',
|
||||
order: Number.MAX_SAFE_INTEGER,
|
||||
score: 0,
|
||||
desc: entry.entities[name] || '',
|
||||
};
|
||||
|
||||
let tags = [];
|
||||
for (const t of entry.tags) {
|
||||
const tag = {class: 'default', order: Number.MAX_SAFE_INTEGER, desc: entry.entities[t] || '', name: t};
|
||||
this.applyTagMeta(tag);
|
||||
tags.push(tag);
|
||||
|
||||
//
|
||||
// TODO: Handle tagging as popular through data.
|
||||
//
|
||||
|
||||
if (t === 'P') {
|
||||
popular = true;
|
||||
}
|
||||
|
||||
let score = 0;
|
||||
for (const tag of tags) {
|
||||
score += tag.score;
|
||||
}
|
||||
|
||||
groups[entry.id] = {
|
||||
score,
|
||||
expression: entry.expression,
|
||||
reading: entry.reading,
|
||||
glossary: entry.glossary,
|
||||
tags: Translator.sortTags(tags),
|
||||
source: dfSource,
|
||||
rules: dfRules,
|
||||
popular: popular
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -188,13 +190,26 @@ class Translator {
|
||||
|
||||
for (const entry of entries) {
|
||||
const tags = [];
|
||||
for (const t of entry.tags) {
|
||||
const tag = {class: 'default', order: Number.MAX_SAFE_INTEGER, desc: '', name: t};
|
||||
for (const name of entry.tags) {
|
||||
const tag = {
|
||||
name,
|
||||
class: 'default',
|
||||
order: Number.MAX_SAFE_INTEGER,
|
||||
score: 0,
|
||||
desc: '',
|
||||
};
|
||||
|
||||
this.applyTagMeta(tag);
|
||||
tags.push(tag);
|
||||
}
|
||||
|
||||
let score = 0;
|
||||
for (const tag of tags) {
|
||||
score += tag.score;
|
||||
}
|
||||
|
||||
processed.push({
|
||||
score,
|
||||
character: entry.character,
|
||||
kunyomi: entry.kunyomi,
|
||||
onyomi: entry.onyomi,
|
||||
|
Loading…
Reference in New Issue
Block a user