spelling-variations
Version:
gives you a word's spelling variations with detection whether it's a UK (English, british) or US (American) variations, also gives you the preferred variation.
104 lines (103 loc) • 2.75 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const dict_1 = require("./dict");
const pattern_1 = require("./pattern");
class SpellingVariations {
constructor(word) {
this.data = analyse(word);
}
scoreUK() {
return this.data.scoreUK;
}
scoreUS() {
return this.data.scoreUS;
}
hasVariations() {
return this.data.hasVariations;
}
USVariations() {
return this.data.USVariations;
}
UKVariations() {
return this.data.UKVariations;
}
UKPreferred() {
return this.data.UKPreferred;
}
USPreferred() {
return this.data.USPreferred;
}
variations() {
return this.data.variations;
}
commonVariation() {
return this.data.commonVariation;
}
toUK() {
return this.data.UKPreferred || this.data.word;
}
toUS() {
return this.data.USPreferred || this.data.word;
}
analyse() {
return this.data;
}
analyze() {
return this.data;
}
}
exports.default = SpellingVariations;
;
function analyse(word) {
word = (word || "").toLowerCase();
const result = {
word,
scoreUK: -1,
scoreUS: -1,
hasVariations: false,
UKPreferred: word,
USPreferred: word,
commonVariation: word,
UKVariations: [],
USVariations: [],
variations: [],
analyse: analyse,
analyze: analyse
};
var resultArr = [];
var dictionaryEntry = dict_1.dict[word];
var patternEntry = pattern_1.default(word);
if (dictionaryEntry)
resultArr = dictionaryEntry.split("|");
else if (patternEntry)
resultArr = patternEntry;
else
return result;
result.hasVariations = true;
result.variations = filterOut(resultArr, word);
result.UKPreferred = resultArr[0];
result.USPreferred = resultArr[4];
result.commonVariation = resultArr[8] || "";
result.UKVariations = resultArr.filter((e, i) => e && (i < 4 || i === 8) && e !== word);
result.USVariations = resultArr.filter((e, i) => e && (i > 3 || i === 8) && e !== word);
if (resultArr.indexOf(word) === 8) {
result.scoreUK = 0.87;
result.scoreUS = 0.87;
}
else {
var UKi = resultArr.slice(0, 4).indexOf(word);
var USi = resultArr.slice(4, 8).indexOf(word);
if (UKi === -1)
result.scoreUK = 0;
else
result.scoreUK = (4 - UKi) * 0.25;
if (USi === -1)
result.scoreUS = 0;
else
result.scoreUS = (4 - USi) * 0.25;
}
return result;
}
function filterOut(arr, word) {
return arr.filter((x) => x && x !== word);
}