Deinflector refactor (#1501)
* Make Deinflector._ruleTypes private * Add createDeinflection helper * Remove unnecessary field assignments from Deinflector Move them to Translator instead
This commit is contained in:
parent
92fe1571ae
commit
7793e14e57
@ -20,15 +20,8 @@ class Deinflector {
|
||||
this.reasons = Deinflector.normalizeReasons(reasons);
|
||||
}
|
||||
|
||||
deinflect(source, rawSource) {
|
||||
const results = [{
|
||||
source,
|
||||
rawSource,
|
||||
term: source,
|
||||
rules: 0,
|
||||
reasons: [],
|
||||
databaseDefinitions: []
|
||||
}];
|
||||
deinflect(source) {
|
||||
const results = [this._createDeinflection(source, 0, [])];
|
||||
for (let i = 0; i < results.length; ++i) {
|
||||
const {rules, term, reasons} = results[i];
|
||||
for (const [reason, variants] of this.reasons) {
|
||||
@ -41,20 +34,21 @@ class Deinflector {
|
||||
continue;
|
||||
}
|
||||
|
||||
results.push({
|
||||
source,
|
||||
rawSource,
|
||||
term: term.substring(0, term.length - kanaIn.length) + kanaOut,
|
||||
rules: rulesOut,
|
||||
reasons: [reason, ...reasons],
|
||||
databaseDefinitions: []
|
||||
});
|
||||
results.push(this._createDeinflection(
|
||||
term.substring(0, term.length - kanaIn.length) + kanaOut,
|
||||
rulesOut,
|
||||
[reason, ...reasons]
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
_createDeinflection(term, rules, reasons) {
|
||||
return {term, rules, reasons};
|
||||
}
|
||||
|
||||
static normalizeReasons(reasons) {
|
||||
const normalizedReasons = [];
|
||||
for (const [reason, reasonInfo] of Object.entries(reasons)) {
|
||||
@ -63,8 +57,8 @@ class Deinflector {
|
||||
variants.push([
|
||||
kanaIn,
|
||||
kanaOut,
|
||||
Deinflector.rulesToRuleFlags(rulesIn),
|
||||
Deinflector.rulesToRuleFlags(rulesOut)
|
||||
this.rulesToRuleFlags(rulesIn),
|
||||
this.rulesToRuleFlags(rulesOut)
|
||||
]);
|
||||
}
|
||||
normalizedReasons.push([reason, variants]);
|
||||
@ -73,7 +67,7 @@ class Deinflector {
|
||||
}
|
||||
|
||||
static rulesToRuleFlags(rules) {
|
||||
const ruleTypes = Deinflector.ruleTypes;
|
||||
const ruleTypes = this._ruleTypes;
|
||||
let value = 0;
|
||||
for (const rule of rules) {
|
||||
const ruleBits = ruleTypes.get(rule);
|
||||
@ -84,7 +78,8 @@ class Deinflector {
|
||||
}
|
||||
}
|
||||
|
||||
Deinflector.ruleTypes = new Map([
|
||||
// eslint-disable-next-line no-underscore-dangle
|
||||
Deinflector._ruleTypes = new Map([
|
||||
['v1', 0b00000001], // Verb ichidan
|
||||
['v5', 0b00000010], // Verb godan
|
||||
['vs', 0b00000100], // Verb suru
|
||||
|
@ -250,18 +250,7 @@ class Translator {
|
||||
|
||||
async _findTermWildcard(text, enabledDictionaryMap, wildcard) {
|
||||
const databaseDefinitions = await this._database.findTermsBulk([text], enabledDictionaryMap, wildcard);
|
||||
if (databaseDefinitions.length === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return [{
|
||||
source: text,
|
||||
rawSource: text,
|
||||
term: text,
|
||||
rules: 0,
|
||||
reasons: [],
|
||||
databaseDefinitions
|
||||
}];
|
||||
return databaseDefinitions.length > 0 ? [this._createDeinflection(text, text, text, 0, [], databaseDefinitions)] : [];
|
||||
}
|
||||
|
||||
async _findTermDeinflections(text, enabledDictionaryMap, options) {
|
||||
@ -341,18 +330,22 @@ class Translator {
|
||||
}
|
||||
|
||||
for (let i = text2.length; i > 0; --i) {
|
||||
const text2Substring = text2.substring(0, i);
|
||||
if (used.has(text2Substring)) { break; }
|
||||
used.add(text2Substring);
|
||||
const source = text2.substring(0, i);
|
||||
if (used.has(source)) { break; }
|
||||
used.add(source);
|
||||
const rawSource = sourceMap.source.substring(0, sourceMap.getSourceLength(i));
|
||||
for (const deinflection of this._deinflector.deinflect(text2Substring, rawSource)) {
|
||||
deinflections.push(deinflection);
|
||||
for (const {term, rules, reasons} of this._deinflector.deinflect(source)) {
|
||||
deinflections.push(this._createDeinflection(source, rawSource, term, rules, reasons, []));
|
||||
}
|
||||
}
|
||||
}
|
||||
return deinflections;
|
||||
}
|
||||
|
||||
_createDeinflection(source, rawSource, term, rules, reasons, databaseDefinitions) {
|
||||
return {source, rawSource, term, rules, reasons, databaseDefinitions};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param definitions An array of 'term' definitions.
|
||||
* @param mainDictionary The name of the main dictionary.
|
||||
|
Loading…
Reference in New Issue
Block a user