summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorAlex Yatskov <alex@foosoft.net>2017-09-12 18:29:16 -0700
committerAlex Yatskov <alex@foosoft.net>2017-09-12 18:29:16 -0700
commit3b29893072b89b75c7fd82b9138b09572ec6248c (patch)
treec4ce890485b434c6d4fd5c73c6eb8047317d91d8 /ext
parent28364b97b0dcc72ecde43aad32f8c58561895382 (diff)
add frequency table support for terms
Diffstat (limited to 'ext')
-rw-r--r--ext/bg/js/database.js34
-rw-r--r--ext/bg/js/translator.js7
2 files changed, 40 insertions, 1 deletions
diff --git a/ext/bg/js/database.js b/ext/bg/js/database.js
index 4a4f5e82..ea55416c 100644
--- a/ext/bg/js/database.js
+++ b/ext/bg/js/database.js
@@ -87,6 +87,21 @@ class Database {
return results;
}
+ async findTermFreq(term, titles) {
+ if (!this.db) {
+ throw 'database not initialized';
+ }
+
+ const results = [];
+ await this.db.termFreq.where('expression').equals(term).each(row => {
+ if (titles.includes(row.dictionary)) {
+ results.push({frequency: row.frequency, dictionary: row.dictionary});
+ }
+ });
+
+ return results;
+ }
+
async findKanji(kanji, titles) {
if (!this.db) {
return Promise.reject('database not initialized');
@@ -174,6 +189,23 @@ class Database {
await this.db.terms.bulkAdd(utilIsolate(rows));
};
+ const termFreqDataLoaded = async (title, entries, total, current) => {
+ if (callback) {
+ callback(total, current);
+ }
+
+ const rows = [];
+ for (const [expression, frequency] of entries) {
+ rows.push({
+ expression,
+ frequency,
+ dictionary: title
+ });
+ }
+
+ await this.db.termFreq.bulkAdd(utilIsolate(rows));
+ };
+
const kanjiDataLoaded = async (title, entries, total, current) => {
if (callback) {
callback(total, current);
@@ -219,7 +251,7 @@ class Database {
archive,
indexDataLoaded,
termDataLoaded,
- null,
+ termFreqDataLoaded,
kanjiDataLoaded,
null,
tagDataLoaded
diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js
index 1be485c7..3b9a1128 100644
--- a/ext/bg/js/translator.js
+++ b/ext/bg/js/translator.js
@@ -62,7 +62,14 @@ class Translator {
for (const definition of deinflection.definitions) {
const tags = definition.tags.map(tag => dictTagBuild(tag, definition.tagMeta));
tags.push(dictTagBuildSource(definition.dictionary));
+
+ let frequencies = await this.database.findTermFreq(definition.expression, titles);
+ if (frequencies.length === 0) {
+ frequencies = await this.database.findTermFreq(definition.reading, titles);
+ }
+
definitions.push({
+ frequencies,
source: deinflection.source,
reasons: deinflection.reasons,
score: definition.score,