UNPKG

yoastseo

Version:

Yoast client-side content analysis

341 lines (330 loc) 24.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = stem; /** * Copyright (c) 2005, Jacques Savoy * Copyright (c) 2013, Jakub Dundalek. * Authored by Ljiljana Dolamic from the University of Neuchatel. * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that * the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." */ /** * Takes care of palatalisation. * * @param {string} word The word to stem. * @param {Object} morphologyData The Czech morphology data. * * @returns {string} The non-palatalised word or the original word if no such suffix is found. */ const palatalise = function (word, morphologyData) { const palataliseSuffixes = morphologyData.externalStemmer.palataliseSuffixes; const len = word.length; if (word.substring(len - 2, len) === palataliseSuffixes.palataliseSuffixCi || word.substring(len - 2, len) === palataliseSuffixes.palataliseSuffixCe || word.substring(len - 2, len) === palataliseSuffixes.palataliseSuffixCiCaron || word.substring(len - 2, len) === palataliseSuffixes.palataliseSuffixCeCaron) { return word.replace(word.substring(len - 2, len), palataliseSuffixes.palataliseSuffixK); } if (word.substring(len - 2, len) === palataliseSuffixes.palataliseSuffixZi || word.substring(len - 2, len) === palataliseSuffixes.palataliseSuffixZe || word.substring(len - 2, len) === palataliseSuffixes.palataliseSuffixZiCaron || word.substring(len - 2, len) === palataliseSuffixes.palataliseSuffixZeCaron) { return word.replace(word.substring(len - 2, len), palataliseSuffixes.palataliseSuffixH); } if (word.substring(len - 3, len) === palataliseSuffixes.palataliseSuffixCte || word.substring(len - 3, len) === palataliseSuffixes.palataliseSuffixCti || word.substring(len - 3, len) === palataliseSuffixes.palataliseSuffixCtiAccented) { return word.replace(word.substring(len - 3, len), palataliseSuffixes.palataliseSuffixCk); } if (word.substring(len - 3, len) === palataliseSuffixes.palataliseSuffixSte || word.substring(len - 3, len) === palataliseSuffixes.palataliseSuffixSti || word.substring(len - 3, len) === palataliseSuffixes.palataliseSuffixStiAccented) { return word.replace(word.substring(len - 3, len), palataliseSuffixes.palataliseSuffixSk); } return word.slice(0, -1); }; /** * Removes derivational suffixes. * * @param {string} word The word to stem. * @param {Object} morphologyData The Czech morphology data. * * @returns {string} The word without derivational suffixes or the original word if no such suffix is found. */ const removeDerivational = function (word, morphologyData) { const derivationalSuffixes = morphologyData.externalStemmer.derivationalSuffixes; const len = word.length; if (len > 8 && word.substring(len - 6, len) === derivationalSuffixes.derivationalSuffixObinec) { return word.slice(0, -6); } if (len > 7) { if (word.substring(len - 5, len) === derivationalSuffixes.derivationalSuffixIonar) { word = word.slice(0, -4); return palatalise(word, morphologyData); } else if (word.substring(len - 5, len) === derivationalSuffixes.derivationalSuffixOvisk || word.substring(len - 5, len) === derivationalSuffixes.derivationalSuffixOvstv || word.substring(len - 5, len) === derivationalSuffixes.derivationalSuffixOvist || word.substring(len - 5, len) === derivationalSuffixes.derivationalSuffixOvnik) { return word.slice(0, -5); } } if (len > 6) { if (word.substring(len - 4, len) === derivationalSuffixes.derivationalSuffixAsek || word.substring(len - 4, len) === derivationalSuffixes.derivationalSuffixLoun || word.substring(len - 4, len) === derivationalSuffixes.derivationalSuffixNost || word.substring(len - 4, len) === derivationalSuffixes.derivationalSuffixTeln || word.substring(len - 4, len) === derivationalSuffixes.derivationalSuffixOvec || word.substring(len - 5, len) === derivationalSuffixes.derivationalSuffixOvik || word.substring(len - 4, len) === derivationalSuffixes.derivationalSuffixOvtv || word.substring(len - 4, len) === derivationalSuffixes.derivationalSuffixOvin || word.substring(len - 4, len) === derivationalSuffixes.derivationalSuffixStin) { return word.slice(0, -4); } else if (word.substring(len - 4, len) === derivationalSuffixes.derivationalSuffixEnic || word.substring(len - 4, len) === derivationalSuffixes.derivationalSuffixInec || word.substring(len - 4, len) === derivationalSuffixes.derivationalSuffixItel) { word = word.slice(0, -3); return palatalise(word, morphologyData); } } if (len > 5) { if (word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixEnk || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixIan || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixIst || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixIsk || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixIstCaron || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixItb || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixIrn) { word = word.slice(0, -2); return palatalise(word, morphologyData); } else if (word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixArn || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixOch || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixOst || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixOvn || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixOun || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixOut || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixOus || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixUsk || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixKyn || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixCan || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixKar || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixNer || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixNik || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixCtv || word.substring(len - 3, len) === derivationalSuffixes.derivationalSuffixStv) { return word.slice(0, -3); } } if (len > 4) { if (word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixAcAccented || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixAc || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixAnAccented || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixAn || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixAr || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixAs) { return word.slice(0, -2); } else if (word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixEc || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixEn || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixEnCaron || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixEr || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixIr || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixIc || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixIn || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixInAccented || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixIt || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixIv) { word = word.slice(0, -1); return palatalise(word, morphologyData); } else if (word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixOb || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixOt || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixOv || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixOn || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixUl || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixYn || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixCk || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixCn || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixDl || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixNk || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixTv || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixTk || word.substring(len - 2, len) === derivationalSuffixes.derivationalSuffixVk) { return word.slice(0, -2); } } if (len > 3) { if (word.charAt(word.length - 1) === derivationalSuffixes.derivationalSuffixC || word.charAt(word.length - 1) === derivationalSuffixes.derivationalSuffixCCaron || word.charAt(word.length - 1) === derivationalSuffixes.derivationalSuffixK || word.charAt(word.length - 1) === derivationalSuffixes.derivationalSuffixL || word.charAt(word.length - 1) === derivationalSuffixes.derivationalSuffixN || word.charAt(word.length - 1) === derivationalSuffixes.derivationalSuffixT) { return word.slice(0, -1); } } return word; }; /** * Removes augmentative suffixes. * * @param {string} word The word to stem. * @param {Object} morphologyData The Czech morphology data. * * @returns {string} The word without augmentative suffixes or the original word if no such suffix is found. */ const removeAugmentative = function (word, morphologyData) { const augmentativeSuffixes = morphologyData.externalStemmer.augmentativeSuffixes; const len = word.length; if (len > 6 && word.substring(len - 4, len) === augmentativeSuffixes.augmentativeSuffixAjzn) { return word.slice(0, -4); } if (len > 5 && word.substring(len - 3, len) === augmentativeSuffixes.augmentativeSuffixIzn || word.substring(len - 3, len) === augmentativeSuffixes.augmentativeSuffixIsk) { word = word.slice(0, -2); return palatalise(word, morphologyData); } return word; }; /** * Removes diminutive suffixes. * * @param {string} word The word to stem. * @param {Object} morphologyData The Czech morphology data. * * @returns {string} The word without diminutive suffixes or the original word if no such suffix is found. */ const removeDiminutive = function (word, morphologyData) { const diminutiveSuffixes = morphologyData.externalStemmer.diminutiveSuffixes; const len = word.length; if (len > 7 && word.substring(len - 5, len) === diminutiveSuffixes.diminutiveSuffixOusek) { return word.slice(0, -5); } if (len > 6) { if (word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixEcek || word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixEcekAccented || word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixIcek || word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixIcekAccented || word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixEnek || word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixEnekAccented || word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixInek || word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixInekAccented) { word = word.slice(0, -3); return palatalise(word, morphologyData); } if (word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixAcekAccented || word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixAcek || word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixOcek || word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixUcek || word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixAnek || word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixOnek || word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixUnek || word.substring(len - 4, len) === diminutiveSuffixes.diminutiveSuffixAnekAccented) { return word.slice(0, -4); } } if (len > 5) { if (word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixEck || word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixEckAccented || word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixIck || word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixIckAccented || word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixEnk || word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixEnkAccented || word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixInk || word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixInkAccented) { word = word.slice(0, -3); return palatalise(word, morphologyData); } if (word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixAckAccented || word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixAck || word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixOck || word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixUck || word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixAnk || word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixOnk || word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixUnk) { return word.slice(0, -3); } if (word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixAtk || word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixAnkAccented || word.substring(len - 3, len) === diminutiveSuffixes.diminutiveSuffixUsk) { return word.slice(0, -3); } } if (len > 4) { if (word.substring(len - 2, len) === diminutiveSuffixes.diminutiveSuffixEk || word.substring(len - 2, len) === diminutiveSuffixes.diminutiveSuffixEkAccented || word.substring(len - 2, len) === diminutiveSuffixes.diminutiveSuffixIkAccented || word.substring(len - 2, len) === diminutiveSuffixes.diminutiveSuffixIk) { word = word.slice(0, -1); return palatalise(word, morphologyData); } if (word.substring(len - 2, len) === diminutiveSuffixes.diminutiveSuffixAkAccented || word.substring(len - 2, len) === diminutiveSuffixes.diminutiveSuffixAk || word.substring(len - 2, len) === diminutiveSuffixes.diminutiveSuffixOk || word.substring(len - 2, len) === diminutiveSuffixes.diminutiveSuffixUk) { return word.slice(0, -1); } } if (len > 3 && word.substring(len - 1, len) === diminutiveSuffixes.diminutiveSuffixK) { return word.slice(0, -1); } return word; }; /** * Removes comparative suffixes. * * @param {string} word The word to stem. * @param {Object} morphologyData The Czech morphology data. * * @returns {string} The word without comparative suffixes or the original word if no such suffix is found. */ const removeComparative = function (word, morphologyData) { const comparativeSuffixes = morphologyData.externalStemmer.comparativeSuffixes; const len = word.length; if (len > 5 && word.substring(len - 3, len) === comparativeSuffixes.comparativeSuffixesEjs || word.substring(len - 3, len) === comparativeSuffixes.comparativeSuffixesEjsCaron) { word = word.slice(0, -2); return palatalise(word, morphologyData); } return word; }; /** * Removes possessive suffixes. * * @param {string} word The word to stem. * @param {Object} morphologyData The Czech morphology data. * * @returns {string} The word without possessive suffixes or the original word if no such suffix is found. */ const removePossessives = function (word, morphologyData) { const possessiveSuffixes = morphologyData.externalStemmer.possessiveSuffixes; const len = word.length; if (len > 5) { if (word.substring(len - 2, len) === possessiveSuffixes.possessiveSuffixOv) { return word.slice(0, -2); } if (word.substring(len - 2, len) === possessiveSuffixes.possessiveSuffixesUv) { return word.slice(0, -2); } if (word.substring(len - 2, len) === possessiveSuffixes.possessiveSuffixIn) { word = word.slice(0, -1); return palatalise(word, morphologyData); } } return word; }; /** * Removes case suffixes. * * @param {string} word The word to stem. * @param {Object} morphologyData The Czech morphology data. * * @returns {string} The word without case suffixes or the original word if no such suffix is found. */ const removeCase = function (word, morphologyData) { const caseSuffixes = morphologyData.externalStemmer.caseSuffixes; const len = word.length; if (len > 7 && word.substring(len - 5, len) === caseSuffixes.caseSuffixAtech) { return word.slice(0, -5); } if (len > 6) { if (word.substring(len - 4, len) === caseSuffixes.caseSuffixEtem) { word = word.slice(0, -3); return palatalise(word, morphologyData); } if (word.substring(len - 4, len) === caseSuffixes.caseSuffixAtum) { return word.slice(0, -4); } } if (len > 5) { if (word.substring(len - 3, len) === caseSuffixes.caseSuffixEch || word.substring(len - 3, len) === caseSuffixes.caseSuffixIch || word.substring(len - 3, len) === caseSuffixes.caseSuffixIchAccented || word.substring(len - 3, len) === caseSuffixes.caseSuffixEho || word.substring(len - 3, len) === caseSuffixes.caseSuffixEmiCaron || word.substring(len - 3, len) === caseSuffixes.caseSuffixEmi || word.substring(len - 3, len) === caseSuffixes.caseSuffixEmuAccented || word.substring(len - 3, len) === caseSuffixes.caseSuffixEte || word.substring(len - 3, len) === caseSuffixes.caseSuffixEti || word.substring(len - 3, len) === caseSuffixes.caseSuffixIho || word.substring(len - 3, len) === caseSuffixes.caseSuffixIhoAccented || word.substring(len - 3, len) === caseSuffixes.caseSuffixImi || word.substring(len - 3, len) === caseSuffixes.caseSuffixImu) { word = word.slice(0, -2); return palatalise(word, morphologyData); } else if (word.substring(len - 3, len) === caseSuffixes.caseSuffixAchAccented || word.substring(len - 3, len) === caseSuffixes.caseSuffixAta || word.substring(len - 3, len) === caseSuffixes.caseSuffixAty || word.substring(len - 3, len) === caseSuffixes.caseSuffixYch || word.substring(len - 3, len) === caseSuffixes.caseSuffixAma || word.substring(len - 3, len) === caseSuffixes.caseSuffixAmi || word.substring(len - 3, len) === caseSuffixes.caseSuffixOve || word.substring(len - 3, len) === caseSuffixes.caseSuffixOvi || word.substring(len - 3, len) === caseSuffixes.caseSuffixYmi) { return word.slice(0, -3); } } if (len > 4) { if (word.substring(len - 2, len) === caseSuffixes.caseSuffixEm) { word = word.slice(0, -1); return palatalise(word, morphologyData); } else if (word.substring(len - 2, len) === caseSuffixes.caseSuffixEs || word.substring(len - 2, len) === caseSuffixes.caseSuffixEmAccented || word.substring(len - 2, len) === caseSuffixes.caseSuffixIm) { word = word.slice(0, -2); return palatalise(word, morphologyData); } else if (word.substring(len - 2, len) === caseSuffixes.caseSuffixUm || word.substring(len - 2, len) === caseSuffixes.caseSuffixAt || word.substring(len - 2, len) === caseSuffixes.caseSuffixAm || word.substring(len - 2, len) === caseSuffixes.caseSuffixOs || word.substring(len - 2, len) === caseSuffixes.caseSuffixUs || word.substring(len - 2, len) === caseSuffixes.caseSuffixYm || word.substring(len - 2, len) === caseSuffixes.caseSuffixMi || word.substring(len - 2, len) === caseSuffixes.caseSuffixOu) { return word.slice(0, -2); } } if (len > 3) { if (word.substring(len - 1, len) === caseSuffixes.caseSuffixE || word.substring(len - 1, len) === caseSuffixes.caseSuffixI || word.substring(len - 1, len) === caseSuffixes.caseSuffixIAccented || word.substring(len - 1, len) === caseSuffixes.caseSuffixECaron) { return palatalise(word, morphologyData); } else if (word.substring(len - 1, len) === caseSuffixes.caseSuffixU || word.substring(len - 1, len) === caseSuffixes.caseSuffixY || word.substring(len - 1, len) === caseSuffixes.caseSuffixURing || word.substring(len - 1, len) === caseSuffixes.caseSuffixA || word.substring(len - 1, len) === caseSuffixes.caseSuffixO || word.substring(len - 1, len) === caseSuffixes.caseSuffixAAccented || word.substring(len - 1, len) === caseSuffixes.caseSuffixEAccented || word.substring(len - 1, len) === caseSuffixes.caseSuffixYAccented) { return word.slice(0, -1); } } return word; }; /** * Checks whether a word is in the full-form exception list and if so returns the canonical stem. * * @param {string} word The word to be checked. * @param {Object} morphologyData The Czech morphology data. * * @returns {string} The canonical stem if word was found on the list or the original word otherwise. */ const checkWordInFullFormExceptions = function (word, morphologyData) { for (const paradigm of morphologyData.externalStemmer.exceptionStemsWithFullForms) { if (paradigm[1].includes(word)) { return paradigm[0]; } } return word; }; /** * Check whether the stem is on the exception list of stems that belong to one word. If it is, returns the canonical stem. * * @param {string} word The stemmed word. * @param {Object} morphologyData The Czech morphology data. * * @returns {string} The canonical stem if word was found on the list or the original word otherwise. */ const canonicalizeStem = function (word, morphologyData) { // Checks the nouns list. for (const paradigm of morphologyData.externalStemmer.stemsThatBelongToOneWord.nouns) { if (paradigm.includes(word)) { return paradigm[0]; } } return word; }; /** * Stems Czech words. * * @param {string} word The word to stem. * @param {Object} morphologyData The Czech morphology data. * * @returns {string} The stemmed word. */ function stem(word, morphologyData) { word = word.toLowerCase(); // Checks if the word is on an exception list for which all forms of a word and its stem are listed. word = checkWordInFullFormExceptions(word, morphologyData); // Removes case endings from nouns and adjectives. word = removeCase(word, morphologyData); // Removes possessive -ov- and -in- endings from names. word = removePossessives(word, morphologyData); // Removes comparative endings. word = removeComparative(word, morphologyData); // Removes diminutive endings. word = removeDiminutive(word, morphologyData); // Removes augmentatives endings. word = removeAugmentative(word, morphologyData); // Removes derivational suffixes from nouns. word = removeDerivational(word, morphologyData); // Checks whether the stem is on the exception list of stems that belong to one word. word = canonicalizeStem(word, morphologyData); return word; } //# sourceMappingURL=stem.js.map