UNPKG

phonemize

Version:

Fast phonemizer with rule-based G2P prediction. Pure JavaScript implementation.

2 lines (1 loc) 1.76 kB
"use strict";var KOREAN_CONSONANTS={g:`k`,kk:`k͈`,k:`kʰ`,n:`n`,d:`t`,tt:`t͈`,t:`tʰ`,r:`ɾ`,l:`l`,m:`m`,b:`p`,pp:`p͈`,p:`pʰ`,s:`s`,ss:`s͈`,j:`tɕ`,jj:`tɕ͈`,ch:`tɕʰ`,h:`h`,ng:`ŋ`,"":`ʔ`},KOREAN_VOWELS={a:`a`,ae:`ɛ`,ya:`ja`,yae:`jɛ`,eo:`ʌ`,e:`e`,yeo:`jʌ`,ye:`je`,o:`o`,wa:`wa`,wae:`wɛ`,oe:`we`,u:`u`,wo:`wʌ`,we:`we`,wi:`wi`,eu:`ɯ`,ui:`ɰi`,i:`i`},KOREAN_FINALS={g:`k̚`,k:`k̚`,kk:`k̚`,n:`n`,d:`t̚`,s:`t̚`,ss:`t̚`,t:`t̚`,j:`t̚`,ch:`t̚`,l:`l`,m:`m`,b:`p̚`,p:`p̚`,ng:`ŋ`},KoreanG2PModel=function(){function r(){this.id=`ko-g2p`,this.name=`Korean G2P Processor`,this.supportedLanguages=[`ko`]}return r.prototype.predict=function(e,t,n){return this.processKorean(e)},r.prototype.addPronunciation=function(e,t){},r.prototype.decomposeRomajaSyllable=function(e){e=e.toLowerCase();for(var n=``,r=``,i=``,a=Object.keys(KOREAN_VOWELS).sort(function(e,t){return t.length-e.length}),o=0,s=a;o<s.length;o++){var c=s[o],l=e.indexOf(c);if(l!==-1){r=c,n=e.substring(0,l),i=e.substring(l+c.length);break}}return r?{initial:n,medial:r,final:i,original:e}:{initial:``,medial:e,final:``,original:e}},r.prototype.processKorean=function(r){var i=this,a=r.match(/[A-Z][a-z]*/g)||[];if(a.length===0)return r;for(var o=a.map(function(e){return i.decomposeRomajaSyllable(e)}),s=0;s<o.length-1;s++){var c=o[s],l=o[s+1];c.final&&!l.initial&&(l.initial=c.final,c.final=``)}for(var u=``,s=0;s<o.length;s++){var d=o[s],f=KOREAN_CONSONANTS[d.initial]||d.initial,p=KOREAN_VOWELS[d.medial]||d.medial,m=KOREAN_FINALS[d.final]||``;if(s>0&&[`k`,`t`,`p`,`tɕ`].includes(f)){var h=o[s-1];if(KOREAN_VOWELS[h.medial]||[`n`,`m`,`ŋ`,`l`].includes(KOREAN_FINALS[h.final])){var g={k:`ɡ`,t:`d`,p:`b`,tɕ:`dʑ`};f=g[f]}}u+=f+p+m}return u},r}();module.exports=KoreanG2PModel;