UNPKG

@orama/stemmers

Version:
1 lines 1.36 kB
let t=new class{stem(t){let e=this.calculateStemLength(t,t.length);return t.substring(0,e)}calculateStemLength(t,e){return e<4?e:e>5&&this.endsWith(t,e,"ища")?e-3:(e=this.removeArticle(t,e),(e=this.removePlural(t,e))>3&&(this.endsWith(t,e,"я")&&e--,(this.endsWith(t,e,"а")||this.endsWith(t,e,"о")||this.endsWith(t,e,"е"))&&e--),e>4&&this.endsWith(t,e,"ен")&&(t[e-2]="н",e--),e>5&&"ъ"==t[e-2]&&(t[e-2]=t[e-1],e--),e)}removeArticle(t,e){return e>6&&this.endsWith(t,e,"ият")?e-3:e>5&&(this.endsWith(t,e,"ът")||this.endsWith(t,e,"то")||this.endsWith(t,e,"те")||this.endsWith(t,e,"та")||this.endsWith(t,e,"ия"))||e>4&&this.endsWith(t,e,"ят")?e-2:e}removePlural(t,e){if(e>6){if(this.endsWith(t,e,"овци")||this.endsWith(t,e,"ове"))return e-3;if(this.endsWith(t,e,"еве"))return t[e-3]="й",e-2}if(e>5){if(this.endsWith(t,e,"ища"))return e-3;if(this.endsWith(t,e,"та"))return e-2;if(this.endsWith(t,e,"ци"))return t[e-2]="к",e-1;if(this.endsWith(t,e,"зи"))return t[e-2]="г",e-1;if("е"==t[e-3]&&"и"==t[e-1])return t[e-3]="я",e-1}if(e>4){if(this.endsWith(t,e,"си"))return t[e-2]="х",e-1;if(this.endsWith(t,e,"и"))return e-1}return e}endsWith(t,e,i){let s=i.length;if(s>e)return!1;for(let h=s-1;h>=0;h--)if(t[e-(s-h)]!=i[h])return!1;return!0}};export function stemmer(e){return t.stem(e)}export const language="bulgarian";