Update how apiTermsFind works
This commit is contained in:
parent
ae10bb7096
commit
af1662acad
@ -74,21 +74,7 @@ async function apiOptionsSave(source) {
|
|||||||
|
|
||||||
async function apiTermsFind(text, optionsContext) {
|
async function apiTermsFind(text, optionsContext) {
|
||||||
const options = await apiOptionsGet(optionsContext);
|
const options = await apiOptionsGet(optionsContext);
|
||||||
const translator = utilBackend().translator;
|
const [definitions, length] = await utilBackend().translator.findTerms(text, options);
|
||||||
|
|
||||||
const searcher = {
|
|
||||||
'merge': translator.findTermsMerged,
|
|
||||||
'split': translator.findTermsSplit,
|
|
||||||
'group': translator.findTermsGrouped
|
|
||||||
}[options.general.resultOutputMode].bind(translator);
|
|
||||||
|
|
||||||
const {definitions, length} = await searcher(
|
|
||||||
text,
|
|
||||||
dictEnabledSet(options),
|
|
||||||
options.scanning.alphanumeric,
|
|
||||||
options
|
|
||||||
);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
length,
|
length,
|
||||||
definitions: definitions.slice(0, options.general.maxResults)
|
definitions: definitions.slice(0, options.general.maxResults)
|
||||||
|
@ -141,9 +141,23 @@ class Translator {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
async findTermsGrouped(text, dictionaries, alphanumeric, options) {
|
async findTerms(text, options) {
|
||||||
|
switch (options.general.resultOutputMode) {
|
||||||
|
case 'group':
|
||||||
|
return await this.findTermsGrouped(text, options);
|
||||||
|
case 'merge':
|
||||||
|
return await this.findTermsMerged(text, options);
|
||||||
|
case 'split':
|
||||||
|
return await this.findTermsSplit(text, options);
|
||||||
|
default:
|
||||||
|
return [[], 0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async findTermsGrouped(text, options) {
|
||||||
|
const dictionaries = dictEnabledSet(options);
|
||||||
const titles = Object.keys(dictionaries);
|
const titles = Object.keys(dictionaries);
|
||||||
const {length, definitions} = await this.findTermsInternal(text, dictionaries, alphanumeric);
|
const [definitions, length] = await this.findTermsInternal(text, dictionaries, options.scanning.alphanumeric);
|
||||||
|
|
||||||
const definitionsGrouped = dictTermsGroup(definitions, dictionaries);
|
const definitionsGrouped = dictTermsGroup(definitions, dictionaries);
|
||||||
await this.buildTermFrequencies(definitionsGrouped, titles);
|
await this.buildTermFrequencies(definitionsGrouped, titles);
|
||||||
@ -154,13 +168,14 @@ class Translator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {length, definitions: definitionsGrouped};
|
return [definitionsGrouped, length];
|
||||||
}
|
}
|
||||||
|
|
||||||
async findTermsMerged(text, dictionaries, alphanumeric, options) {
|
async findTermsMerged(text, options) {
|
||||||
|
const dictionaries = dictEnabledSet(options);
|
||||||
const secondarySearchTitles = Object.keys(options.dictionaries).filter(dict => options.dictionaries[dict].allowSecondarySearches);
|
const secondarySearchTitles = Object.keys(options.dictionaries).filter(dict => options.dictionaries[dict].allowSecondarySearches);
|
||||||
const titles = Object.keys(dictionaries);
|
const titles = Object.keys(dictionaries);
|
||||||
const {length, definitions} = await this.findTermsInternal(text, dictionaries, alphanumeric);
|
const [definitions, length] = await this.findTermsInternal(text, dictionaries, options.scanning.alphanumeric);
|
||||||
const {sequencedDefinitions, defaultDefinitions} = await this.getSequencedDefinitions(definitions, options.general.mainDictionary);
|
const {sequencedDefinitions, defaultDefinitions} = await this.getSequencedDefinitions(definitions, options.general.mainDictionary);
|
||||||
const definitionsMerged = [];
|
const definitionsMerged = [];
|
||||||
const mergedByTermIndices = new Set();
|
const mergedByTermIndices = new Set();
|
||||||
@ -191,23 +206,24 @@ class Translator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {length, definitions: dictTermsSort(definitionsMerged)};
|
return [dictTermsSort(definitionsMerged), length];
|
||||||
}
|
}
|
||||||
|
|
||||||
async findTermsSplit(text, dictionaries, alphanumeric) {
|
async findTermsSplit(text, options) {
|
||||||
|
const dictionaries = dictEnabledSet(options);
|
||||||
const titles = Object.keys(dictionaries);
|
const titles = Object.keys(dictionaries);
|
||||||
const {length, definitions} = await this.findTermsInternal(text, dictionaries, alphanumeric);
|
const [definitions, length] = await this.findTermsInternal(text, dictionaries, options.scanning.alphanumeric);
|
||||||
|
|
||||||
await this.buildTermFrequencies(definitions, titles);
|
await this.buildTermFrequencies(definitions, titles);
|
||||||
|
|
||||||
return {length, definitions};
|
return [definitions, length];
|
||||||
}
|
}
|
||||||
|
|
||||||
async findTermsInternal(text, dictionaries, alphanumeric) {
|
async findTermsInternal(text, dictionaries, alphanumeric) {
|
||||||
if (!alphanumeric && text.length > 0) {
|
if (!alphanumeric && text.length > 0) {
|
||||||
const c = text[0];
|
const c = text[0];
|
||||||
if (!jpIsKana(c) && !jpIsKanji(c)) {
|
if (!jpIsKana(c) && !jpIsKanji(c)) {
|
||||||
return {length: 0, definitions: []};
|
return [[], 0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -246,7 +262,7 @@ class Translator {
|
|||||||
length = Math.max(length, definition.source.length);
|
length = Math.max(length, definition.source.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {length, definitions};
|
return [definitions, length];
|
||||||
}
|
}
|
||||||
|
|
||||||
async findTermDeinflections(text, text2, titles) {
|
async findTermDeinflections(text, text2, titles) {
|
||||||
|
Loading…
Reference in New Issue
Block a user