diff --git a/ext/data/templates/anki-field-templates-upgrade-v75.handlebars b/ext/data/templates/anki-field-templates-upgrade-v75.handlebars new file mode 100644 index 0000000000..883e16f68c --- /dev/null +++ b/ext/data/templates/anki-field-templates-upgrade-v75.handlebars @@ -0,0 +1,65 @@ +{{<<<<<<<}} +{{#*inline "frequency-harmonic-rank"}} + {{~#if (op "===" definition.frequencyHarmonic -1) ~}} + 9999999 + {{~else ~}} + {{definition.frequencyHarmonic}} + {{~/if~}} +{{/inline}} + +{{#*inline "frequency-harmonic-occurrence"}} + {{~#if (op "===" definition.frequencyHarmonic -1) ~}} + 0 + {{~else ~}} + {{definition.frequencyHarmonic}} + {{~/if~}} +{{/inline}} + +{{#*inline "frequency-average-rank"}} + {{~#if (op "===" definition.frequencyAverage -1) ~}} + 9999999 + {{~else ~}} + {{definition.frequencyAverage}} + {{~/if~}} +{{/inline}} + +{{#*inline "frequency-average-occurrence"}} + {{~#if (op "===" definition.frequencyAverage -1) ~}} + 0 + {{~else ~}} + {{definition.frequencyAverage}} + {{~/if~}} +{{/inline}} +{{=======}} +{{#*inline "frequency-harmonic-rank"}} + {{~#if (op "===" definition.frequencyHarmonicRank -1) ~}} + 9999999 + {{~else ~}} + {{definition.frequencyHarmonicRank}} + {{~/if~}} +{{/inline}} + +{{#*inline "frequency-harmonic-occurrence"}} + {{~#if (op "===" definition.frequencyHarmonicOccurrence -1) ~}} + 0 + {{~else ~}} + {{definition.frequencyHarmonicOccurrence}} + {{~/if~}} +{{/inline}} + +{{#*inline "frequency-average-rank"}} + {{~#if (op "===" definition.frequencyAverageRank -1) ~}} + 9999999 + {{~else ~}} + {{definition.frequencyAverageRank}} + {{~/if~}} +{{/inline}} + +{{#*inline "frequency-average-occurrence"}} + {{~#if (op "===" definition.frequencyAverageOccurrence -1) ~}} + 0 + {{~else ~}} + {{definition.frequencyAverageOccurrence}} + {{~/if~}} +{{/inline}} +{{>>>>>>>}} diff --git a/ext/data/templates/default-anki-field-templates.handlebars b/ext/data/templates/default-anki-field-templates.handlebars index 80ec17f515..f03344108e 100644 --- a/ext/data/templates/default-anki-field-templates.handlebars +++ b/ext/data/templates/default-anki-field-templates.handlebars @@ -382,34 +382,34 @@ {{/inline}} {{#*inline "frequency-harmonic-rank"}} - {{~#if (op "===" definition.frequencyHarmonic -1) ~}} + {{~#if (op "===" definition.frequencyHarmonicRank -1) ~}} 9999999 {{~else ~}} - {{definition.frequencyHarmonic}} + {{definition.frequencyHarmonicRank}} {{~/if~}} {{/inline}} {{#*inline "frequency-harmonic-occurrence"}} - {{~#if (op "===" definition.frequencyHarmonic -1) ~}} + {{~#if (op "===" definition.frequencyHarmonicOccurrence -1) ~}} 0 {{~else ~}} - {{definition.frequencyHarmonic}} + {{definition.frequencyHarmonicOccurrence}} {{~/if~}} {{/inline}} {{#*inline "frequency-average-rank"}} - {{~#if (op "===" definition.frequencyAverage -1) ~}} + {{~#if (op "===" definition.frequencyAverageRank -1) ~}} 9999999 {{~else ~}} - {{definition.frequencyAverage}} + {{definition.frequencyAverageRank}} {{~/if~}} {{/inline}} {{#*inline "frequency-average-occurrence"}} - {{~#if (op "===" definition.frequencyAverage -1) ~}} + {{~#if (op "===" definition.frequencyAverageOccurrence -1) ~}} 0 {{~else ~}} - {{definition.frequencyAverage}} + {{definition.frequencyAverageOccurrence}} {{~/if~}} {{/inline}} diff --git a/ext/js/data/anki-note-data-creator.js b/ext/js/data/anki-note-data-creator.js index 1906b2c6c7..cd9f5de6e6 100644 --- a/ext/js/data/anki-note-data-creator.js +++ b/ext/js/data/anki-note-data-creator.js @@ -169,18 +169,26 @@ function getPublicContext(context) { }; } + /** * @param {import('dictionary').TermDictionaryEntry|import('dictionary').KanjiDictionaryEntry} dictionaryEntry * @param {number?} requestedHeadwordIndex + * @param {import('dictionary-data').FrequencyMode|undefined} [requestedFrequencyMode] * @returns {import('anki-templates').FrequencyNumber[]} */ -function getFrequencyNumbers(dictionaryEntry, requestedHeadwordIndex) { +function getFrequencyNumbers(dictionaryEntry, requestedHeadwordIndex, requestedFrequencyMode) { let previousDictionary; const frequencies = []; for (const dictionaryEntryFrequency of dictionaryEntry.frequencies) { - const {dictionary, frequency, displayValue} = dictionaryEntryFrequency; + const {dictionary, frequency, displayValue, frequencyMode} = dictionaryEntryFrequency; const wrongHeadwordIndex = Number.isInteger(requestedHeadwordIndex) && ('headwordIndex' in dictionaryEntryFrequency) && dictionaryEntryFrequency.headwordIndex !== requestedHeadwordIndex; - if (dictionary === previousDictionary || wrongHeadwordIndex) { + const wrongFrequencyMode = ( + typeof requestedFrequencyMode !== 'undefined' && + frequencyMode !== null && + typeof frequencyMode !== 'undefined' && + frequencyMode !== requestedFrequencyMode + ); + if (dictionary === previousDictionary || wrongHeadwordIndex || wrongFrequencyMode) { continue; } previousDictionary = dictionary; @@ -205,10 +213,11 @@ function getFrequencyNumbers(dictionaryEntry, requestedHeadwordIndex) { /** * @param {import('dictionary').TermDictionaryEntry|import('dictionary').KanjiDictionaryEntry} dictionaryEntry * @param {number?} headwordIndex + * @param {import('dictionary-data').FrequencyMode|undefined} [frequencyMode] * @returns {number} */ -export function getFrequencyHarmonic(dictionaryEntry, headwordIndex) { - const frequencies = getFrequencyNumbers(dictionaryEntry, headwordIndex); +export function getFrequencyHarmonic(dictionaryEntry, headwordIndex, frequencyMode) { + const frequencies = getFrequencyNumbers(dictionaryEntry, headwordIndex, frequencyMode); if (frequencies.length === 0) { return -1; @@ -224,10 +233,11 @@ export function getFrequencyHarmonic(dictionaryEntry, headwordIndex) { /** * @param {import('dictionary').TermDictionaryEntry|import('dictionary').KanjiDictionaryEntry} dictionaryEntry * @param {number?} headwordIndex + * @param {import('dictionary-data').FrequencyMode|undefined} [frequencyMode] * @returns {number} */ -function getFrequencyAverage(dictionaryEntry, headwordIndex) { - const frequencies = getFrequencyNumbers(dictionaryEntry, headwordIndex); +function getFrequencyAverage(dictionaryEntry, headwordIndex, frequencyMode) { + const frequencies = getFrequencyNumbers(dictionaryEntry, headwordIndex, frequencyMode); if (frequencies.length === 0) { return -1; @@ -345,7 +355,11 @@ function getKanjiDefinition(dictionaryEntry, context) { const tags = createCachedValue(convertTags.bind(null, dictionaryEntry.tags)); const frequencies = createCachedValue(getKanjiFrequencies.bind(null, dictionaryEntry)); const frequencyHarmonic = createCachedValue(getFrequencyHarmonic.bind(null, dictionaryEntry, null)); + const frequencyHarmonicRank = createCachedValue(getFrequencyHarmonic.bind(null, dictionaryEntry, null, 'rank-based')); + const frequencyHarmonicOccurrence = createCachedValue(getFrequencyHarmonic.bind(null, dictionaryEntry, null, 'occurrence-based')); const frequencyAverage = createCachedValue(getFrequencyAverage.bind(null, dictionaryEntry, null)); + const frequencyAverageRank = createCachedValue(getFrequencyAverage.bind(null, dictionaryEntry, null, 'rank-based')); + const frequencyAverageOccurrence = createCachedValue(getFrequencyAverage.bind(null, dictionaryEntry, null, 'occurrence-based')); const cloze = createCachedValue(getCloze.bind(null, dictionaryEntry, context)); return { @@ -360,7 +374,11 @@ function getKanjiDefinition(dictionaryEntry, context) { get stats() { return getCachedValue(stats); }, get frequencies() { return getCachedValue(frequencies); }, get frequencyHarmonic() { return getCachedValue(frequencyHarmonic); }, + get frequencyHarmonicRank() { return getCachedValue(frequencyHarmonicRank); }, + get frequencyHarmonicOccurrence() { return getCachedValue(frequencyHarmonicOccurrence); }, get frequencyAverage() { return getCachedValue(frequencyAverage); }, + get frequencyAverageRank() { return getCachedValue(frequencyAverageRank); }, + get frequencyAverageOccurrence() { return getCachedValue(frequencyAverageOccurrence); }, url, get cloze() { return getCachedValue(cloze); }, }; @@ -449,7 +467,11 @@ function getTermDefinition(dictionaryEntry, context, resultOutputMode, dictionar const frequencies = createCachedValue(getTermFrequencies.bind(null, dictionaryEntry)); const frequencyNumbers = createCachedValue(getFrequencyNumbers.bind(null, dictionaryEntry, null)); const frequencyHarmonic = createCachedValue(getFrequencyHarmonic.bind(null, dictionaryEntry, null)); + const frequencyHarmonicRank = createCachedValue(getFrequencyHarmonic.bind(null, dictionaryEntry, null, 'rank-based')); + const frequencyHarmonicOccurrence = createCachedValue(getFrequencyHarmonic.bind(null, dictionaryEntry, null, 'occurrence-based')); const frequencyAverage = createCachedValue(getFrequencyAverage.bind(null, dictionaryEntry, null)); + const frequencyAverageRank = createCachedValue(getFrequencyAverage.bind(null, dictionaryEntry, null, 'rank-based')); + const frequencyAverageOccurrence = createCachedValue(getFrequencyAverage.bind(null, dictionaryEntry, null, 'occurrence-based')); const pitches = createCachedValue(getTermPitches.bind(null, dictionaryEntry)); const phoneticTranscriptions = createCachedValue(getTermPhoneticTranscriptions.bind(null, dictionaryEntry)); const glossary = createCachedValue(getTermGlossaryArray.bind(null, dictionaryEntry, type)); @@ -492,7 +514,11 @@ function getTermDefinition(dictionaryEntry, context, resultOutputMode, dictionar get frequencies() { return getCachedValue(frequencies); }, get frequencyNumbers() { return getCachedValue(frequencyNumbers); }, get frequencyHarmonic() { return getCachedValue(frequencyHarmonic); }, + get frequencyHarmonicRank() { return getCachedValue(frequencyHarmonicRank); }, + get frequencyHarmonicOccurrence() { return getCachedValue(frequencyHarmonicOccurrence); }, get frequencyAverage() { return getCachedValue(frequencyAverage); }, + get frequencyAverageRank() { return getCachedValue(frequencyAverageRank); }, + get frequencyAverageOccurrence() { return getCachedValue(frequencyAverageOccurrence); }, get pitches() { return getCachedValue(pitches); }, get phoneticTranscriptions() { return getCachedValue(phoneticTranscriptions); }, sourceTermExactMatchCount, diff --git a/ext/js/data/options-util.js b/ext/js/data/options-util.js index 2c6f0c123f..0b10bdbe4c 100644 --- a/ext/js/data/options-util.js +++ b/ext/js/data/options-util.js @@ -586,6 +586,7 @@ export class OptionsUtil { this._updateVersion72, this._updateVersion73, this._updateVersion74, + this._updateVersion75, ]; /* eslint-enable @typescript-eslint/unbound-method */ if (typeof targetVersion === 'number' && targetVersion < result.length) { @@ -1831,6 +1832,14 @@ export class OptionsUtil { await this._applyAnkiFieldTemplatesPatch(options, '/data/templates/anki-field-templates-upgrade-v74.handlebars'); } + /** + * - Split rank-based and occurrence-based frequency field templates. + * @type {import('options-util').UpdateFunction} + */ + async _updateVersion75(options) { + await this._applyAnkiFieldTemplatesPatch(options, '/data/templates/anki-field-templates-upgrade-v75.handlebars'); + } + /** * @param {string} url * @returns {Promise} diff --git a/ext/js/language/translator.js b/ext/js/language/translator.js index 4e1474650b..9cf0c2af2f 100644 --- a/ext/js/language/translator.js +++ b/ext/js/language/translator.js @@ -48,7 +48,6 @@ export class Translator { this._textProcessors = new Map(); /** @type {import('translation-internal').ReadingNormalizerMap} */ this._readingNormalizers = new Map(); - /** @type {?Map} */ this._dictionaryFrequencyModeMap = null; /** @type {?Promise>} */ @@ -203,6 +202,7 @@ export class Translator { const termList = termReadingList.map(({term}) => term); const metas = await this._database.findTermMetaBulk(termList, dictionarySet); + const dictionaryFrequencyModeMap = await this._getDictionaryFrequencyModeMap(); /** @type {import('translator').TermFrequencySimple[]} */ const results = []; @@ -224,6 +224,7 @@ export class Translator { frequency: frequencyValue, displayValue, displayValueParsed, + frequencyMode: dictionaryFrequencyModeMap.get(dictionary), }); } return results; @@ -1265,7 +1266,6 @@ export class Translator { for (const {mode, data, dictionary, index} of metas) { const {index: dictionaryIndex} = this._getDictionaryOrder(dictionary, enabledDictionaryMap); const dictionaryAlias = this._getDictionaryAlias(dictionary, enabledDictionaryMap); - const frequencyMode = dictionaryFrequencyModeMap.get(dictionary); const map2 = headwordReadingMaps[index]; for (const [reading, targets] of map2.entries()) { switch (mode) { @@ -1274,6 +1274,7 @@ export class Translator { const hasReading = (data !== null && typeof data === 'object' && typeof data.reading === 'string'); if (hasReading && data.reading !== reading) { continue; } const frequency = hasReading ? data.frequency : /** @type {import('dictionary-data').GenericFrequencyData} */ (data); + const frequencyMode = dictionaryFrequencyModeMap.get(dictionary); for (const {frequencies, headwordIndex} of targets) { const {frequency: frequencyValue, displayValue, displayValueParsed} = this._getFrequencyInfo(frequency); frequencies.push(this._createTermFrequency( @@ -1368,6 +1369,7 @@ export class Translator { } const metas = await this._database.findKanjiMetaBulk(kanjiList, enabledDictionaryMap); + const dictionaryFrequencyModeMap = await this._getDictionaryFrequencyModeMap(); for (const {character, mode, data, dictionary, index} of metas) { const {index: dictionaryIndex} = this._getDictionaryOrder(dictionary, enabledDictionaryMap); const dictionaryAlias = this._getDictionaryAlias(dictionary, enabledDictionaryMap); @@ -1375,6 +1377,7 @@ export class Translator { case 'freq': { const {frequencies} = dictionaryEntries[index]; + const frequencyMode = dictionaryFrequencyModeMap.get(dictionary); const {frequency, displayValue, displayValueParsed} = this._getFrequencyInfo(data); frequencies.push(this._createKanjiFrequency( frequencies.length, @@ -1385,6 +1388,7 @@ export class Translator { frequency, displayValue, displayValueParsed, + frequencyMode, )); } break; @@ -1575,10 +1579,11 @@ export class Translator { * @param {number} frequency * @param {?string} displayValue * @param {boolean} displayValueParsed + * @param {import('dictionary-data').FrequencyMode|undefined} frequencyMode * @returns {import('dictionary').KanjiFrequency} */ - _createKanjiFrequency(index, dictionary, dictionaryIndex, dictionaryAlias, character, frequency, displayValue, displayValueParsed) { - return {index, dictionary, dictionaryIndex, dictionaryAlias, character, frequency, displayValue, displayValueParsed}; + _createKanjiFrequency(index, dictionary, dictionaryIndex, dictionaryAlias, character, frequency, displayValue, displayValueParsed, frequencyMode) { + return {index, dictionary, dictionaryIndex, dictionaryAlias, character, frequency, displayValue, displayValueParsed, frequencyMode: frequencyMode ?? null}; } /** diff --git a/test/data/translator-test-results-note-data1.json b/test/data/translator-test-results-note-data1.json index ae0fdc6b51..e85cf3e98e 100644 --- a/test/data/translator-test-results-note-data1.json +++ b/test/data/translator-test-results-note-data1.json @@ -133,7 +133,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "url": "url:", "cloze": { "sentence": "", @@ -297,7 +301,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "url": "url:", "cloze": { "sentence": "", @@ -612,7 +620,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -940,7 +952,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -1260,7 +1276,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -1579,7 +1599,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -1898,7 +1922,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -2217,7 +2245,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -2540,7 +2572,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -2868,7 +2904,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -3303,7 +3343,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -4051,7 +4095,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -4563,7 +4611,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -5311,7 +5363,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -5713,7 +5769,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -6037,7 +6097,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -6361,7 +6425,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -6685,7 +6753,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -7008,7 +7080,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -7336,7 +7412,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -7498,7 +7578,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -7822,7 +7906,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -8155,7 +8243,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -8474,7 +8566,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -8794,7 +8890,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -9113,7 +9213,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -9437,7 +9541,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -9756,7 +9864,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -10195,7 +10307,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -11028,7 +11144,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -11751,7 +11871,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -12075,7 +12199,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -12429,7 +12557,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -12856,7 +12988,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -13258,7 +13394,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -13582,7 +13722,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -13748,7 +13892,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -14240,7 +14388,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -15015,7 +15167,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -15444,7 +15600,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -15803,7 +15963,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -16121,7 +16285,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -16448,7 +16616,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -17190,7 +17362,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -18280,7 +18456,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 2, @@ -18592,7 +18772,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -18912,7 +19096,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -19667,7 +19855,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -20770,7 +20962,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 2, @@ -21331,7 +21527,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 2, @@ -21782,7 +21982,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -22551,7 +22755,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -23084,7 +23292,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -23853,7 +24065,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -24255,7 +24471,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -24579,7 +24799,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -24903,7 +25127,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -25227,7 +25455,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -25550,7 +25782,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -25878,7 +26114,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -26313,7 +26553,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -27061,7 +27305,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -27573,7 +27821,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -28321,7 +28573,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -28723,7 +28979,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -29047,7 +29307,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -29371,7 +29635,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -29695,7 +29963,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -30018,7 +30290,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -30346,7 +30622,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -30781,7 +31061,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -31529,7 +31813,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -32041,7 +32329,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -32789,7 +33081,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -33191,7 +33487,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -33515,7 +33815,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -33839,7 +34143,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -34163,7 +34471,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -34486,7 +34798,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -34814,7 +35130,11 @@ } ], "frequencyHarmonic": 1, + "frequencyHarmonicRank": 1, + "frequencyHarmonicOccurrence": 1, "frequencyAverage": 1, + "frequencyAverageRank": 1, + "frequencyAverageOccurrence": 1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -34975,7 +35295,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -35135,7 +35459,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -35304,7 +35632,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -36056,7 +36388,11 @@ } ], "frequencyHarmonic": 3, + "frequencyHarmonicRank": 3, + "frequencyHarmonicOccurrence": 3, "frequencyAverage": 3, + "frequencyAverageRank": 3, + "frequencyAverageOccurrence": 3, "pitches": [ { "index": 0, @@ -37146,7 +37482,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -37315,7 +37655,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [ { "index": 0, @@ -37609,7 +37953,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [ { "index": 0, @@ -37797,7 +38145,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [ { "index": 0, @@ -37985,7 +38337,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [ { "index": 0, @@ -38173,7 +38529,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [ { "index": 0, @@ -38367,7 +38727,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [ { "index": 0, @@ -38605,7 +38969,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -38745,7 +39113,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -38847,7 +39219,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -38961,7 +39337,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -39075,7 +39455,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -39395,7 +39779,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -39714,7 +40102,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -40038,7 +40430,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -40357,7 +40753,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -40514,7 +40914,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -40834,7 +41238,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -41153,7 +41561,11 @@ } ], "frequencyHarmonic": 2, + "frequencyHarmonicRank": 2, + "frequencyHarmonicOccurrence": 2, "frequencyAverage": 2, + "frequencyAverageRank": 2, + "frequencyAverageOccurrence": 2, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -41288,7 +41700,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 0, @@ -41406,7 +41822,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -41520,7 +41940,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -41638,7 +42062,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -41752,7 +42180,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -41866,7 +42298,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -41975,7 +42411,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -42089,7 +42529,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -42198,7 +42642,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -42316,7 +42764,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, @@ -42425,7 +42877,11 @@ "frequencies": [], "frequencyNumbers": [], "frequencyHarmonic": -1, + "frequencyHarmonicRank": -1, + "frequencyHarmonicOccurrence": -1, "frequencyAverage": -1, + "frequencyAverageRank": -1, + "frequencyAverageOccurrence": -1, "pitches": [], "phoneticTranscriptions": [], "sourceTermExactMatchCount": 1, diff --git a/test/data/translator-test-results.json b/test/data/translator-test-results.json index 78569f17e5..3246a41543 100644 --- a/test/data/translator-test-results.json +++ b/test/data/translator-test-results.json @@ -116,7 +116,8 @@ "character": "打", "frequency": 1, "displayValue": null, - "displayValueParsed": false + "displayValueParsed": false, + "frequencyMode": null }, { "index": 1, @@ -126,7 +127,8 @@ "character": "打", "frequency": 0, "displayValue": "three", - "displayValueParsed": true + "displayValueParsed": true, + "frequencyMode": null }, { "index": 2, @@ -136,7 +138,8 @@ "character": "打", "frequency": 5, "displayValue": null, - "displayValueParsed": false + "displayValueParsed": false, + "frequencyMode": null } ] } @@ -258,7 +261,8 @@ "character": "込", "frequency": 2, "displayValue": null, - "displayValueParsed": false + "displayValueParsed": false, + "frequencyMode": null }, { "index": 1, @@ -268,7 +272,8 @@ "character": "込", "frequency": 4, "displayValue": "four (4)", - "displayValueParsed": true + "displayValueParsed": true, + "frequencyMode": null }, { "index": 2, @@ -278,7 +283,8 @@ "character": "込", "frequency": 6, "displayValue": "six", - "displayValueParsed": false + "displayValueParsed": false, + "frequencyMode": null } ] } diff --git a/test/options-util.test.js b/test/options-util.test.js index 9751753c47..9661ccdbb0 100644 --- a/test/options-util.test.js +++ b/test/options-util.test.js @@ -705,7 +705,7 @@ function createOptionsUpdatedTestData1() { }, ], profileCurrent: 0, - version: 74, + version: 75, global: { database: { prefixWildcardsSupported: false, @@ -2018,6 +2018,77 @@ describe('OptionsUtil', () => { {{~/if~}} {{/inline}} +`.trimStart(), + }, + { + oldVersion: 74, + newVersion: 75, + old: ` +{{#*inline "frequency-harmonic-rank"}} + {{~#if (op "===" definition.frequencyHarmonic -1) ~}} + 9999999 + {{~else ~}} + {{definition.frequencyHarmonic}} + {{~/if~}} +{{/inline}} + +{{#*inline "frequency-harmonic-occurrence"}} + {{~#if (op "===" definition.frequencyHarmonic -1) ~}} + 0 + {{~else ~}} + {{definition.frequencyHarmonic}} + {{~/if~}} +{{/inline}} + +{{#*inline "frequency-average-rank"}} + {{~#if (op "===" definition.frequencyAverage -1) ~}} + 9999999 + {{~else ~}} + {{definition.frequencyAverage}} + {{~/if~}} +{{/inline}} + +{{#*inline "frequency-average-occurrence"}} + {{~#if (op "===" definition.frequencyAverage -1) ~}} + 0 + {{~else ~}} + {{definition.frequencyAverage}} + {{~/if~}} +{{/inline}} +`.trimStart(), + + expected: ` +{{#*inline "frequency-harmonic-rank"}} + {{~#if (op "===" definition.frequencyHarmonicRank -1) ~}} + 9999999 + {{~else ~}} + {{definition.frequencyHarmonicRank}} + {{~/if~}} +{{/inline}} + +{{#*inline "frequency-harmonic-occurrence"}} + {{~#if (op "===" definition.frequencyHarmonicOccurrence -1) ~}} + 0 + {{~else ~}} + {{definition.frequencyHarmonicOccurrence}} + {{~/if~}} +{{/inline}} + +{{#*inline "frequency-average-rank"}} + {{~#if (op "===" definition.frequencyAverageRank -1) ~}} + 9999999 + {{~else ~}} + {{definition.frequencyAverageRank}} + {{~/if~}} +{{/inline}} + +{{#*inline "frequency-average-occurrence"}} + {{~#if (op "===" definition.frequencyAverageOccurrence -1) ~}} + 0 + {{~else ~}} + {{definition.frequencyAverageOccurrence}} + {{~/if~}} +{{/inline}} `.trimStart(), }, ]; diff --git a/types/ext/anki-templates.d.ts b/types/ext/anki-templates.d.ts index 4862c22029..b72bc63edc 100644 --- a/types/ext/anki-templates.d.ts +++ b/types/ext/anki-templates.d.ts @@ -135,7 +135,11 @@ export type KanjiDictionaryEntry = { readonly stats: KanjiStatGroups; readonly frequencies: KanjiFrequency[]; readonly frequencyHarmonic: number; + readonly frequencyHarmonicRank: number; + readonly frequencyHarmonicOccurrence: number; readonly frequencyAverage: number; + readonly frequencyAverageRank: number; + readonly frequencyAverageOccurrence: number; url: string; readonly cloze: Cloze; }; @@ -196,7 +200,11 @@ export type TermDictionaryEntry = { readonly frequencies: TermFrequency[]; readonly frequencyNumbers: FrequencyNumber[]; readonly frequencyHarmonic: number; + readonly frequencyHarmonicRank: number; + readonly frequencyHarmonicOccurrence: number; readonly frequencyAverage: number; + readonly frequencyAverageRank: number; + readonly frequencyAverageOccurrence: number; readonly pitches: TermPitchAccent[]; readonly phoneticTranscriptions: TermPhoneticTranscription[]; sourceTermExactMatchCount: number; diff --git a/types/ext/dictionary.d.ts b/types/ext/dictionary.d.ts index 373e2445cc..d9c79dc364 100644 --- a/types/ext/dictionary.d.ts +++ b/types/ext/dictionary.d.ts @@ -198,6 +198,10 @@ export type KanjiFrequency = { * Whether or not the displayValue string was parsed to determine the frequency value. */ displayValueParsed: boolean; + /** + * How the frequency should be interpreted. + */ + frequencyMode: DictionaryData.FrequencyMode | null; }; // Terms diff --git a/types/ext/translator.d.ts b/types/ext/translator.d.ts index 5d417eb6fd..5e61245ac8 100644 --- a/types/ext/translator.d.ts +++ b/types/ext/translator.d.ts @@ -17,6 +17,7 @@ import type * as Dictionary from './dictionary'; import type * as DictionaryDatabaseTypes from './dictionary-database'; +import type * as DictionaryData from './dictionary-data'; /** * Information about how popup content should be shown, specifically related to the outer popup frame. @@ -36,6 +37,8 @@ export type TermFrequencySimple = { displayValue: string | null; /** Whether or not the `frequency` field is derived from a parsed string. */ displayValueParsed: boolean; + /** How the frequency should be interpreted. */ + frequencyMode?: DictionaryData.FrequencyMode; }; export type TagGroup = {