UNPKG

dikstemmer

Version:

Stemming Algorithm for Filipino Words

316 lines (269 loc) 5.84 kB
function hasPrefix(word,prefix){ if(word.length - prefix.length < 3){ return false; } for(var i = 0; i < prefix.length;i++){ if(word[i] != prefix[i]){ return false; } } return true; } function hasSuffix(word,suffix){ var wordLength = word.length; var suffixLength = suffix.length; for(var i = 0; i < suffixLength;i++){ if(word[wordLength - i - 1] != suffix[suffixLength - i - 1]){ return false; } } return true; } function removePrefix(word){ var prefixes = [ 'ala-', 'alas-', 'anti', 'de-', 'des-', 'di-', // 'ekstra-', // 'elektro', 'ga', 'gaga', 'gangga', 'hi', 'him', 'hin', 'ikapakapagpaka', 'ikapakapagpa', 'ikapakapang', 'ikapakapag', 'ikapakapam', 'ikapakapan', 'ikapagpaka', 'ikapakipan', 'ikapakipag', 'ikapakipam', 'ikapakipa', 'ipakipag', 'ipagkang', 'ikapagpa', 'ikapaka', 'ikapaki', 'ikapang', 'ipakipa', 'ikapag', 'ikapam', 'ikapan', 'ipagka', 'ipagpa', 'ipaka', 'ipaki', 'ikapa', 'ipang', 'ikang', 'ipag', 'ikam', 'ikan', 'isa', 'ipa', 'kasing', // 'kontra', 'kamaka', 'kanda', 'kasim', 'kasin', 'kamag', 'kaka', 'ka', 'labing', 'mangagsipagpaka', 'mangagsipag', 'mangagpaka', 'magsipagpa', 'makapagpa', 'mangagsi', 'mangagpa', 'magsipag', 'mangagka', 'magkang', 'magpaka', 'magpati', 'makapag', 'mapapag', 'mapang', 'mapasa', 'mapapa', 'mangag', 'manga', // 'mikro', 'magka', 'magpa', 'magsa', 'mapag', 'mapam', 'mapan', // 'meta', 'mapa', 'mang', // 'mini', 'maka', 'maki', // 'mala', // 'mal', 'mam', 'man', // 'may', 'ma', 'mag', 'nangagsipagpaka', 'nangagsipagpa', 'nagsipagpaka', 'nakapagpaka', 'nangagsipag', 'nangagpaka', 'nangagkaka', 'nagsipagpa', 'nakapagpa', 'nagsipag', 'nangagpa', 'nangagka', 'nangagsi', 'nakapag', 'nakipag', 'napapag', 'nagpaka', 'nagpati', 'nangag', 'napaka', 'napasa', 'nanga', 'nagka', 'nagpa', 'nagsa', 'nagsi', 'napag', 'naka', 'naki', 'nang', 'napa', 'nag', 'na', 'pagpapati', 'pagpapaka', 'pagpapa', 'pagsasa', 'pasasa', 'pakiki', 'pinaka', 'pinag', 'pinag', 'papag', 'pampa', 'panag', 'pagka', 'paka', 'paki', 'pala', 'pang', 'pani', 'papa', 'para', 'pasa', 'pati', 'pina', 'pag', 'pam', 'pan', 'pa', // 'xeno', // 'radyo', 're', 'sang', 'sing', 'sam', 'san', 'sin', 'sa', 'tagapag', 'taga', 'tiga', 'tag', 'tig', // 'uni', 'um', ]; for(var i=0;i<prefixes.length;i++){ if(hasPrefix(word,prefixes[i])){ return word.slice(prefixes[i].length,word.length); } } return word; } function prefixSoundChange(word){ if(word[i] == 'r'){ word[i] = 'd'; return word; } } function removeSuffix(word){ var suffixes = [ 'han', 'hin', 'an', 'in', ]; for(var i=0;i<suffixes.length;i++){ if(hasSuffix(word,suffixes[i])){ return word.slice(0,word.length - suffixes[i].length); } } return word; } function removeInfix(word){ var infixes = [ 'in', 'um' ]; for(var i=0; i<infixes.length > 0; i++){ infix = infixes[i]; infixIndex = word.indexOf(infix); if(infixIndex === 0){ return word.slice(infixIndex + infix.length); }else if (infixIndex === 1){ return word[0] + word.slice(infix.length + 1); } } return word; } function removePartialReduplication(word){ //if two syllablic root if(word[0] == word[1]){ return word.slice(1); }else if (word[0] == word[2] && word[1] == word[3]){ return word.slice(2); } //if three syllabic root return word; } function removeFullReduplication(word){ //if two syllablic root if(word[0] == word[1]){ return word.slice(1); }else if (word[0] == word[2] && word[1] == word[3]){ return word.slice(2); } //if three syllabic root return word; } function stem(word){ } module.exports = { stem:stem, removePrefix:removePrefix, removeSuffix:removeSuffix, removeInfix:removeInfix, removePartialReduplication:removePartialReduplication, removeFullReduplication:removeFullReduplication, };