translate_import.html 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  5. <script>
  6. function nextPar(arr,index)
  7. {
  8. if(index<arr.length-1)
  9. {
  10. for(var j=index+1;j<arr.length;j++)//循环arr的长度次
  11. {
  12. if(arr[j].id>0)
  13. {
  14. return(j)//把J的值返回成为函数值
  15. }
  16. }
  17. return(-1)
  18. }
  19. else{
  20. return(-1);
  21. }
  22. }
  23. function do_final(){
  24. var biaodian = document.getElementById("biaodian").value.split("$")
  25. var biaodian_no = document.getElementById("biaodian_no").value.split("$")
  26. var strPali = document.getElementById("input_pali").value;
  27. var strPaliPar=strPali.split("\n");/*按回车拆分原文为数组*/
  28. var strTran = document.getElementById("output_translate").value;
  29. var strTranPar=strTran.split("\n");//按回车拆分译文为数组
  30. var strTranList = new Array()//创建原本译文数组
  31. var newTran = new Array()//创建结果译文数组
  32. for(var i=0;i<strTranPar.length;i++)//依照译文行数进行循环
  33. {
  34. parPart=strTranPar[i].split("\t")//依照tab将译文一维数组拆分成二维数组
  35. var newPar=new Object()//创建对象
  36. newPar.id=parPart[0]*10
  37. newPar.text=parPart[1]//赋值:译文内容
  38. newPar.id=newPar.id/10//赋值:巴利原文段落号
  39. if(newPar.text){
  40. if(newPar.id>0){
  41. strTranList.push(newPar)//将一维矩阵塞入译文二维数组末端
  42. }
  43. else{
  44. for(ibd in biaodian){
  45. eval("newPar.text=newPar.text.replace(/"+biaodian[ibd]+"/g,'"+biaodian[ibd]+"\t')")
  46. eval("newPar.text=newPar.text.replace(/\t"+biaodian[ibd]+"/g,'"+biaodian[ibd]+"')")
  47. }
  48. splitText=newPar.text.split("\t")
  49. for(x in splitText){
  50. var newSplitObj=new Object()//创建对象
  51. newSplitObj.id=0
  52. newSplitObj.text=splitText[x]
  53. var strNoSpace=newSplitObj.text.replace(/ /g,"")
  54. if(strNoSpace.length>0){
  55. var isBdNo=false
  56. for(ibdno in biaodian_no){
  57. if(strNoSpace==biaodian_no[ibdno]){
  58. isBdNo=true;
  59. break;
  60. }
  61. }
  62. if(isBdNo)
  63. {
  64. strTranList[strTranList.length-1].text+=newSplitObj.text
  65. }
  66. else
  67. {
  68. strTranList.push(newSplitObj)
  69. }
  70. }
  71. }
  72. }
  73. }
  74. }//依照tab将译文一维数组转换成二维数组
  75. //for(x in strTranList){
  76. // document.getElementById("info").innerHTML+=(strTranList[x].id+"-"+strTranList[x].text+"<br />")
  77. //}
  78. //return;
  79. var currPar=0;//定义当前译文段落号,起始值0
  80. var currId=strTranList[currPar].id//定义当前译文ID,赋值:当前译文对应的巴利原文段落号
  81. while(currPar<strTranList.length-1)//执行次数=strTranList的长度-1
  82. {
  83. var iNextPar=nextPar(strTranList,currPar)//定义下一标题译文段落号
  84. var nextId=strTranList[iNextPar].id//定义下一标题ID,赋值:对应的巴利原文段落号
  85. if(iNextPar==currPar+1){//紧挨着
  86. if(nextId==currId+1){//正好
  87. newTran.push(strTranList[currPar].text)//推送当前段落译文到结果译文数组
  88. }
  89. else{ //不够 拆分
  90. //拆分后的段落数
  91. var iSplitNum = nextId-currId;
  92. var strCombinPali="";
  93. //生成合并pali 并计算每段比例
  94. for(var k=currId-1;k<nextId-1;k++){
  95. strCombinPali=strCombinPali+strPaliPar[k]
  96. }
  97. splitText=new Array()
  98. iCurrSplitBegin=0
  99. for(var k=0;k<iSplitNum;k++){
  100. newRate=strPaliPar[currId-1+k].length/strCombinPali.length
  101. iCurrSplitEnd=iCurrSplitBegin+(strTranList[currPar].text.length*newRate)
  102. newText=strTranList[currPar].text.slice(iCurrSplitBegin,iCurrSplitEnd)
  103. iCurrSplitBegin=iCurrSplitEnd
  104. newTran.push(newText)
  105. //document.getElementById("info").innerHTML=document.getElementById("info").innerHTML+newRate+" "+currId+" "+nextId+"<br>"
  106. }
  107. }
  108. }
  109. else//不挨着
  110. {
  111. if(nextId-currId==iNextPar-currPar){//正好,下一标题原文号-当前标题原文号=下一标题译文号-当前标题译文号
  112. for(var iNew=currPar;iNew<iNextPar;iNew++)
  113. {
  114. newTran.push(strTranList[iNew].text)
  115. }
  116. }
  117. else if(nextId-currId>iNextPar-currPar){//拆,原文段数>译文段数
  118. newTran.push(strTranList[currPar].text)
  119. //拆分后的段落数
  120. var iSplitNum = nextId-currId-1;
  121. //生成合并译文
  122. var strCombinTran="";
  123. for(var k=currPar+1;k<iNextPar;k++){
  124. strCombinTran=strCombinTran+strTranList[k].text
  125. }
  126. //生成合并pali 并计算每段比例
  127. var strCombinPali="";//定义合并巴利原文
  128. for(var k=currId;k<nextId-1;k++)
  129. {
  130. strCombinPali=strCombinPali+strPaliPar[k]
  131. }//将巴利原文合并
  132. splitText=new Array()//定义新数组
  133. iCurrSplitBegin=0
  134. for(var k=0;k<iSplitNum;k++)//循环巴利原文段落数次
  135. {
  136. newRate=strPaliPar[currId+k].length/strCombinPali.length//从巴利原文数组中提取当前段落字符数和总字符数之比
  137. iCurrSplitEnd=iCurrSplitBegin+(strCombinTran.length*newRate)//结束编码=起始编码+中间编码*比例
  138. newText=strCombinTran.slice(iCurrSplitBegin,iCurrSplitEnd)//从起始到结束,取出
  139. iCurrSplitBegin=iCurrSplitEnd
  140. newTran.push(newText)
  141. //document.getElementById("info").innerHTML=document.getElementById("info").innerHTML+newRate+" "+currId+" "+nextId+"<br>"
  142. }
  143. }
  144. else{//合并
  145. newTran.push(strTranList[currPar].text)
  146. //拆分后的段落数
  147. var iSplitNum = nextId-currId-1;
  148. var tranNum=new Array()
  149. //生成合并译文
  150. var strCombinTran="";
  151. for(var k=currPar+1;k<iNextPar;k++){
  152. strCombinTran=strCombinTran+strTranList[k].text
  153. tranNum.push(strCombinTran.length)
  154. }
  155. var paliNum=new Array()
  156. //生成合并pali 并计算每段比例
  157. var strCombinPali="";
  158. for(var k=currId;k<nextId-1;k++)
  159. {
  160. strCombinPali=strCombinPali+strPaliPar[k]
  161. paliNum.push(strCombinPali.length)
  162. }
  163. var theoNum=new Array()
  164. var PCRate=strCombinTran.length/strCombinPali.length//译巴字数比
  165. for(var k=0;k<nextId-currId-1;k++)//得到理论字数
  166. {
  167. theoNum.push(paliNum[k]*PCRate)
  168. //document.getElementById("info").innerHTML=document.getElementById("info").innerHTML+paliNum[k]+" "+theoNum[k]+"<br>"
  169. }
  170. function tranPos(J)//输入译文段号返回合并段号
  171. {
  172. if(tranNum[J]-theoNum[0]<0)
  173. {
  174. return(0)
  175. }
  176. else if(J==0)
  177. {
  178. return(0)
  179. }
  180. else if(tranNum[J]>=theoNum[nextId-currId-2])
  181. {
  182. return(nextId-currId-2)
  183. }
  184. else
  185. {
  186. for(var i=1;i<nextId-currId-1;i++)
  187. {
  188. if(tranNum[J]>theoNum[i])//译文J长度大于原文i理论值
  189. {}
  190. else//原文i理论值>译文J长度>原文i-1理论值
  191. {
  192. if(Math.abs(tranNum[J]-theoNum[i])<Math.abs(tranNum[J]-theoNum[i-1]))//更靠近原文i理论值
  193. {
  194. if(Math.abs(tranNum[J]-theoNum[i])<Math.abs(tranNum[J+1]-theoNum[i]))//译文J比译文J+1更靠近理论值
  195. {
  196. return(i)
  197. }
  198. else//译文J+1比译文J更靠近理论值
  199. {
  200. return(i)
  201. }
  202. }
  203. else//更靠近原文i-1理论值
  204. {
  205. if(Math.abs(tranNum[J-1]-theoNum[i-1])<Math.abs(tranNum[J]-theoNum[i-1]))//译文J-1比译文J更靠近理论值i-1
  206. {
  207. return(i)
  208. }
  209. else//译文J比译文J-1更靠近理论值i-1
  210. {
  211. return(i-1)
  212. }
  213. }
  214. }
  215. }
  216. }
  217. }
  218. var temtrancom=""
  219. for(var k=0;k<iNextPar-currPar-1;k++)
  220. {
  221. var nextPos=tranPos(k+1)
  222. var currPos=tranPos(k)
  223. if(k==iNextPar-currPar-2)
  224. {
  225. temtrancom=temtrancom+strTranList[k+currPar+1].text
  226. newTran.push(temtrancom)
  227. temtrancom=""
  228. }
  229. else
  230. {
  231. if(nextPos>currPos)
  232. {
  233. if(nextPos-currPos>1)
  234. {
  235. for(var x=1;x<nextPos-currPos;x++)
  236. {
  237. newTran.push(" ")
  238. }
  239. }
  240. else
  241. {}
  242. temtrancom=temtrancom+strTranList[k+currPar+1].text
  243. newTran.push(temtrancom)
  244. temtrancom=""
  245. }
  246. else
  247. {
  248. temtrancom=temtrancom+strTranList[k+currPar+1].text
  249. }
  250. }
  251. //document.getElementById("info").innerHTML=document.getElementById("info").innerHTML+tranNum[k]+" "+tranPos(k)+" "+theoNum[tranPos(k)]+" "+(k+currPar+1)+"<br>"
  252. }
  253. }
  254. }
  255. currPar=iNextPar
  256. currId=strTranList[currPar].id
  257. }
  258. newTran.push(strTranList[strTranList.length-1].text)
  259. var output=""
  260. for(var i=0;i<newTran.length;i++){
  261. output+=(i+1)+"\t"+newTran[i]+"\n"
  262. }
  263. document.getElementById("output_final").value=output
  264. //output=output.replace(/#/g,"");
  265. }
  266. </script>
  267. </head>
  268. <body>
  269. <h3>标点替换表</h3>
  270. <input type="input" id="biaodian" value="。$?$;$:$:$’$”" />
  271. <h3>标点不替换表</h3>
  272. <input type="input" id="biaodian_no" value="’$”" />
  273. <h3>巴利原文</h3>
  274. 从“XXX_Pali.txt”文件中复制纯文本黏贴于此<br>
  275. <textarea id="input_pali" rows="15" cols="100">
  276. </textarea>
  277. <h3>添加译文</h3>
  278. 从xls文件中复制“行号”“内容”两列内容黏贴于此<br>
  279. <textarea id="output_translate" rows="15" cols="100"></textarea><br>
  280. <button type="button" onclick="do_final()">批量处理</button><br>
  281. <h3>对读结果</h3>
  282. 可在文本编辑器中进行中巴对读查看结果<br>
  283. <textarea id="output_final" rows="15" cols="100"></textarea><br>
  284. <div id="test">
  285. </div>
  286. <div id="info">
  287. </div>
  288. </body>
  289. </html>