UNPKG

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
"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); }