亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

nodejs簡單實現中英文翻譯

2024-05-06 16:19:12
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了nodejs簡單實現中英文翻譯的方法和示例,雖然還存在著不小的問題,但是也算是基本能用了,這里推薦給大家。

幫以前同事解決一個需求,中文項目 翻譯 英文項目~~~

考慮到具體實現方面的問題,如果智能的話,肯定是要做中文的語法分析,不過感覺這個有難度。

所以最后的方案是遍歷文件,將中文短語匹配出來,再進行人工翻譯,將中文短語替換成翻譯的內容。當然后期還是需要人工再檢驗下,畢竟代碼中的中文,可能會影響到相關的程序。

這個問題,明顯涉及到 多線程,文件讀寫,第一時間就想到的是 nodejs,雖然nodejs是一個主線程,但是異步文件讀寫,事件響應機制,肯定也是調用了線程,在實際編程的時候不需要考慮線程的相關的問題。

代碼不復雜如下,寫完了之后,適當的封裝了下

 

 
  1. var fs = require('fs'); 
  2. var http = require('http'); 
  3. var filePath = 'D://WORK_new//'
  4. var logPath = 'D://chinese.log'
  5.  
  6. var map = {}; 
  7. var num = 0; 
  8.  
  9. var dictionary = (function () { 
  10. var map = {}; 
  11. return { 
  12. logPath: 'D://chinese.log'
  13. set: function (key, val) { 
  14. map[key] = val || ''
  15. }, 
  16. get: function (key) { 
  17. return map[key]||''
  18. }, 
  19. save2File: function () { 
  20. fs.writeFile(this.logPath, JSON.stringify(map).replace(/","/g,'",/r/n"'),{encoding:'utf8',flag:'w'}, function (err) { 
  21. if (err) throw err; 
  22. });  
  23. }, 
  24. loadFile: function (callback) { 
  25. fs.readFile(this.logPath, {encoding:'utf8'},function (err, data) { 
  26. map = JSON.parse(data); 
  27. callback(); 
  28. }) 
  29. }, 
  30. translateByGoogle: function (callback) { 
  31. var index = 0; 
  32. for (var key in map) { 
  33. if (map[key] == '') { 
  34. index++; 
  35. (function (key) { 
  36. http.get("http://translate.google.cn/translate_a/t?client=t&hl=zh-CN&sl=zh-CN&tl=en&ie=UTF-8&oe=UTF-8&oc=2&otf=1&ssel=3&tsel=6&sc=2&q="+key, function(res) { 
  37. res.setEncoding('utf8'); 
  38. var body = ""
  39. res.on('data'function (chunk) { 
  40. body+=chunk;  
  41. }).on('end'function (){  
  42. var obj = eval('('+body+')'); 
  43. map[key] = obj[0][0][0]; 
  44. index--; 
  45. if (index == 0) { 
  46. callback(); 
  47. }); 
  48. }).on('error'function(e) { 
  49. console.log('http error'); 
  50. index--; 
  51. if (index == 0) { 
  52. callback(); 
  53. console.log("Got error: " + e.message); 
  54. }); 
  55. })(key); 
  56. })(); 
  57.  
  58. function File () { 
  59. var index = 0; 
  60. var _readFile = function (pathStr, fileBack, doneBack) { 
  61. fs.readFile(pathStr,{encoding:'utf8'}, function (err, data) { 
  62. index--; 
  63. if (err) { 
  64. data = ""
  65. console.log(err,pathStr) 
  66. //throw err; 
  67. fileBack(data,pathStr); 
  68. if (index == 0) { 
  69. doneBack(); 
  70. }); 
  71. }; 
  72. var _walkDir = function (pathStr, fileBack, doneBack) { 
  73. fs.readdir(pathStr, function (err, files) { 
  74. files.forEach(function (file) { 
  75. if(fs.statSync(pathStr + '/' + file).isDirectory()){ 
  76. _walkDir(pathStr + '/' + file, fileBack, doneBack); 
  77. else { 
  78. if (/.js$|.html$|.htm$|.jsp$/.test(file)){ 
  79. index ++; 
  80. _readFile(pathStr + '/' + file, fileBack, doneBack); 
  81. return
  82. }); 
  83. }); 
  84. this.walkDir = function (pathStr, fileBack, doneBack) { 
  85. index = 0; 
  86. _walkDir(pathStr, fileBack, doneBack); 
  87.  
  88. //第一步 獲取中文 
  89. dictionary.logPath = logPath; 
  90.  
  91. new File().walkDir(filePath, function (data) { 
  92. if (!!data) { 
  93. var match = data.match(/[/u4e00-/u9faf]+/g); 
  94. if (!!match) { 
  95. match.forEach(function (mat) { 
  96. dictionary.set(mat); 
  97. }) 
  98. }, function () { 
  99. console.log('獲取中文 OK'); 
  100. dictionary.save2File(); 
  101. }) 
  102.  
  103.  
  104. //第二步 google翻譯 
  105. /* 
  106. dictionary.loadFile(function () { 
  107. dictionary.translateByGoogle(function () { 
  108. dictionary.save2File(); 
  109. }) 
  110. }); 
  111. */ 
  112. //第三步 中文替換 
  113. /* 
  114. dictionary.loadFile(function () { 
  115. new File().walkDir(filePath, function (data,pathStr) { 
  116. fs.writeFile(pathStr, data.replace(/[/u4e00-/u9faf]+/g, function (ch) { 
  117. return dictionary.get(ch); 
  118. }),{encoding:'ascii',flag:'w'}, function (err) { 
  119. if (err) throw err; 
  120. });  
  121. }, function () { 
  122. console.log('中文替換 OK'); 
  123. }) 
  124. }); 
  125. */ 

問題還是有的

1.nodejs編碼問題,在window環境下對GBK編碼支持不好,主要是utf8文件的處理

2.效率上面可能可以再通過 線程進行優化,這塊沒做深入的考慮

3.匹配出來,可能有單個的標點符號的短語等情況,需要人工排查

實際情況中,文件是GBK的,還有些文件是utf8的,后來還是考慮通過 腳本語言 快手實現的時候,

1.文件編碼的問題,判斷通過搜索

判斷文件首位3個字節是不是 ef bb bf,但是這個只是針對有BOM的utf8格式

對無BOM的utf8格式,需要進行字節特征碼的判斷(有難度,精力有限,使用了上面的方案,對于無BOM的情況,進行人工排查)。

2.因為快手多線程方便編程很簡單,一直以為多線程肯定比單線程效率要好。實際情況卻和想的不一樣,單線程的比多線程的快多了??磥碇饕款i還是在讀寫文件IO上面。

以上所述就是本文全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品麻豆va在线播放| 中文字幕日韩欧美在线视频| 久久免费视频这里只有精品| 久久久精品亚洲| 国产精品久久9| www国产亚洲精品久久网站| 欧洲亚洲在线视频| 国产主播喷水一区二区| 国产精品精品视频| 日韩美女在线观看| 国产a级全部精品| 在线观看日韩视频| 欧美日在线观看| 国产精品1区2区在线观看| 欧美日韩人人澡狠狠躁视频| 欧美激情久久久| 亚洲精品720p| 国产极品精品在线观看| 亚洲qvod图片区电影| 91高清视频免费| 国产精品视频1区| 91大神在线播放精品| 国产精品久久二区| 国产v综合ⅴ日韩v欧美大片| 狠狠躁夜夜躁久久躁别揉| 久久影院在线观看| 永久免费精品影视网站| 久久久久久香蕉网| 成人福利在线观看| 亚洲一区二区三区视频播放| 高潮白浆女日韩av免费看| 久久精品这里热有精品| 久久这里有精品视频| 久久精品成人动漫| 亚洲亚裔videos黑人hd| 国产精选久久久久久| 国产亚洲精品激情久久| 国产精品久久久久高潮| 国产伊人精品在线| 亚洲视频国产视频| 久久高清视频免费| 国产日本欧美一区二区三区在线| 国产欧美精品一区二区三区-老狼| 欧美在线激情网| 国产精品日日做人人爱| 亚洲乱码国产乱码精品精| 欧美在线亚洲一区| 深夜福利91大全| 97人人做人人爱| 久久综合亚洲社区| 日韩中文字在线| 欧美在线视频免费播放| 欧美性xxxxx极品娇小| 亚洲人高潮女人毛茸茸| 国产精品视频久久| 久久久久中文字幕| 伊人久久精品视频| 欧美性猛交视频| 午夜剧场成人观在线视频免费观看| 668精品在线视频| 国产美女精品视频| 中文字幕av一区| 亚洲男人天堂古典| 国产97在线|亚洲| 欧美高清自拍一区| 性色av一区二区咪爱| 欧美亚洲国产成人精品| 亚洲日本aⅴ片在线观看香蕉| 国产日产欧美a一级在线| 成人性生交大片免费观看嘿嘿视频| 中文字幕日韩在线视频| 国产成人精品网站| 国模私拍视频一区| 在线日韩第一页| 92国产精品久久久久首页| 中文字幕免费精品一区| www.久久草.com| 在线电影av不卡网址| 亚洲国产成人久久综合一区| 国产精品第一视频| 国产精品女主播| 久久99国产综合精品女同| 九色91av视频| 97国产精品视频| 亚洲国产精彩中文乱码av| 91在线高清免费观看| 日韩国产高清污视频在线观看| 国产欧美亚洲精品| 久久精品久久久久久国产 免费| 欧美高清在线视频观看不卡| 日韩av一区二区在线观看| 久久久人成影片一区二区三区| 亚洲一区二区三区xxx视频| 日韩亚洲欧美中文在线| 亚洲国产女人aaa毛片在线| 国产精品日韩在线| 国产成人综合av| 国产精品美女久久久免费| 成人网在线免费看| 国产精品视频一区国模私拍| 国产成一区二区| 91免费国产视频| 国产成人精品免费视频| 欧美老女人xx| 国产精品一区二区在线| 久久91超碰青草是什么| 国产精品国内视频| 欧美成人中文字幕在线| 日韩精品免费综合视频在线播放| 亚洲欧美成人精品| 亚洲自拍小视频| 久99久在线视频| 亚洲欧美日韩精品| 亚洲图片制服诱惑| 中文字幕日韩欧美| 久久久999国产| 久久偷看各类女兵18女厕嘘嘘| 日韩av免费网站| 亚洲欧美成人精品| 成人www视频在线观看| 国产色视频一区| 日韩在线观看精品| 久久青草精品视频免费观看| 日韩精品福利网站| 久久视频在线免费观看| 成人中文字幕在线观看| 日韩一级黄色av| 日韩在线国产精品| 日韩av片免费在线观看| 精品亚洲精品福利线在观看| 欧美另类xxx| 欧美精品videosex牲欧美| 91在线观看免费| 欧美性猛交xxxxx水多| 欧美激情性做爰免费视频| 久久久久久999| 欧美一区三区三区高中清蜜桃| xxxx性欧美| 亚洲精品一区二区三区不| 国产精品999999| 国产精品精品一区二区三区午夜版| 日韩av在线免费看| 亚洲国产中文字幕在线观看| 欧美激情视频给我| 色先锋资源久久综合5566| 欧美成人四级hd版| 懂色aⅴ精品一区二区三区蜜月| 色悠悠久久88| 国产日韩精品一区二区| 国产精品免费网站| 欧美成人性色生活仑片| 亚洲精品久久久久久久久久久久| 国产精品入口尤物| 亚洲永久在线观看| 91免费电影网站| 欧美综合在线观看| 日韩高清av在线| 久操成人在线视频| 欧美色图在线视频| 亚洲色图激情小说| 26uuu日韩精品一区二区| 91国内在线视频| 91性高湖久久久久久久久_久久99| 久久国产精品久久久久久久久久|