summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/bg/js/dictionary.js31
-rw-r--r--ext/bg/js/translator.js3
2 files changed, 26 insertions, 8 deletions
diff --git a/ext/bg/js/dictionary.js b/ext/bg/js/dictionary.js
index 3a4a58a1..786546ea 100644
--- a/ext/bg/js/dictionary.js
+++ b/ext/bg/js/dictionary.js
@@ -222,17 +222,34 @@ function dictTermsMergeByGloss(result, definitions, appendTo=null, mergedIndices
}
if (appendTo === null) {
- // result->expressions[ Expression1[ Reading1[ Tag1, Tag2 ] ], Expression2, ... ]
- if (!result.expressions.has(expression)) {
- result.expressions.set(expression, new Map());
+ /*
+ Data layout:
+ result.expressions = new Map([
+ [expression, new Map([
+ [reading, new Map([
+ [tagName, tagInfo],
+ ...
+ ])],
+ ...
+ ])],
+ ...
+ ]);
+ */
+ let readingMap = result.expressions.get(expression);
+ if (typeof readingMap === 'undefined') {
+ readingMap = new Map();
+ result.expressions.set(expression, readingMap);
}
- if (!result.expressions.get(expression).has(reading)) {
- result.expressions.get(expression).set(reading, []);
+
+ let termTagsMap = readingMap.get(reading);
+ if (typeof termTagsMap === 'undefined') {
+ termTagsMap = new Map();
+ readingMap.set(reading, termTagsMap);
}
for (const tag of definition.termTags) {
- if (!result.expressions.get(expression).get(reading).find((existingTag) => existingTag.name === tag.name)) {
- result.expressions.get(expression).get(reading).push(tag);
+ if (!termTagsMap.has(tag.name)) {
+ termTagsMap.set(tag.name, tag);
}
}
}
diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js
index 9a69e30e..6cf07d93 100644
--- a/ext/bg/js/translator.js
+++ b/ext/bg/js/translator.js
@@ -127,7 +127,8 @@ class Translator {
const expressions = [];
for (const [expression, readingMap] of result.expressions.entries()) {
- for (const [reading, termTags] of readingMap.entries()) {
+ for (const [reading, termTagsMap] of readingMap.entries()) {
+ const termTags = [...termTagsMap.values()];
const score = termTags.map((tag) => tag.score).reduce((p, v) => p + v, 0);
expressions.push(Translator.createExpression(expression, reading, dictTagsSort(termTags), Translator.scoreToTermFrequency(score)));
}