matchType/deinflect distinction (#2040)

* Pass a "deinflect" option to findTerms

* Update Translator to use deinflect option

* Fix test input options
This commit is contained in:
toasted-nutbread 2021-12-17 17:02:13 -05:00 committed by GitHub
parent 8e548a17eb
commit 8a377cabe6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 18 additions and 21 deletions

View File

@ -1080,7 +1080,7 @@ class Backend {
const jp = this._japaneseUtil;
const mode = 'simple';
const options = this._getProfileOptions(optionsContext);
const details = {matchType: 'exact'};
const details = {matchType: 'exact', deinflect: true};
const findTermsOptions = this._getTranslatorFindTermsOptions(mode, details, options);
const results = [];
let previousUngroupedSegment = null;
@ -1959,8 +1959,9 @@ class Backend {
}
_getTranslatorFindTermsOptions(mode, details, options) {
let {matchType} = details;
let {matchType, deinflect} = details;
if (typeof matchType !== 'string') { matchType = 'exact'; }
if (typeof deinflect !== 'boolean') { deinflect = true; }
const enabledDictionaryMap = this._getTranslatorEnabledDictionaryMap(options);
const {
general: {mainDictionary, sortFrequencyDictionary, sortFrequencyDictionaryOrder},
@ -1988,6 +1989,7 @@ class Backend {
}
return {
matchType,
deinflect,
mainDictionary,
sortFrequencyDictionary,
sortFrequencyDictionaryOrder,

View File

@ -851,8 +851,10 @@ class Display extends EventDispatcher {
if (match !== null) {
if (match[1]) {
findDetails.matchType = 'suffix';
findDetails.deinflect = false;
} else if (match[3]) {
findDetails.matchType = 'prefix';
findDetails.deinflect = false;
}
source = match[2];
}

View File

@ -234,12 +234,7 @@ class Translator {
return {dictionaryEntries: [], originalTextLength: 0};
}
const {matchType} = options;
const deinflections = await (
matchType && matchType !== 'exact' ?
this._findTermsWildcard(text, enabledDictionaryMap, matchType) :
this._findTermDeinflections(text, enabledDictionaryMap, options)
);
const deinflections = await this._findTermsInternal2(text, enabledDictionaryMap, options);
let originalTextLength = 0;
const dictionaryEntries = [];
@ -259,17 +254,13 @@ class Translator {
return {dictionaryEntries, originalTextLength};
}
async _findTermsWildcard(text, enabledDictionaryMap, matchType) {
const databaseEntries = await this._database.findTermsBulk([text], enabledDictionaryMap, matchType);
return databaseEntries.length > 0 ? [this._createDeinflection(text, text, text, 0, [], databaseEntries)] : [];
}
async _findTermDeinflections(text, enabledDictionaryMap, options) {
const deinflections = this._getAllDeinflections(text, options);
if (deinflections.length === 0) {
return [];
}
async _findTermsInternal2(text, enabledDictionaryMap, options) {
const deinflections = (
options.deinflect ?
this._getAllDeinflections(text, options) :
[this._createDeinflection(text, text, text, 0, [], [])]
);
if (deinflections.length === 0) { return []; }
const uniqueDeinflectionTerms = [];
const uniqueDeinflectionArrays = [];
@ -286,7 +277,8 @@ class Translator {
deinflectionArray.push(deinflection);
}
const databaseEntries = await this._database.findTermsBulk(uniqueDeinflectionTerms, enabledDictionaryMap, null);
const {matchType} = options;
const databaseEntries = await this._database.findTermsBulk(uniqueDeinflectionTerms, enabledDictionaryMap, matchType);
for (const databaseEntry of databaseEntries) {
const definitionRules = Deinflector.rulesToRuleFlags(databaseEntry.rules);

View File

@ -12,7 +12,8 @@
]
},
"default": {
"wildcard": null,
"matchType": "exact",
"deinflect": true,
"mainDictionary": "${title}",
"sortFrequencyDictionary": null,
"sortFrequencyDictionaryOrder": "descending",