Created
November 12, 2009 05:18
-
-
Save mgng/232623 to your computer and use it in GitHub Desktop.
選択範囲を圧縮してアラート表示するやつ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** DocComp*/ | |
var DocComp = { | |
reg1 : new RegExp('[一-龠々〆ヵヶ]+|[ぁ-ん]+|[ァ-ヴー]+|[\uFF65-\uFF9F]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+|[,\.、。!!?\?・]+|(.*?)|「.*?」|『.*?』|【.*?】|〈.*?〉|\(.*?\)|\[.*?\]|\{.*?\}|\<.*?\>|[\s ]+', 'g'), | |
reg2 : new RegExp('(でなければ|そういえば|そういや|どうにも|こうにも|について|そりゃ|ぐらい|くらい|ながら|ならば|までを|までの|なのか|として|です|ます|つつ|だに|まで|とは|とて|なら|から|まで|して|だけ|より|にて|ほど|など|って|では)', 'g'), | |
trim : function(str){return str.replace(/^[\s ]+|[\s ]+$/g, '');}, | |
morpheme : function(str){ | |
var s=str.replace(this.reg2, "$1|"),a=s.split("|"),rt=[],i=0,l=a.length; | |
for (; i<l; i++) { | |
var ts=a[i].match(this.reg1); | |
if(ts){ | |
for(var n=0,tl=ts.length; n<tl; n++){ | |
var t=this.trim(ts[n]); | |
if(t!==''){rt.push(t);} | |
} | |
} | |
} | |
return rt; | |
}, | |
markov : function(s, c_len){ | |
s=this.trim(s); | |
c_len=c_len||3; | |
if(s==''){return '';} | |
var s_ls = this.morpheme(s); | |
var s_ls_ln = s_ls.length; | |
var c_idx = 0; | |
var rt = []; | |
var lw = ''; | |
var i=0,j=0; | |
if(s_ls_ln <= c_len){return s_ls.join('');} | |
s_ls.push(false); // EOF false | |
s_ls_ln++; | |
for(i=0; i<c_len; i++) { | |
rt.push(s_ls[i]); | |
lw=s_ls[i]; | |
} | |
for(i=0; i<s_ls_ln; i++) { | |
var idxs = []; | |
for(j=c_idx; j<s_ls_ln; j++) { | |
if (s_ls[j] == lw && s_ls[j+1]) { | |
idxs.push(j+1); | |
} | |
} | |
var idx_ln = idxs.length; | |
if (idx_ln == 0) { | |
return rt.join(''); | |
} | |
c_idx=(idx_ln<=3)?idxs[idx_ln-1]:idxs[Math.ceil(idx_ln/2)-1]; | |
for(j=c_idx; j<c_idx+c_len; j++) { | |
if (s_ls[j] === false) { // EOF | |
return rt.join(''); | |
} | |
rt.push(s_ls[j]); | |
lw=s_ls[j]; | |
} | |
} | |
return rt.join(''); | |
}, | |
init:function(){ | |
var d=document,w=window,b=d.createElement('input'); | |
b.type='button'; | |
b.value='圧縮する'; | |
b.style.zIndex=9999; | |
b.style.position='fixed'; | |
b.style.top='2em'; | |
b.style.left='50%'; | |
b.style.display='block'; | |
b.onclick=function(){DocComp.run();}; | |
d.body.appendChild(b); | |
}, | |
run:function(){ | |
var d=document,w=window; | |
var s=(w.getSelection?w.getSelection():d.selection.createRange().text)+''; | |
if (s==''){return;} | |
var r = this.markov(s); | |
var s_len = s.length; | |
var r_len = r.length; | |
var rate = Math.ceil(r_len/s_len*100); | |
alert([r, '\n\n', s_len, '文字→', r_len, '文字(', rate, '%)'].join('')); | |
} | |
}; | |
DocComp.init(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment