nodejs简单实现中英文翻译

   这篇文章主要介绍了nodejs简单实现中英文翻译的方法和示例,虽然还存在着不小的问题,但是也算是基本能用了,这里推荐给大家。

  帮以前同事解决一个需求,中文项目 翻译 英文项目~~~

  考虑到具体实现方面的问题,如果智能的话,肯定是要做中文的语法分析,不过感觉这个有难度。

  所以最后的方案是遍历文件,将中文短语匹配出来,再进行人工翻译,将中文短语替换成翻译的内容。当然后期还是需要人工再检验下,毕竟代码中的中文,可能会影响到相关的程序。

  这个问题,明显涉及到 多线程,文件读写,第一时间就想到的是 nodejs,虽然nodejs是一个主线程,但是异步文件读写,事件响应机制,肯定也是调用了线程,在实际编程的时候不需要考虑线程的相关的问题。

  代码不复杂如下,写完了之后,适当的封装了下

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140

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,'",rn"'),{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环境下对GBK编码支持不好,主要是utf8文件的处理

  2.效率上面可能可以再通过 线程进行优化,这块没做深入的考虑

  3.匹配出来,可能有单个的标点符号的短语等情况,需要人工排查

  实际情况中,文件是GBK的,还有些文件是utf8的,后来还是考虑通过 脚本语言 快手实现的时候,

  1.文件编码的问题,判断通过搜索

  判断文件首位3个字节是不是 ef bb bf,但是这个只是针对有BOM的utf8格式

  对无BOM的utf8格式,需要进行字节特征码的判断(有难度,精力有限,使用了上面的方案,对于无BOM的情况,进行人工排查)。

  2.因为快手多线程方便编程很简单,一直以为多线程肯定比单线程效率要好。实际情况却和想的不一样,单线程的比多线程的快多了。看来主要瓶颈还是在读写文件IO上面。

  以上所述就是本文全部内容了,希望大家能够喜欢。

时间: 2024-11-01 06:56:57

nodejs简单实现中英文翻译的相关文章

nodejs简单实现中英文翻译_node.js

帮以前同事解决一个需求,中文项目 翻译 英文项目~~~ 考虑到具体实现方面的问题,如果智能的话,肯定是要做中文的语法分析,不过感觉这个有难度. 所以最后的方案是遍历文件,将中文短语匹配出来,再进行人工翻译,将中文短语替换成翻译的内容.当然后期还是需要人工再检验下,毕竟代码中的中文,可能会影响到相关的程序. 这个问题,明显涉及到 多线程,文件读写,第一时间就想到的是 nodejs,虽然nodejs是一个主线程,但是异步文件读写,事件响应机制,肯定也是调用了线程,在实际编程的时候不需要考虑线程的相关

nodejs怎么简单实现中英文翻译

  帮以前同事解决一个需求,中文项目 翻译 英文项目~~~ 考虑到具体实现方面的问题,如果智能的话,肯定是要做中文的语法分析,不过感觉这个有难度. 所以最后的方案是遍历文件,将中文短语匹配出来,再进行人工翻译,将中文短语替换成翻译的内容.当然后期还是需要人工再检验下,毕竟代码中的中文,可能会影响到相关的程序. 这个问题,明显涉及到 多线程,文件读写,第一时间就想到的是 nodejs,虽然nodejs是一个主线程,但是异步文件读写,事件响应机制,肯定也是调用了线程,在实际编程的时候不需要考虑线程的

Android官方文档training中英文翻译目录大全:29篇已翻译,45篇未翻译

Android官方文档training中英文翻译目录大全:29篇已翻译,45篇未翻译   1. Getting Started Building Your First App: 原文: https://developer.android.com/training/basics/firstapp/index.html译文:http://wiki.eoeandroid.com/Building_Your_First_AppAdding the Action Bar:原文:https://develo

微软推出必应词典提供中英文翻译搜索

4月7日下午消息,微软MSN今日宣布推出必应首页和搜索页面中的"必应词典"功能.这一功能融合了微软亚洲研究院英库(Engkoo)创新技术的中英文垂直翻译搜索服务,让用户可以在搜索和中英文翻译之间进行无障碍切换. 从今日开始,用户在访问必应首页时会发现,除了以往的网页.图片.视频.资讯和地图之外,出现了一个新的"词典"服务按钮.点击"词典"按钮,将会进入英库服务的首页.同时,用户在必应搜索框中输入任意一个关键词,点击"词典"标签

Ubuntu 安装nodejs 简单方法详解

很简单  代码如下 复制代码 sudo apt-get update sudo apt-get install python-software-properties python g++ make sudo add-apt-repository ppa:chris-lea/node.js sudo apt-get update sudo apt-get install nodejs Quantal (12.10) 用户需要用 add-apt-repository 命令安装 software-pr

nodejs简单实现操作arduino_node.js

用Javascript来操作硬件早就不是一件稀奇的事情了. 所以作为一名电子专业出身的FE,我也打算尝试一下用js来驱动arduino: 要想操作这些底层硬件,肯定是需要一些工具的,我这里介绍的工具主要是 cylonjs 和 gort cylonjs其实就是一个操作"机器"的js框架,官网的介绍是这样的: Cylon.js is a JavaScript framework for robotics, physical computing, and the Internet of Th

Unity3D中英文翻译

Edit 编辑 frameselected 选取线框 select all选取所有 specialcharacters 角色专题 loadselection 加载选择 saveselection 保存选择 projectsettings 项目设置 rendersettings 渲染设置 graphicsemulation 图形模拟 networkemulation 网络模拟   Assets 资产   importsettings 导入设置 reimport 重新导入   creater 创建

如何用node.js实现一个简单的web服务器

node.js实现web服务器还是比较简单的,我了解node.js是从<node入门>开始的,如果你不了解node.js也可以看看! 我根据那书一步一步的练习完了,也的确大概了解了node.js,不过里面写的路由的地方总感觉不方便,十一放假最后一天,试着写了个简单的web服务器,现在分享记录于此! http模块已提供了基本功能,所以我主要解决两个问题,1是静态资源的处理,2是动态资源的路由. 静态资源在node.js里的意思是不变的,如图片.前端js.css.html页面等. 动态资源我们一般

英汉互译仅需2步 WPS Office翻译功能

现代社会,日常办公中经常会接触到英语,"这个单词是什么意思?","这个词翻译成英语怎么说?"是我们经常遇到的问题.您会怎么解决?抱起一本词典翻出答案还是购买一套翻译软件?投入的金钱不说,费时费力又不一定满意,还可能引起兼容性问题.使用WPS Office 2005,这些烦恼您都可以抛诸脑后! WPS Office 2005无缝整合金山词霸在线翻译功能,免费为用户提供强大的英汉互译的解决方案! 图1 WPS Office 2005无缝整合金山词霸在线翻译功能 立刻开始