编程示例:汉字生成盲文的翻译器

编程示例:汉字生成盲文的翻译器本文以简要的说明 描述了生成盲文的方法 中文 盲文

大家好,欢迎来到IT知识分享网。

1 翻译器的意义

我国有视障人士2000多万人,需要把大量的文章与书籍转换成盲文书。

2 翻译器的开发原理

根据汉语与盲文符号的对照表,以此为基础,进行汉字与盲文之间的转换。

如下的两个图片是汉语与盲文符号的对照表。

编程示例:汉字生成盲文的翻译器

编程示例:汉字生成盲文的翻译器
3 翻译器的开发示例代码

<HTML> <HEAD> <TITLE> 汉字生成盲文第一版 </TITLE> <meta charset="gb2312"> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT=""> <META NAME="Keywords" CONTENT=""> <META NAME="Description" CONTENT=""> <script src='zh_character_to_pinyin_character_with_tone_map.js'></script> </HEAD> <BODY onkeypress='key_operation()'> <p id="p1">生成盲文的方法</p> <p>在左边的方框内,输入一段话,再点击生成盲文的按钮,在画布上就生成了盲文</p> <textarea id='txt5' rows="5" cols="140"></textarea> <input type='button' value='生成盲文' onclick='print_braille()'></input> <textarea id='txt6' rows="5" cols="140"></textarea> <canvas id="myCanvas" width="600" height="300" style="background-color:blue;border: 10px yellow solid" ></canvas> <p> <input type='button' value='q' onclick='input("q")'></input> <input type='button' value='w' onclick='input("w")'></input> <input type='button' value='e' onclick='input("e")'></input> <input type='button' value='r' onclick='input("r")'></input> <input type='button' value='t' onclick='input("t")'></input> <input type='button' value='y' onclick='input("y")'></input> <input type='button' value='u' onclick='input("u")'></input> <input type='button' value='i' onclick='input("i")'></input> <input type='button' value='o' onclick='input("o")'></input> <input type='button' value='p' onclick='input("p")'></input> <input type='button' value='[' onclick='input("[")'></input> <input type='button' value=']' onclick='input("]")'></input> <input type='button' value='\' onclick='input("\")'></input> </p> <p> <input type='button' value='a' onclick='input("a")'></input> <input type='button' value='s' onclick='input("s")'></input> <input type='button' value='d' onclick='input("d")'></input> <input type='button' value='f' onclick='input("f")'></input> <input type='button' value='g' onclick='input("g")'></input> <input type='button' value='h' onclick='input("h")'></input> <input type='button' value='j' onclick='input("j")'></input> <input type='button' value='k' onclick='input("k")'></input> <input type='button' value='l' onclick='input("l")'></input> <input type='button' value=';' onclick='input(";")'></input> <input type='button' value='' onclick='input("")'></input> <input type='button' value='enter' onclick='input("10")'></input> </p> <p> <input type='button' value='z' onclick='input("z")'></input> <input type='button' value='x' onclick='input("x")'></input> <input type='button' value='c' onclick='input("c")'></input> <input type='button' value='v' onclick='input("v")'></input> <input type='button' value='b' onclick='input("b")'></input> <input type='button' value='n' onclick='input("n")'></input> <input type='button' value='m' onclick='input("m")'></input> <input type='button' value=',' onclick='input(",")'></input> <input type='button' value='.' onclick='input(".")'></input> <input type='button' value='/' onclick='input("/")'></input> </p> <script> var e=document.getElementById("myCanvas"); var cxt=e.getContext("2d"); cxt.fillStyle="#FF0000"; cxt.fillRect(0,0,50,5); var first_sound=[[[[1,0],[1,0],[0,0]],'b'], [[[1,1],[1,0],[1,0]],'p'], [[[1,1],[0,0],[1,0]],'m'], [[[1,1],[1,0],[0,0]],'f'], [[[1,1],[0,1],[0,0]],'d'], [[[0,1],[1,1],[1,0]],'t'], [[[1,1],[0,1],[1,0]],'n'], [[[1,0],[1,0],[1,0]],'l'], [[[1,1],[1,1],[0,0]],'g'], [[[1,1],[1,1],[0,0]],'j'], [[[1,0],[0,0],[1,0]],'k'], [[[1,0],[0,0],[1,0]],'q'], [[[1,0],[1,1],[0,0]],'h'], [[[1,0],[1,1],[0,0]],'x'], [[[0,1],[0,0],[1,0]],'zh'], [[[0,1],[0,0],[1,0]],'zhi'], [[[1,1],[1,1],[1,0]],'ch'], [[[1,1],[1,1],[1,0]],'chi'], [[[1,0],[0,1],[0,1]],'sh'], [[[1,0],[0,1],[0,1]],'shi'], [[[0,1],[1,1],[0,0]],'r'], [[[0,1],[1,1],[0,0]],'ri'], [[[1,0],[0,1],[1,1]],'z'], [[[1,0],[0,1],[1,1]],'zi'], [[[1,1],[0,0],[0,0]],'c'], [[[1,1],[0,0],[0,0]],'ci'], [[[0,1],[1,0],[1,0]],'s'], [[[0,1],[1,0],[1,0]],'si']]; var last_sound=[[[[0,0],[0,1],[1,0]],'a'], [[[0,0],[1,0],[0,1]],'o'], [[[0,0],[1,0],[0,1]],'e'], [[[0,1],[1,0],[0,0]],'yi'], [[[0,1],[1,0],[0,0]],'i'], [[[1,0],[0,0],[1,1]],'wu'], [[[1,0],[0,0],[1,1]],'u'], [[[0,1],[0,0],[1,1]],'yu'], [[[0,1],[0,0],[1,1]],'v'], [[[1,0],[1,1],[1,0]],'er'], [[[0,1],[1,0],[0,1]],'ai'], [[[0,0],[1,1],[1,0]],'ao'], [[[0,1],[1,0],[1,1]],'ei'], [[[1,0],[1,1],[1,1]],'ou'], [[[1,1],[1,0],[0,1]],'ya'], [[[1,1],[1,0],[0,1]],'ia'], [[[0,1],[0,1],[1,0]],'yao'], [[[0,1],[0,1],[1,0]],'iao'], [[[1,0],[0,1],[0,0]],'ye'], [[[1,0],[0,1],[0,0]],'ie'], [[[1,0],[1,1],[0,1]],'you'], [[[1,0],[1,1],[0,1]],'iou'], [[[1,1],[1,1],[1,1]],'wa'], [[[1,1],[1,1],[1,1]],'ua'], [[[1,1],[0,1],[1,1]],'wai'], [[[1,1],[0,1],[1,1]],'uai'], [[[0,1],[1,1],[0,1]],'wei'], [[[0,1],[1,1],[0,1]],'uei'], [[[1,0],[0,1],[1,0]],'wo'], [[[1,0],[0,1],[1,0]],'uo'], [[[0,1],[1,1],[1,1]],'yue'], [[[0,1],[1,1],[1,1]],'ve'], [[[1,0],[1,0],[1,1]],'an'], [[[0,0],[1,0],[1,1]],'ang'], [[[0,0],[0,1],[1,1]],'en'], [[[0,1],[0,1],[1,1]],'eng'], [[[1,1],[0,0],[0,1]],'yan'], [[[1,1],[0,0],[0,1]],'ian'], [[[1,1],[0,0],[1,1]],'yang'], [[[1,1],[0,0],[1,1]],'iang'], [[[1,0],[1,0],[0,1]],'yin'], [[[1,0],[1,0],[0,1]],'in'], [[[1,0],[0,0],[0,1]],'ying'], [[[1,0],[0,0],[0,1]],'ing'], [[[1,1],[1,1],[0,1]],'wan'], [[[1,1],[1,1],[0,1]],'uan'], [[[0,0],[1,1],[1,1]],'wang'], [[[0,0],[1,1],[1,1]],'uang'], [[[0,0],[1,1],[0,0]],'wen'], [[[0,0],[1,1],[0,0]],'uen'], [[[0,0],[1,1],[0,1]],'weng'], [[[0,0],[1,1],[0,1]],'ong'], [[[1,1],[1,0],[1,1]],'yuan'], [[[1,1],[1,0],[1,1]],'van'], [[[0,1],[0,1],[0,1]],'yun'], [[[0,1],[0,1],[0,1]],'vn'], [[[1,1],[0,1],[0,1]],'yong'], [[[1,1],[0,1],[0,1]],'iong'] ]; var tone_number=[32,8,2,10,0,0,0]; var number=[28,32,40,48,52,36,56,60,44,24]; var english_character=[32,40,48,52,36,56,60,44,24,28,34,42,50,54,38,58,62,46,26,30,35,43,29,51,55,39]; var meta_letters=['a','o','e','i','u','v']; var ch_letters=[[257,225,462,224],[333,243,466,242],[275,233,283,232],[299,237,464,236],[363,250,468,249],[470,472,474,476]]; var braille_array=[]; //translate_en_letters_to_ch_letters('jiong3') jiong3 ----> jǐong function translate_en_letters_to_ch_letters(str) { var position_A=-1; var position_B=-1; for(var i=0;i<meta_letters.length;i++) { position_A=str.indexOf(meta_letters[i]); if(position_A>=0) {if (i==3) { position_B=str.indexOf(meta_letters[i+1]); if(position_B<position_A) {break;} else {position_B=position_A; i=i+1; break;} } else {break;} } } var re_source_letter=meta_letters[i]; var tone=parseInt(str.charCodeAt(str.length-1),10)-48; if(tone>0&&tone<=9) { var re_target_letter=String.fromCharCode(ch_letters[i][tone-1]); str=str.replace(re_source_letter,re_target_letter); str=str.substring(0,str.length-1); } return str; } /*function test() { document.getElementById("txt4").innerText=get_pinyin_code_from_quwei_code(document.getElementById("txt3").innerText); }*/ function getChsAscii(str) { var high=Math.floor(str/100); var low=parseInt(str%100,10); return high*256+low+160*257-65536; } function input(val) { if(val>='a'&&val<='z') { document.getElementById("txt3").innerText=document.getElementById("txt3").innerText+val; } else if (val=='10') { document.getElementById("txt4").innerText=get_pinyin_code_from_quwei_code(document.getElementById("txt3").innerText); document.getElementById("txt3").innerText=''; } } var key_buffer=''; function key_operation() { var val=event.charCode; if(val>=97&&val<=122) { key_buffer=key_buffer+event.char; } else if (val==13) { document.getElementById("txt4").innerText=get_pinyin_code_from_quwei_code(key_buffer); key_buffer=''; } } function getvalue(val){ if (val=='') {return document.getElementById("txt5").value;} else {return val;} } /* function test() { var cc=getvalue(document.getElementById("txt5").innerText); var str=''; var ch_str=''; var s=0; var count=0; for(var i=0;i<pydic.length;i++){ if(pydic.charCodeAt(i)>660){ str+=pydic.charAt(i)+","; } } document.getElementById("txt6").value=str;//get_sound(cc);// document.getElementById("txt6").innerText=str;//result; }*/ //get_sound_part('sheng1')----> sh eng 1 function get_sound_part(cc) { var first_sound_ch="bpmfdtnlgjkqhx"; var last_sound_ch="wyaeiou"; var result_first=''; var result_last=''; var result_num=''; var str=''; var ch_str=''; var s=0; var count=0; var i=0; if(first_sound_ch.indexOf(cc.charAt(i))!=-1){ s=1; result_first=cc.charAt(i); } else if(cc.charAt(i)=='z'||cc.charAt(i)=='c'||cc.charAt(i)=='s') { if(cc.charAt(num_add(i,1))=='h') { if(cc.charAt(num_add(i,2))=='i') {result_first=cc.charAt(i)+cc.charAt(num_add(i,1))+cc.charAt(num_add(i,2));s=3;} else {result_first=cc.charAt(i)+cc.charAt(num_add(i,1));s=2;} } else if(cc.charAt(num_add(i,1))=='i') {result_first=cc.charAt(i)+cc.charAt(num_add(i,1));s=2;} else {result_first=cc.charAt(i);s=1;} } else if(cc.charAt(i)=='r') { if(cc.charAt(num_add(i,1))=='i') {result_first=cc.charAt(i)+cc.charAt(num_add(i,1));s=2;} else {result_first=cc.charAt(i);s=1;} } else if(last_sound_ch.indexOf(cc.charAt(i))!=-1) {result_first='';s=0;} for(var i=s;i<cc.length;i++) { if(cc.charCodeAt(i)>64) { result_last+=cc.charAt(i); } else { result_num=cc.charAt(i); } } var front=find_code(first_sound,result_first); var mid=find_code(last_sound,result_last); var last=tone_number[result_num-1]; braille_array.push(front); braille_array.push(mid); braille_array.push(last); return front+ ' ' +mid+' '+last; } function print_braille() { var cc=getvalue(document.getElementById("txt5").innerText); var str=''; var single_str=''; var ch_str=''; var s=0; var count=0; braille_array=[]; for(var i=0;i<cc.length;i++){ if(pydic.indexOf(cc.charAt(i))!=-1&&cc.charCodeAt(i)>200){ s=1; single_str=''; while(pydic.charAt(pydic.indexOf(cc.charAt(i))+s)!=","){ single_str+=pydic.charAt(pydic.indexOf(cc.charAt(i))+s); s++; } str+=get_sound_part(single_str); //进行了音节分离 str+=" "; ch_str+=cc.charAt(i)+times2(' ',s-2); count+=s; } else if (cc.charCodeAt(i)==13||cc.charCodeAt(i)==10||count>70){ str+=cc.charAt(i)+String.fromCharCode(13)+String.fromCharCode(10)+ch_str+String.fromCharCode(13)+String.fromCharCode(10); ch_str=''; count=0; } else{ str+=cc.charAt(i); ch_str+=cc.charAt(i); count+=1; } } make_braille(braille_array); document.getElementById("txt6").value=str;//get_sound(cc);// document.getElementById("txt6").innerText=str;//result; } // function make_braille(arr) { // var arr=[39,25,10,39,38,2,40,49,32,52,9,0,56,11,32,34,15,10,54,27,10,37,35,32,28,35,10,0,24,32,52,61,10,44,63,10]; var left=100; var top=20; var colnum=0; var rownum=0; for (var i=0;i<arr.length;i++) { if(i>20) {rownum=1; colnum=i-20;} else {rownum=0; colnum=i;} print_a_character(left,top,colnum,rownum,arr[i]); } } function print_a_character(left,top,colnum,rownum,num) { var res=num_to_array(num); for(var i=0;i<res.length;i++) { for(var j=0;j<res[i].length;j++) { if(res[i][j]==1) {drawCircleWithNative(left+1+j*10+colnum*24,top+1+i*10+rownum*34,4,4,0,360);} else {drawCircleWithNativeEmpty(left+1+j*10+colnum*24,top+1+i*10+rownum*34,4,4,0,360);} } } } //get_sound('声') ---->sheng1 /*function get_sound(character) { if(character=='声') {return 'sheng1';} else {return 'yin';} }*/ // times2('a',2) --->'aa' function times2(str, num){ return new Array(num+1).join(str); } function num_add(a,b) { return parseInt(a,10)+parseInt(b,10); } //find_code(first_sound_str,'b')---->40 function find_code(arr,str) { var result=0; for(var i=0;i<arr.length;i++) { if(arr[i][1]==str) { result=array_to_num(arr[i][0]); break; } } return result; } //array_to_num([[1,0],[1,0],[0,0]]) --->40 function array_to_num(arr) { var result=0; for(var i=0;i<arr.length;i++) { for(var j=0;j<arr[i].length;j++) {result=result*2+arr[i][j]; } } return result; } //num_to_array(40)---->[[1,0],[1,0],[0,0]] function num_to_array(num) { var temp=0; var result=[[0,0],[0,0],[0,0]]; for(var i=result.length-1;i>=0;i--) { for(var j=result[i].length-1;j>=0;j--) { temp=num%2; num=(num-temp)/2; result[i][j]=temp; } } return result; } function drawCircleWithNative(cx,cy,ra,rb,start,end) { cxt.fillStyle='black'; cxt.strokeStyle='pink'; cxt.lineWidth=1; cxt.beginPath(); cxt.arc(cx,cy,ra,0,Math.PI*2); cxt.closePath(); cxt.fill(); cxt.stroke(); } function drawCircleWithNativeEmpty(cx,cy,ra,rb,start,end) { cxt.fillStyle='white'; cxt.strokeStyle='pink'; cxt.lineWidth=1; cxt.beginPath(); cxt.arc(cx,cy,ra,0,Math.PI*2); cxt.closePath(); cxt.fill(); cxt.stroke(); } </script> </BODY> </HTML> 

4 翻译器的界面示例与执行示例结果

编程示例:汉字生成盲文的翻译器

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/153259.html

(0)
上一篇 2025-03-04 21:20
下一篇 2025-03-04 21:25

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信