UNPKG

@botonic/plugin-contentful

Version:

Botonic Plugin Contentful is one of the **[available](https://github.com/hubtype/botonic/tree/master/packages)** plugins for Botonic. **[Contentful](http://www.contentful.com)** is a CMS (Content Management System) which manages contents of a great variet

75 lines 3.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.StemmerUk = void 0; // Replaced the orginal lookbehind regex because they were not supported by Safari class StemmerUk { stem(tokens) { return tokens.map(token => this.stemToken(token)); } stemToken(token) { const vowelMatch = /[аеиоуюяіїє]/.exec(token); if (!vowelMatch) { return token; } else if (vowelMatch.index != undefined) { const start = token.slice(0, vowelMatch.index + 1); token = token.slice(vowelMatch.index + 1); if (token === '') { return start; } token = this.step1(token); token = this.step2(token); token = this.step3(token); token = this.step4(token); return `${start}${token}`; } else { return token; } } replace(token, regex, replacement = '') { return token.replace(regex, replacement); } step1(token) { let originalToken = token; token = this.replace(token, /(?:[иы]в(?:ши(?:сь)?)?)$/); token = this.replace(token, /(?:а(?:в(?:ши(?:сь)?)?))$/, 'а'); token = this.replace(token, /(?:я(?:в(?:ши(?:сь)?)?))$/, 'я'); if (originalToken === token) { token = this.replace(token, /с[яьи]$/); originalToken = token; token = this.replace(token, /(?:[аеєуюя]|еє|ем|єє|ий|их|іх|ів|ій|ім|їй|ім|им|ими|іми|йми|ої|ою|ова|ове|ого|ому)$/); if (originalToken !== token) { token = this.replace(token, /(?:[аіу]|ій|ий|им|ім|их|йми|ого|ому|ою)$/); } else { originalToken = token; token = this.replace(token, /(?:[еєую]|ав|али|ати|вши|ив|ити|ме|сь|ся|ши|учи|яти|ячи|ать|ять)$/g); if (originalToken === token) { token = this.replace(token, /(?:[аеєіїийоуыьюя]|ам|ах|ами|ев|еві|еи|ей|ем|ею|єм|єю|ів|їв|ий|ием|ию|ия|иям|иях|ов|ові|ой|ом|ою|ью|ья|ям|ями|ях)$/g); } } } return token; } step2(token) { return this.replace(token, /и$/); } step3(token) { if (/[^аеиоуюяіїє][аеиоуюяіїє]+[^аеиоуюяіїє]+[аеиоуюяіїє].*oсть/g.exec(token)) { token = this.replace(token, /ость$/); } return token; } step4(token) { const originalToken = token; token = this.replace(originalToken, /ь$/); if (originalToken === token) { token = this.replace(token, /ейше$/); token = this.replace(token, /нн$/, 'н'); } return token; } } exports.StemmerUk = StemmerUk; //# sourceMappingURL=stemmer-uk.js.map