@orama/stemmers
Version:
Stemmers for Orama
1 lines • 2.23 kB
JavaScript
;let thisString;function _export(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}Object.defineProperty(exports,"__esModule",{value:!0}),_export(exports,{language:function(){return language},stemmer:function(){return stemmer}});let vowel=RegExp("[аеиоуюяіїє]"),perfectiveGround=RegExp("(?:[иы]в(?:ши(?:сь)?)?|(?<=[ая])(?:в(?:ши(?:сь)?)?))$"),reflexive=RegExp("с[яьи]$"),adjective=RegExp("(?:[аеєуюя]|еє|ем|єє|ий|их|іх|ів|ій|ім|їй|ім|им|ими|іми|йми|ої|ою|ова|ове|ого|ому)$"),participle=RegExp("(?:[аіу]|ій|ий|им|ім|их|йми|ого|ому|ою)$"),verb=RegExp("(?:[еєую]|ав|али|ати|вши|ив|ити|ме|сь|ся|ши|учи|яти|ячи|ать|ять)$","g"),noun=RegExp("(?:[аеєіїийоуыьюя]|ам|ах|ами|ев|еві|еи|ей|ем|ею|єм|єю|ів|їв|ий|ием|ию|ия|иям|иях|ов|ові|ой|ом|ою|ью|ья|ям|ями|ях)$","g"),derivational=RegExp("[^аеиоуюяіїє][аеиоуюяіїє]+[^аеиоуюяіїє]+[аеиоуюяіїє].*(?<=о)сть?$","g"),step2=RegExp("и$"),step3=RegExp("ость$"),step41=RegExp("ь$"),step42=RegExp("ейше$"),step43=RegExp("нн$"),alterations=RegExp("([гджзкстхцчш]|ст|дж|ждж|ьц|сі|ці|зі|он|ін|ів|ев|ок|шк)$"),ukrstemmer=(e,t=!1)=>{thisString=e.toLowerCase();let r=e.match(vowel);if(null===r)return e;r=r.index;let i=thisString.slice(0,r+1);return""===(thisString=thisString.slice(r+1))?e:(!replaceAndCheck(thisString,perfectiveGround,"")&&(replaceAndCheck(thisString,reflexive,""),replaceAndCheck(thisString,adjective,"")?replaceAndCheck(thisString,participle,""):replaceAndCheck(thisString,verb,"")||replaceAndCheck(thisString,noun,"")),replaceAndCheck(thisString,step2,""),derivational.test(thisString)&&replaceAndCheck(thisString,step3,""),replaceAndCheck(thisString,step41,"")||(replaceAndCheck(thisString,step42,""),replaceAndCheck(thisString,step43,"н")),t&&replaceAndCheck(thisString,alterations,""),i+thisString)},replaceAndCheck=(e,t,r)=>(thisString=e.replace(t,r))!==e;function stemmer(e){return ukrstemmer(e)}let language="ukrainian";