@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
JavaScript
;
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