diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-04-11 23:20:36 -0400 | 
|---|---|---|
| committer | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-04-11 23:20:36 -0400 | 
| commit | ceb12ac41551aca11bc195e5fad9984a28a5e291 (patch) | |
| tree | 65516f7a30c7e37af5b9f81dd37c601ea04878a5 | |
| parent | 82f83970001682018f1f5b595ffdcd13123fed91 (diff) | |
Add support for filtering frequency metadata based on readings
| -rw-r--r-- | ext/bg/data/dictionary-term-meta-bank-v3-schema.json | 26 | ||||
| -rw-r--r-- | ext/bg/js/translator.js | 16 | ||||
| -rw-r--r-- | test/data/dictionaries/valid-dictionary1/term_meta_bank_1.json | 6 | ||||
| -rw-r--r-- | test/test-database.js | 16 | 
4 files changed, 53 insertions, 11 deletions
| diff --git a/ext/bg/data/dictionary-term-meta-bank-v3-schema.json b/ext/bg/data/dictionary-term-meta-bank-v3-schema.json index 8475db81..ffffb546 100644 --- a/ext/bg/data/dictionary-term-meta-bank-v3-schema.json +++ b/ext/bg/data/dictionary-term-meta-bank-v3-schema.json @@ -26,8 +26,30 @@                      {},                      {"enum": ["freq"]},                      { -                        "type": ["string", "number"], -                        "description": "Frequency information for the term or expression." +                        "oneOf": [ +                            { +                                "type": ["string", "number"], +                                "description": "Frequency information for the term or expression." +                            }, +                            { +                                "type": ["object"], +                                "required": [ +                                    "reading", +                                    "frequency" +                                ], +                                "additionalProperties": false, +                                "properties": { +                                    "reading": { +                                        "type": "string", +                                        "description": "Reading for the term or expression." +                                    }, +                                    "frequency": { +                                        "type": ["string", "number"], +                                        "description": "Frequency information for the term or expression." +                                    } +                                } +                            } +                        ]                      }                  ]              }, diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index e4441384..b6f8b8e5 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -469,7 +469,9 @@ class Translator {              switch (mode) {                  case 'freq':                      for (const term of termsUnique[index]) { -                        term.frequencies.push({expression, frequency: data, dictionary}); +                        const frequencyData = this.getFrequencyData(expression, data, dictionary, term); +                        if (frequencyData === null) { continue; } +                        term.frequencies.push(frequencyData);                      }                      break;                  case 'pitch': @@ -562,6 +564,18 @@ class Translator {          return tagMetaList;      } +    getFrequencyData(expression, data, dictionary, term) { +        if (data !== null && typeof data === 'object') { +            const {frequency, reading} = data; + +            const termReading = term.reading || expression; +            if (reading !== termReading) { return null; } + +            return {expression, frequency, dictionary}; +        } +        return {expression, frequency: data, dictionary}; +    } +      async getPitchData(expression, data, dictionary, term) {          const reading = data.reading;          const termReading = term.reading || expression; diff --git a/test/data/dictionaries/valid-dictionary1/term_meta_bank_1.json b/test/data/dictionaries/valid-dictionary1/term_meta_bank_1.json index 26922394..73d74e68 100644 --- a/test/data/dictionaries/valid-dictionary1/term_meta_bank_1.json +++ b/test/data/dictionaries/valid-dictionary1/term_meta_bank_1.json @@ -2,6 +2,12 @@      ["打", "freq", 1],      ["打つ", "freq", 2],      ["打ち込む", "freq", 3], +    ["打", "freq", {"reading": "だ", "frequency": 4}], +    ["打", "freq", {"reading": "ダース", "frequency": 5}], +    ["打つ", "freq", {"reading": "うつ", "frequency": 6}], +    ["打つ", "freq", {"reading": "ぶつ", "frequency": 7}], +    ["打ち込む", "freq", {"reading": "うちこむ", "frequency": 8}], +    ["打ち込む", "freq", {"reading": "ぶちこむ", "frequency": 9}],      [          "打ち込む",          "pitch", diff --git a/test/test-database.js b/test/test-database.js index d27f92e1..8b7a163a 100644 --- a/test/test-database.js +++ b/test/test-database.js @@ -235,8 +235,8 @@ async function testDatabase1() {              true          );          vm.assert.deepStrictEqual(counts, { -            counts: [{kanji: 2, kanjiMeta: 2, terms: 32, termMeta: 6, tagMeta: 14}], -            total: {kanji: 2, kanjiMeta: 2, terms: 32, termMeta: 6, tagMeta: 14} +            counts: [{kanji: 2, kanjiMeta: 2, terms: 32, termMeta: 12, tagMeta: 14}], +            total: {kanji: 2, kanjiMeta: 2, terms: 32, termMeta: 12, tagMeta: 14}          });          // Test find* functions @@ -626,9 +626,9 @@ async function testFindTermMetaBulk1(database, titles) {                  }              ],              expectedResults: { -                total: 1, +                total: 3,                  modes: [ -                    ['freq', 1] +                    ['freq', 3]                  ]              }          }, @@ -639,9 +639,9 @@ async function testFindTermMetaBulk1(database, titles) {                  }              ],              expectedResults: { -                total: 1, +                total: 3,                  modes: [ -                    ['freq', 1] +                    ['freq', 3]                  ]              }          }, @@ -652,9 +652,9 @@ async function testFindTermMetaBulk1(database, titles) {                  }              ],              expectedResults: { -                total: 3, +                total: 5,                  modes: [ -                    ['freq', 1], +                    ['freq', 3],                      ['pitch', 2]                  ]              } |