From 289bdc162228609e841ae69a2ba1295926401ecd Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Sat, 8 May 2021 13:16:56 -0400 Subject: [PATCH] Improve term grouping (#1653) * Rename _addUniqueStrings to _addUniqueSimple * Update definition merging to not depend the sequence number * Improve naming * Update AnkiNoteDataCreator * Update docs * Remove fields that no longer exist * Update test data --- docs/interfaces/dictionary-entry.ts | 14 +- ext/js/data/anki-note-data-creator.js | 7 +- ext/js/language/translator.js | 35 ++- test/data/translator-test-results.json | 420 ++++++++++++++++++------- 4 files changed, 341 insertions(+), 135 deletions(-) diff --git a/docs/interfaces/dictionary-entry.ts b/docs/interfaces/dictionary-entry.ts index 724a0b5a..2a58f5dc 100644 --- a/docs/interfaces/dictionary-entry.ts +++ b/docs/interfaces/dictionary-entry.ts @@ -200,14 +200,6 @@ namespace Translation { * original search text, while non-primary sources originate from related terms. */ isPrimary: boolean; - /** - * Database sequence number for the term, or `-1` if multiple entries have been merged. - */ - sequence: number; - /** - * The dictionary that the sequence number originated from, or `null` if there is no sequence. - */ - sequenceDictionary: string; /** * A list of inflections that was applied to get the term. */ @@ -297,9 +289,11 @@ namespace Translation { */ dictionary: string; /** - * Database sequence number for the term. The value will be `-1` if there is no sequence. + * A list of database sequence numbers for the term. A value of `-1` corresponds to no sequence. + * The list can have multiple values if multiple definitions with different sequences have been merged. + * The list should always have at least one item. */ - sequence: number; + sequences: number; /** * Tags for the definition. */ diff --git a/ext/js/data/anki-note-data-creator.js b/ext/js/data/anki-note-data-creator.js index 3046a92e..d1bbec18 100644 --- a/ext/js/data/anki-note-data-creator.js +++ b/ext/js/data/anki-note-data-creator.js @@ -362,7 +362,7 @@ class AnkiNoteDataCreator { const definitions = []; const definitionTags = []; - for (const {tags, headwordIndices, entries, dictionary, sequence} of dictionaryEntry.definitions) { + for (const {tags, headwordIndices, entries, dictionary, sequences} of dictionaryEntry.definitions) { const definitionTags2 = []; for (const tag of tags) { definitionTags.push(this._convertTag(tag)); @@ -371,7 +371,7 @@ class AnkiNoteDataCreator { if (!hasDefinitions) { continue; } const only = merged ? DictionaryDataUtil.getDisambiguations(dictionaryEntry.headwords, headwordIndices, allTermsSet, allReadingsSet) : void 0; definitions.push({ - sequence, + sequence: sequences[0], dictionary, glossary: entries, definitionTags: definitionTags2, @@ -613,8 +613,9 @@ class AnkiNoteDataCreator { _getTermDictionaryEntrySequence(dictionaryEntry) { let hasSequence = false; let mainSequence = -1; - for (const {sequence, isPrimary} of dictionaryEntry.definitions) { + for (const {sequences, isPrimary} of dictionaryEntry.definitions) { if (!isPrimary) { continue; } + const sequence = sequences[0]; if (!hasSequence) { mainSequence = sequence; hasSequence = true; diff --git a/ext/js/language/translator.js b/ext/js/language/translator.js index 856763a5..21ea9daf 100644 --- a/ext/js/language/translator.js +++ b/ext/js/language/translator.js @@ -353,7 +353,7 @@ class Translator { const groupedDictionaryEntriesMap = new Map(); const ungroupedDictionaryEntriesMap = new Map(); for (const dictionaryEntry of dictionaryEntries) { - const {id, definitions: [{dictionary, sequence}]} = dictionaryEntry; + const {id, definitions: [{dictionary, sequences: [sequence]}]} = dictionaryEntry; if (mainDictionary === dictionary && sequence >= 0) { let group = groupedDictionaryEntriesMap.get(sequence); if (typeof group === 'undefined') { @@ -620,7 +620,7 @@ class Translator { tag1.order = Math.min(tag1.order, tag2.order); tag1.score = Math.max(tag1.score, tag2.score); tag1.dictionaries.push(...tag2.dictionaries); - this._addUniqueStrings(tag1.content, tag2.content); + this._addUniqueSimple(tag1.content, tag2.content); tags.splice(j, 1); --tagCount; --j; @@ -927,8 +927,8 @@ class Translator { return {index, term, reading, sources, tags, wordClasses}; } - _createTermDefinition(index, headwordIndices, dictionary, sequence, isPrimary, tags, entries) { - return {index, headwordIndices, dictionary, sequence, isPrimary, tags, entries}; + _createTermDefinition(index, headwordIndices, dictionary, sequences, isPrimary, tags, entries) { + return {index, headwordIndices, dictionary, sequences, isPrimary, tags, entries}; } _createTermPronunciation(index, headwordIndex, dictionary, dictionaryIndex, dictionaryPriority, pitches) { @@ -982,7 +982,7 @@ class Translator { sourceTermExactMatchCount, maxTransformedTextLength, [this._createTermHeadword(0, term, reading, [source], headwordTagGroups, rules)], - [this._createTermDefinition(0, [0], dictionary, sequence, isPrimary, definitionTagGroups, definitions)] + [this._createTermDefinition(0, [0], dictionary, [sequence], isPrimary, definitionTagGroups, definitions)] ); } @@ -1027,9 +1027,9 @@ class Translator { } } if (checkDuplicateDefinitions) { - this._addTermDefinitions2(definitions, definitionsMap, dictionaryEntry.definitions, headwordIndexMap); + this._addTermDefinitions(definitions, definitionsMap, dictionaryEntry.definitions, headwordIndexMap); } else { - this._addTermDefinitions(definitions, dictionaryEntry.definitions, headwordIndexMap); + this._addTermDefinitionsFast(definitions, dictionaryEntry.definitions, headwordIndexMap); } } @@ -1049,7 +1049,7 @@ class Translator { // Data collection addition functions - _addUniqueStrings(list, newItems) { + _addUniqueSimple(list, newItems) { for (const item of newItems) { if (!list.includes(item)) { list.push(item); @@ -1093,7 +1093,7 @@ class Translator { for (; i < ii; ++i) { const tagGroup = tagGroups[i]; if (tagGroup.dictionary === dictionary) { - this._addUniqueStrings(tagGroup.tagNames, newTagGroup.tagNames); + this._addUniqueSimple(tagGroup.tagNames, newTagGroup.tagNames); break; } } @@ -1114,7 +1114,7 @@ class Translator { } this._addUniqueSources(headword.sources, sources); this._addUniqueTagGroups(headword.tags, tags); - this._addUniqueStrings(headword.wordClasses, wordClasses); + this._addUniqueSimple(headword.wordClasses, wordClasses); headwordIndexMap.push(headword.index); } return headwordIndexMap; @@ -1143,28 +1143,29 @@ class Translator { headwordIndices.splice(start, 0, headwordIndex); } - _addTermDefinitions(definitions, newDefinitions, headwordIndexMap) { - for (const {headwordIndices, dictionary, sequence, isPrimary, tags, entries} of newDefinitions) { + _addTermDefinitionsFast(definitions, newDefinitions, headwordIndexMap) { + for (const {headwordIndices, dictionary, sequences, isPrimary, tags, entries} of newDefinitions) { const headwordIndicesNew = []; for (const headwordIndex of headwordIndices) { headwordIndicesNew.push(headwordIndexMap[headwordIndex]); } - definitions.push(this._createTermDefinition(definitions.length, headwordIndicesNew, dictionary, sequence, isPrimary, tags, entries)); + definitions.push(this._createTermDefinition(definitions.length, headwordIndicesNew, dictionary, sequences, isPrimary, tags, entries)); } } - _addTermDefinitions2(definitions, definitionsMap, newDefinitions, headwordIndexMap) { - for (const {headwordIndices, dictionary, sequence, isPrimary, tags, entries} of newDefinitions) { - const key = this._createMapKey([dictionary, sequence, ...entries]); + _addTermDefinitions(definitions, definitionsMap, newDefinitions, headwordIndexMap) { + for (const {headwordIndices, dictionary, sequences, isPrimary, tags, entries} of newDefinitions) { + const key = this._createMapKey([dictionary, ...entries]); let definition = definitionsMap.get(key); if (typeof definition === 'undefined') { - definition = this._createTermDefinition(definitions.length, [], dictionary, sequence, isPrimary, [], [...entries]); + definition = this._createTermDefinition(definitions.length, [], dictionary, [...sequences], isPrimary, [], [...entries]); definitions.push(definition); definitionsMap.set(key, definition); } else { if (isPrimary) { definition.isPrimary = true; } + this._addUniqueSimple(definition.sequences, sequences); } const newHeadwordIndices = definition.headwordIndices; diff --git a/test/data/translator-test-results.json b/test/data/translator-test-results.json index c10f9932..19cc5efc 100644 --- a/test/data/translator-test-results.json +++ b/test/data/translator-test-results.json @@ -322,7 +322,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 1, + "sequences": [ + 1 + ], "isPrimary": true, "tags": [ { @@ -454,7 +456,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 2, + "sequences": [ + 2 + ], "isPrimary": true, "tags": [ { @@ -594,7 +598,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -728,7 +734,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -862,7 +870,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -996,7 +1006,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -1128,7 +1140,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 1, + "sequences": [ + 1 + ], "isPrimary": true, "tags": [ { @@ -1260,7 +1274,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 2, + "sequences": [ + 2 + ], "isPrimary": true, "tags": [ { @@ -1400,7 +1416,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -1552,7 +1570,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -1700,7 +1720,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -1852,7 +1874,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -2006,7 +2030,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -2142,7 +2168,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -2278,7 +2306,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -2414,7 +2444,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -2546,7 +2578,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 1, + "sequences": [ + 1 + ], "isPrimary": true, "tags": [ { @@ -2678,7 +2712,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 2, + "sequences": [ + 2 + ], "isPrimary": true, "tags": [ { @@ -2816,7 +2852,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 5, + "sequences": [ + 5 + ], "isPrimary": true, "tags": [ { @@ -2944,7 +2982,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 1, + "sequences": [ + 1 + ], "isPrimary": true, "tags": [ { @@ -3082,7 +3122,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 2, + "sequences": [ + 2 + ], "isPrimary": true, "tags": [ { @@ -3222,7 +3264,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -3356,7 +3400,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -3496,7 +3542,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -3630,7 +3678,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -3770,7 +3820,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -3918,7 +3970,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -4072,7 +4126,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -4208,7 +4264,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -4348,7 +4406,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -4500,7 +4560,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -4654,7 +4716,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -4790,7 +4854,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -4928,7 +4994,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 5, + "sequences": [ + 5 + ], "isPrimary": true, "tags": [ { @@ -5028,7 +5096,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [], "entries": [ @@ -5076,7 +5146,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [], "entries": [ @@ -5124,7 +5196,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [], "entries": [ @@ -5172,7 +5246,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [], "entries": [ @@ -5222,7 +5298,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [], "entries": [ @@ -5272,7 +5350,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [], "entries": [ @@ -5322,7 +5402,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [], "entries": [ @@ -5372,7 +5454,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [], "entries": [ @@ -5418,7 +5502,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 1, + "sequences": [ + 1 + ], "isPrimary": true, "tags": [], "entries": [ @@ -5464,7 +5550,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 2, + "sequences": [ + 2 + ], "isPrimary": true, "tags": [], "entries": [ @@ -5580,7 +5668,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -5621,7 +5711,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -5773,7 +5865,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -5814,7 +5908,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -5968,7 +6064,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -6009,7 +6107,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -6145,7 +6245,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -6186,7 +6288,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -6318,7 +6422,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 1, + "sequences": [ + 1 + ], "isPrimary": true, "tags": [ { @@ -6450,7 +6556,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 2, + "sequences": [ + 2 + ], "isPrimary": true, "tags": [ { @@ -6669,7 +6777,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -6710,7 +6820,9 @@ 1 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -6751,7 +6863,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -6792,7 +6906,9 @@ 1 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -7038,7 +7154,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -7079,7 +7197,9 @@ 1 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -7120,7 +7240,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -7161,7 +7283,9 @@ 1 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -7311,7 +7435,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 1, + "sequences": [ + 1 + ], "isPrimary": true, "tags": [ { @@ -7443,7 +7569,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 2, + "sequences": [ + 2 + ], "isPrimary": true, "tags": [ { @@ -7587,7 +7715,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -7743,7 +7873,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -7895,7 +8027,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -8051,7 +8185,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -8205,7 +8341,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -8341,7 +8479,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -8477,7 +8617,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -8613,7 +8755,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -8745,7 +8889,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 1, + "sequences": [ + 1 + ], "isPrimary": true, "tags": [ { @@ -8877,7 +9023,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 2, + "sequences": [ + 2 + ], "isPrimary": true, "tags": [ { @@ -9017,7 +9165,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -9169,7 +9319,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -9317,7 +9469,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -9469,7 +9623,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -9623,7 +9779,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -9759,7 +9917,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -9895,7 +10055,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -10031,7 +10193,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -10163,7 +10327,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 1, + "sequences": [ + 1 + ], "isPrimary": true, "tags": [ { @@ -10295,7 +10461,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 2, + "sequences": [ + 2 + ], "isPrimary": true, "tags": [ { @@ -10435,7 +10603,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -10587,7 +10757,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -10735,7 +10907,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -10887,7 +11061,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -11041,7 +11217,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -11177,7 +11355,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -11313,7 +11493,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -11449,7 +11631,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -11581,7 +11765,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 1, + "sequences": [ + 1 + ], "isPrimary": true, "tags": [ { @@ -11713,7 +11899,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 2, + "sequences": [ + 2 + ], "isPrimary": true, "tags": [ { @@ -11829,7 +12017,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 6, + "sequences": [ + 6 + ], "isPrimary": true, "tags": [ { @@ -11896,7 +12086,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 7, + "sequences": [ + 7 + ], "isPrimary": true, "tags": [ { @@ -11979,7 +12171,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 6, + "sequences": [ + 6 + ], "isPrimary": true, "tags": [ { @@ -12165,7 +12359,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -12206,7 +12402,9 @@ 1 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": false, "tags": [ { @@ -12247,7 +12445,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": true, "tags": [ { @@ -12288,7 +12488,9 @@ 1 ], "dictionary": "Test Dictionary 2", - "sequence": 4, + "sequences": [ + 4 + ], "isPrimary": false, "tags": [ { @@ -12534,7 +12736,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -12575,7 +12779,9 @@ 1 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": false, "tags": [ { @@ -12616,7 +12822,9 @@ 0 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": true, "tags": [ { @@ -12657,7 +12865,9 @@ 1 ], "dictionary": "Test Dictionary 2", - "sequence": 3, + "sequences": [ + 3 + ], "isPrimary": false, "tags": [ {