@orama/stemmers
Version:
Stemmers for Orama
1 lines • 1.68 kB
JavaScript
"use strict";function _export(e,t){for(var i in t)Object.defineProperty(e,i,{enumerable:!0,get:Object.getOwnPropertyDescriptor(t,i).get})}Object.defineProperty(exports,"__esModule",{value:!0}),_export(exports,{get language(){return language},get stemmer(){return stemmer}});class BulgarianStemmer{stem(e){let t=this.calculateStemLength(e,e.length);return e.substring(0,t)}calculateStemLength(e,t){return t<4?t:t>5&&this.endsWith(e,t,"ища")?t-3:(t=this.removeArticle(e,t),(t=this.removePlural(e,t))>3&&(this.endsWith(e,t,"я")&&t--,(this.endsWith(e,t,"а")||this.endsWith(e,t,"о")||this.endsWith(e,t,"е"))&&t--),t>4&&this.endsWith(e,t,"ен")&&(e[t-2]="н",t--),t>5&&"ъ"==e[t-2]&&(e[t-2]=e[t-1],t--),t)}removeArticle(e,t){return t>6&&this.endsWith(e,t,"ият")?t-3:t>5&&(this.endsWith(e,t,"ът")||this.endsWith(e,t,"то")||this.endsWith(e,t,"те")||this.endsWith(e,t,"та")||this.endsWith(e,t,"ия"))||t>4&&this.endsWith(e,t,"ят")?t-2:t}removePlural(e,t){if(t>6){if(this.endsWith(e,t,"овци")||this.endsWith(e,t,"ове"))return t-3;if(this.endsWith(e,t,"еве"))return e[t-3]="й",t-2}if(t>5){if(this.endsWith(e,t,"ища"))return t-3;if(this.endsWith(e,t,"та"))return t-2;if(this.endsWith(e,t,"ци"))return e[t-2]="к",t-1;if(this.endsWith(e,t,"зи"))return e[t-2]="г",t-1;if("е"==e[t-3]&&"и"==e[t-1])return e[t-3]="я",t-1}if(t>4){if(this.endsWith(e,t,"си"))return e[t-2]="х",t-1;if(this.endsWith(e,t,"и"))return t-1}return t}endsWith(e,t,i){let r=i.length;if(r>t)return!1;for(let n=r-1;n>=0;n--)if(e[t-(r-n)]!=i[n])return!1;return!0}}let stemmerInstance=new BulgarianStemmer;function stemmer(e){return stemmerInstance.stem(e)}let language="bulgarian";