欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

nodejs簡單實現(xiàn)中英文翻譯

 更新時間:2015年05月04日 09:30:48   投稿:hebedich  
這篇文章主要介紹了nodejs簡單實現(xiàn)中英文翻譯的方法和示例,雖然還存在著不小的問題,但是也算是基本能用了,這里推薦給大家。

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

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

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

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

代碼不復(fù)雜如下,寫完了之后,適當?shù)姆庋b了下

var fs = require('fs');
var http = require('http');
var filePath = 'D:\\WORK_new\\';
var logPath = 'D:\\chinese.log';

var map = {};
var num = 0;

var dictionary = (function () {
  var map = {};
  return {
    logPath: 'D:\\chinese.log',
    set: function (key, val) {
      map[key] = val || '';
    },
    get: function (key) {
      return map[key]||'';
    },
    save2File: function () {
      fs.writeFile(this.logPath, JSON.stringify(map).replace(/","/g,'",\r\n"'),{encoding:'utf8',flag:'w'}, function (err) {
        if (err) throw err;
      }); 
    },
    loadFile: function (callback) {
      fs.readFile(this.logPath, {encoding:'utf8'},function (err, data) {
        map = JSON.parse(data);
        callback();
      })
    },
    translateByGoogle: function (callback) {
      var index = 0;
      for (var key in map) {
        if (map[key] == '') {
          index++;
          (function (key) {
            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) {
              res.setEncoding('utf8');
              var body = "";
              res.on('data', function (chunk) {
                body+=chunk;  
              }).on('end', function (){ 
                var obj = eval('('+body+')');
                map[key] = obj[0][0][0];
                index--;
                if (index == 0) {
                  callback();
                }
              });
            }).on('error', function(e) {
              console.log('http error');
              index--;
              if (index == 0) {
                callback();
              }
              console.log("Got error: " + e.message);
            });
          })(key);
        }
      }
    }
  }
})();

function File () {
  var index = 0;
  var _readFile = function (pathStr, fileBack, doneBack) {
    fs.readFile(pathStr,{encoding:'utf8'}, function (err, data) {
      index--;
      if (err) {
        data = "";
        console.log(err,pathStr)
        //throw err;
      }
      fileBack(data,pathStr);
      if (index == 0) {
        doneBack();
      }
    });
  };
  var _walkDir = function (pathStr, fileBack, doneBack) {
    fs.readdir(pathStr, function (err, files) {
      files.forEach(function (file) {
        if(fs.statSync(pathStr + '/' + file).isDirectory()){
          _walkDir(pathStr + '/' + file, fileBack, doneBack);
        } else {
          if (/.js$|.html$|.htm$|.jsp$/.test(file)){
            index ++;
            _readFile(pathStr + '/' + file, fileBack, doneBack);
          }
          return;
        }
      });
    });
  }
  this.walkDir = function (pathStr, fileBack, doneBack) {
    index = 0;
    _walkDir(pathStr, fileBack, doneBack);
  }
}

//第一步 獲取中文
dictionary.logPath = logPath;

new File().walkDir(filePath, function (data) {
  if (!!data) {
    var match = data.match(/[\u4e00-\u9faf]+/g);
    if (!!match) {
      match.forEach(function (mat) {
        dictionary.set(mat);
      })
    }
  }
}, function () {
  console.log('獲取中文 OK');
  dictionary.save2File();
})


//第二步 google翻譯
/*
dictionary.loadFile(function () {
  dictionary.translateByGoogle(function () {
    dictionary.save2File();
  })
});
*/
//第三步 中文替換
/*
dictionary.loadFile(function () {
  new File().walkDir(filePath, function (data,pathStr) {
    fs.writeFile(pathStr, data.replace(/[\u4e00-\u9faf]+/g, function (ch) {
      return dictionary.get(ch);
    }),{encoding:'ascii',flag:'w'}, function (err) {
      if (err) throw err;
    }); 
  }, function () {
    console.log('中文替換 OK');
  })
});
*/

問題還是有的

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • node.js安裝超詳細步驟教程(推薦!)

    node.js安裝超詳細步驟教程(推薦!)

    其實Node.js就是運行在服務(wù)端的JavaScript,Node.js是一個基于Chrome?JavaScript運行時建立的一個平臺,下面這篇文章主要給大家介紹了關(guān)于node.js安裝超詳細步驟教程的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • node模塊機制與異步處理詳解

    node模塊機制與異步處理詳解

    這篇文章主要介紹了node模塊機制與異步處理詳解的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • npm發(fā)包實踐使用gRPC教程

    npm發(fā)包實踐使用gRPC教程

    這篇文章主要為大家介紹了npm發(fā)包實踐使用gRPC教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 在node中使用jwt簽發(fā)與驗證token的方法

    在node中使用jwt簽發(fā)與驗證token的方法

    這篇文章主要介紹了在node中使用jwt簽發(fā)與驗證token的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • Node.js通過身份證號驗證年齡、出生日期與性別方法示例

    Node.js通過身份證號驗證年齡、出生日期與性別方法示例

    最近工作中需要對身份證號的年齡、出生日期與性別進行驗證,所以這篇文章主要介紹了Node.js通過身份證號驗證年齡、出生日期與性別的方法,在介紹完node.js的實現(xiàn)方法后又給大家分類的利用JS實現(xiàn)的方法,需要的朋友可以參考下。
    2017-03-03
  • Nodejs環(huán)境實現(xiàn)socket通信過程解析

    Nodejs環(huán)境實現(xiàn)socket通信過程解析

    這篇文章主要介紹了Nodejs環(huán)境實現(xiàn)socket通信過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • node app 打包工具pkg的具體使用

    node app 打包工具pkg的具體使用

    這篇文章主要介紹了node app 打包工具pkg的具體使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 簡單了解小程序+node梳理登陸流程

    簡單了解小程序+node梳理登陸流程

    這篇文章主要介紹了簡單了解小程序+node梳理登陸流程,以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下
    2019-06-06
  • node.js文件上傳重命名以及移動位置的示例代碼

    node.js文件上傳重命名以及移動位置的示例代碼

    本篇文章主要介紹了node.js文件上傳重命名以及移動位置的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 詳解Node.js?應(yīng)用高?CPU?占用率分析方法

    詳解Node.js?應(yīng)用高?CPU?占用率分析方法

    這篇文章主要為大家介紹了Node.js?應(yīng)用高?CPU?占用率分析方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10

最新評論