staticsearch
Version:
Simple static site search system.
2 lines (1 loc) • 2.69 kB
JavaScript
var g=new Map([["skis","ski"],["skies","sky"],["dying","die"],["lying","lie"],["tying","tie"],["idly","idl"],["gently","gentl"],["ugly","ugli"],["early","earli"],["only","onli"],["singly","singl"]]),f=new Set(["sky","news","howe","atlas","cosmos","bias","andes"]),r=new Set(["inning","outing","canning","herring","earring","proceed","exceed","succeed"]),h=new Set(["bb","dd","ff","gg","mm","nn","pp","rr","tt"]),o=new Set(["at","bl","iz"]),b=/^y|([aeiouy])y/,m=/Y/,p=/^'/,x=/(^[aeiouy][^aeiouy])|([aeiouy][^aeiouywxY]$)/,v=/^(gener|commun|arsen)(\w*?[aeiouy][^aeiouy])?(\w*)$/,S=/^(\w*?[aeiouy][^aeiouy])(\w*?[aeiouy][^aeiouy])?(\w*)$/,z=/'s'$|'s$|'$/,Y=/(\w+[^aeiouy])([yY])$/;function s(i,e){for(var l=i.length,n=0,a=e.length;n<a;n++)if(e[n][0].test(i))return l-e[n][3]<e[n][2]?i:i.replace(e[n][0],e[n][1]);return i}function k(i,e){return i[e]?!1:x.test(i)}function R(i){var e,l;if(i.length<=2||f.has(i))return i;if(g.has(i))return g.get(i);i=i.replace(b,"$1Y"),i=i.replace(p,"");var n=v.exec(i)||S.exec(i)||[];if(n[1]&&n[1].length<i.length?e=n[1].length:e=1/0,n[2]&&n[1].length+n[2].length<i.length?l=n[1].length+n[2].length:l=1/0,i=i.replace(z,""),i=s(i,[[/sses$/,"ss"],[/(\w{2,})(ie[d|s])$/,"$1i"],[/(ie[d|s])$/,"ie"],[/(us|ss)$/,"$1"],[/([aeiouy]\w+)(s)$/,"$1"]]),r.has(i))return i;return i=s(i,[[/eedly$/,"ee",e,5],[/(\w*[aeiouy]\w*)ingly$/,a],[/(\w*[aeiouy]\w*)edly$/,a],[/eed$/,"ee",e,3],[/(\w*[aeiouy]\w*)ing$/,a],[/(\w*[aeiouy]\w*)ed$/,a]]),i=i.replace(Y,"$1i"),e!==1/0&&(i=s(i,[[/ational$/,"ate",e,7],[/fulness$/,"ful",e,7],[/iveness$/,"ive",e,7],[/ization$/,"ize",e,7],[/ousness$/,"ous",e,7],[/biliti$/,"ble",e,6],[/lessli$/,"less",e,6],[/tional$/,"tion",e,6],[/(?:alism|aliti)$/,"al",e,5],[/ation$/,"ate",e,5],[/entli$/,"ent",e,5],[/fulli$/,"ful",e,5],[/iviti$/,"ive",e,5],[/ousli$/,"ous",e,5],[/abli$/,"able",e,4],[/alli$/,"al",e,4],[/anci$/,"ance",e,4],[/ator$/,"ate",e,4],[/enci$/,"ence",e,4],[/izer$/,"ize",e,4],[/bli$/,"ble",e,3],[/(l)ogi$/,"$1og",e,3],[/([cdeghkmnrt])li$/,"$1",e,2]]),i=s(i,[[/ational$/,"ate",e,7],[/tional$/,"tion",e,6],[/alize$/,"al",e,5],[/ative$/,"",l,5],[/(?:icate|iciti)$/,"ic",e,5],[/ical$/,"ic",e,4],[/ness$/,"",e,4],[/ful$/,"",e,3]]),l!==1/0&&(i=s(i,[[/ement$/,"",l,5],[/(?:able|ance|ence|ible|ment)$/,"",l,4],[/(?:ant|ate|ent|ism|iti|ive|ize|ous)$/,"",l,3],[/([s|t])ion$/,"$1",l,3],[/(?:al|er|ic)$/,"",l,2]])),i=s(i,[[/(^[aeiouy][^aeiouy]|[^aeiouy][aeiouy][^aeiouywxY])?e$/,c],[/(l)l$/,"$1",l,1]])),i=i.replace(m,"y"),i;function a(y,u){var t=u,$=t.substring(t.length-2);return o.has($)?t=t+"e":h.has($)?t=t.substring(0,t.length-1):k(t,e)&&(t=t+"e"),t}function c(y,u,t,$){return $.length-1>=l?u||"":!u&&$.length-1>=e?"":y}}export{R as stem};