@orama/stemmers
Version:
Stemmers for Orama
1 lines • 2.11 kB
JavaScript
let e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},i="[aeiouy]",s="[^aeiou][^aeiouy]*",l=i+"[aeiou]*",a="^("+s+")?"+l+s,n="^("+s+")?"+l+s+"("+l+")?$",o="^("+s+")?"+l+s+l+s,c="^("+s+")?"+i;export function stemmer(l){let u,x,g,$,p,r;if(l.length<3)return l;let f=l.substring(0,1);if("y"==f&&(l=f.toUpperCase()+l.substring(1)),$=/^(.+?)([^s])s$/,(g=/^(.+?)(ss|i)es$/).test(l)?l=l.replace(g,"$1$2"):$.test(l)&&(l=l.replace($,"$1$2")),$=/^(.+?)(ed|ing)$/,(g=/^(.+?)eed$/).test(l)){let e=g.exec(l);(g=new RegExp(a)).test(e[1])&&(g=/.$/,l=l.replace(g,""))}else $.test(l)&&(u=$.exec(l)[1],($=new RegExp(c)).test(u)&&(l=u,$=/(at|bl|iz)$/,p=RegExp("([^aeiouylsz])\\1$"),r=RegExp("^"+s+i+"[^aeiouwxy]$"),$.test(l)?l+="e":p.test(l)?(g=/.$/,l=l.replace(g,"")):r.test(l)&&(l+="e")));if((g=/^(.+?)y$/).test(l)){let e=g.exec(l);u=e?.[1],g=new RegExp(c),u&&g.test(u)&&(l=u+"i")}if((g=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/).test(l)){let t=g.exec(l);u=t?.[1],x=t?.[2],g=new RegExp(a),u&&g.test(u)&&(l=u+e[x])}if((g=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/).test(l)){let e=g.exec(l);u=e?.[1],x=e?.[2],g=new RegExp(a),u&&g.test(u)&&(l=u+t[x])}if($=/^(.+?)(s|t)(ion)$/,(g=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/).test(l)){let e=g.exec(l);u=e?.[1],g=new RegExp(o),u&&g.test(u)&&(l=u)}else if($.test(l)){let e=$.exec(l);u=e?.[1]??""+e?.[2]??"",($=new RegExp(o)).test(u)&&(l=u)}if((g=/^(.+?)e$/).test(l)){let e=g.exec(l);u=e?.[1],g=new RegExp(o),$=new RegExp(n),p=RegExp("^"+s+i+"[^aeiouwxy]$"),u&&(g.test(u)||$.test(u)&&!p.test(u))&&(l=u)}return g=/ll$/,$=new RegExp(o),g.test(l)&&$.test(l)&&(g=/.$/,l=l.replace(g,"")),"y"==f&&(l=f.toLowerCase()+l.substring(1)),l}export const language="english";