一、需求分析

需求:

最近有个任务,需要对一批文件进行汉译英的翻译

刚开始想着挺简单的呀,那就直接复制到翻译软件中,在复制出来呗。

有很多办法可以实现翻译:

可以使用谷歌翻译,这个完全免费的。但是不好的地方就是需要一个文档一个文档的进行导入。我几百个文件的话,估计手就要废掉了。

也可以使用网易有道词典:

对单个文档手工复制粘贴的翻译方式过于繁琐,考虑到工作的重复性和本人追求提高效率、少动手(懒)。

做为计算机行业的一份子,应该充分的利用好,不然技术不就白学了。我就利用的很充分。

我在网上找了几款翻译api,通过对比翻译的结果和学习成本,选择了**有道智云的服务**,自己开发了一个批量翻译的小软件。详细记录一下使用和开发过程,后面的小伙伴们有相关需求,可以参考。

使用Python调用已有的接口的方法,自己实现一个批量翻译工具,一劳永逸。

我计划着连续更新一个月左右,把详细的整个过程都记录下来,也方便粉丝们使用。

二、已做好的批量文档翻译工具的使用

我这里开发批量文档翻译工具使用python作为开发工具,功能如下:

     1)通过文件夹选择多个文档;

     2)可以将多个文档的翻译结果存到目标文件夹下。

话不多说,看图↓↓↓↓↓

部分翻译结果展示(涉及工作内容的保密性,这里用荷塘月色作为样例):

可以先尝试一下,我上传到了百度网盘里:

三、开发过程

下面开始详细介绍调用有道智云API接口的步骤和软件开发的过程:

(一)个人开发者账号注册

首先,需要注册个人的开发者账号。

在官网点击注册,然后填写个人资料。即可完成注册,官网地址:http://ai.youdao.com/gw.s

(二) 创建应用和实例

注册成功并登录后个人中心页面如下图,有道智云提供了自然语言翻译、文字识别、语音合成、语音测评等服务接口。 这些服务接口都是通过以实例的方式运行的,通过应用进行管理的。需要分别创建实例、创建应用,通过应用获取应用ID和应用密钥等信息。

我这里用到的是自然语言翻译服务,首先,需要分别创建一个应用、创建一个自然语音翻译的实例;其次,需要将实例绑定到应用上。最后,就可以通过应用的应用ID、应用密钥调用自然语音翻译api接口了。有道平台会对不同的实例、应用的使用情况进行记录、分析、收费。刚刚注册的体验者会有免费体验字数和50元的体验金哦(加客服貌似还会有额外的50元的)。

创建实例的步骤:

根据使用需求,选择对应服务(“自然语言翻译”/“文字识别OCR”/“语音合成TTS”/“语音识别ASR”/“智能语音评测”/“多平台编辑器”)->“创建实例”,按步骤完成实例创建。

创建应用并绑定实例(应用接口分为三种:API、安卓、ios接口):

点击“应用管理”->“我的应用”->“创建应用”,填写应用名称等相关信息,选择接入方式,并绑定我们所创建的实例,完成应用创建。我们这里用到的是API方式接入,安卓、ios接口需要根据提示填写相应的信息,详见官网新手指南。

应用创建成功后,可获取应用ID(appKey)和应用密钥等信息,这些信息是调用API接口必不可少的参数。

(三)接口调用及代码实现

1、API接口介绍

下面介绍API接口的调用方法

文本翻译API HTTPS地址:https://openapi.youdao.com/api

调用规则:在调用集成文本翻译API时,需遵循以下规则。

签名生成方法如下:
signType=v3;
sign=sha256(应用ID+input+salt+curtime+应用密钥);
其中,input的计算方式为:input=q前10个字符 + q长度 + q后10个字符(当q长度大于20)或 input=q字符串(当q长度小于等于20);

返回结果格式:返回的结果是json格式,具体说明如下:

当返回的结果errorCode为 0 时说明调用成功,不为0时,则会出现不同含义的错误码。详细含义可查阅官方开发文档。

3、批量文档翻译开发

批量翻译demo使用python3实现,为了方便测试,我用tkinter做了简单的界面,用来读取待翻译文档,指定结果存储路径,为了最大化简化开发过程,降低测试的时间成本,目前只实现了读取.txt类型文件的方法。

整个demo分为三个文件,mainwindow.py,translate.py和translatetool.py,mainwindow为UI部分的代码,translate中实现了批量读取文档并翻译保存的逻辑,translatetool为根据示例代码改造后的翻译方法,需调用其他平台API时,亦可封装相应方法,增加了项目的扩展性。

mainwindow的元素如下:

root=tk.Tk()
root.title("netease youdao translation test")
frm = tk.Frame(root)
frm.grid(padx='50', pady='50')
btn_get_file = tk.Button(frm, text='选择待翻译文件', command=get_files)
btn_get_file.grid(row=0, column=0, ipadx='3', ipady='3', padx='10', pady='20')
text1 = tk.Text(frm, width='40', height='10')
text1.grid(row=0, column=1)
btn_get_result_path=tk.Button(frm,text='选择翻译结果路径',command=set_result_path)
btn_get_result_path.grid(row=1,column=0)
text2=tk.Text(frm,width='40', height='2')
text2.grid(row=1,column=1)
btn_sure=tk.Button(frm,text="翻译",command=translate_files)
btn_sure.grid(row=2,column=1)

其中translate_files()方法最终调用了translate类的translate_files()方法:

def translate_files():if translate.file_paths:translate.translate_files()tk.messagebox.showinfo("提示","搞定")else :tk.messagebox.showinfo("提示","无文件")

类translate定义如下:

import  os
from translatetool import connectclass Translate():def __init__(self,name,file_paths,result_root_path,trans_type):self.name=nameself.file_paths=file_paths                            # 待翻译文件路径self.result_root_path=result_root_path                # 翻译结果存储路径self.trans_type=trans_type# 翻译过程:读取文件-掉用有道api-解析返回信息-保存def translate_files(self):for file_path in self.file_paths:file_name=os.path.basename(file_path)file_content=open(file_path,encoding='utf-8').read()trans_reult=self.translate_use_netease(file_content)resul_file=open(self.result_root_path+'/result_'+file_name,'w').write(trans_reult)def translate_use_netease(self,file_content):result=','.join(connect(file_content,'zh-CH','EN'))  # 翻译API返回结果为一个数组return result

调用有道API主要方法为connect(),根据API的签名信息等要求组成data并发送请求,解析返回的json:

# input输入待翻译字段,fromlanguage待翻译的语言,tolanguage翻译成的目标语言
# 返回翻译的字段
def connect(inputtext,fromlanguage,tolanguage):q=inputtextdata = {}data['from'] = fromlangdata['to'] = tolangdata['signType'] = 'v3'curtime = str(int(time.time()))data['curtime'] = curtimesalt = str(uuid.uuid1())signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRETsign = encrypt(signStr)data['appKey'] = APP_KEYdata['q'] = qdata['salt'] = saltdata['sign'] = signprint(data)response = do_request(data)print(response.content)j = json.loads(str(response.content, encoding="utf-8"))["translation"]return j

完整demo代码地址:源码这里获取

得益于API的学习成本之低,接口调用部分的开发过程十分顺利,仅有一个小插曲,最开始调用API总是返回错误码206(即时间戳错误),最后发现是我的系统时间比标准时间慢了十分钟 - - #

四、总结

对于我此次的需要翻译的文档需求来说,有道智云赠送的字数和账户额度,已经够用了,但是如果想长期的使用下去,还是要付费的。最后发现,有道智云在个人主页中还提供了按小时统计当日实例调用次数和查询字符数和按天统计历史天数内实例的调用次数和字符数,对有需求的小伙伴,还可以记录查看自己接口的翻译量、实时调用量等状态。

如上是我整个demo的开发过程。整体来说从注册到调用有道智云API的过程还是比较顺利的,而且每一步都有官方的详细文档可以参照。以至于主要开发时间都分配给了tkinter排版(顺便吐槽下tkinter的“好用” :p)。

此文转载于:TrueDei

著作权归作者所有,如有侵权联系小编删除!

原文地址:https://blog.csdn.net/qq_17623363

再见所有的翻译工具!我使用了有道云+Python开发一个批量文档翻译工具!相关推荐

  1. python开发web运维工具_【实战小项目】python开发自动化运维工具--批量操作主机...

    有很多开源自动化运维工具都很好用如ansible/salt stack等,完全不用重复造轮子.只不过,很多运维同学学习Python之后,苦于没小项目训练,本篇演示用Python写一个批量操作主机的工具 ...

  2. 使用python开发一个pdf合并工具

    老婆给女儿整理打印学习资料,希望能从很多个pdf中抽取一些页码来合并成一个文件, 就希望我能写一个程序来实现这个功能.刚好最近正在学习python,就用python开发了一个 pdf合并工具,也算是学 ...

  3. Python简单主机批量管理工具

    Python简单主机批量管理工具 一.程序介绍 需求: 简单主机批量管理工具需求:1.主机分组2.主机信息使用配置文件3.可批量执行命令.发送文件,结果实时返回4.主机用户名密码.端口可以不同5.执行 ...

  4. 微软的python开发工具_面向 Python 开发人员的 Azure 工具

    面向 Python 开发人员的 Azure 工具Azure tools for Python developers 08/06/2020 本文内容 Visual Studio CodeVisual S ...

  5. python实战扫码下载_实例:用 Python 做一个扫码工具

    原标题:实例:用 Python 做一个扫码工具 来自公众号: 新建文件夹X 链接:https://blog.csdn.net/ZackSock/article/details/108610957Pyt ...

  6. python制作一个桌面小工具

    python实现一个桌面小工具,制作一个桌面的便签提醒工具 参考代码:https://github.com/cosven/memo 参考链接:https://www.jb51.net/article/ ...

  7. python 代码行数统计工具_使用Python设计一个代码统计工具

    问题 设计一个程序,用于统计一个项目中的代码行数,包括文件个数,代码行数,注释行数,空行行数.尽量设计灵活一点可以通过输入不同参数来统计不同语言的项目,例如: # type用于指定文件类型 pytho ...

  8. 用Python写一个纪念日计算工具

    用python写一个纪念日计算工具 前言 主要内容 日期计算函数 GUI布局 用pyinstaller打包生成.exe文件 打包后的.exe文件预览 运行结果 最后提前祝马英俊生日快乐吧~ 前言 纪念 ...

  9. 用Python做一个安全攻防工具:端口嗅探器(9)

    传送门 本系列原创博文传送门: 用Python做一个安全攻防工具:端口嗅探器(1) 用Python做一个安全攻防工具:端口嗅探器(2) 用Python做一个安全攻防工具:端口嗅探器(3) 用Pytho ...

最新文章

  1. svn命令行 批量添加(add)所有新增文件
  2. [转]int.ToString()输出不同格式的数字字符串
  3. 营业额破千亿美元的亚马逊仍难令华尔街满意
  4. VUE2.x的浏览器兼容情况汇总
  5. codeforces:CF1604 总结
  6. Win10 Anaconda下TensorFlow-GPU环境搭建详细教程(包含CUDA+cuDNN安装过程)
  7. most_common()函数源码解读
  8. Ubuntu16.04装拼音/Sogou遇到的问题(卸载/重装 Fcitx / Fcitx Configuration、卸载/重装Sogou)
  9. python 公司名称 相似度分析_Python文本相似度分析
  10. 链接库问题:LD_LIBRARY_PATH(找不到共享库)
  11. 归一化php,归一化函数normalize详解
  12. Postman(接口测试工具)
  13. 使用Minitab热图可视化的五种热门方法
  14. 学生教育云平台登录入口_甘肃省教育云平台
  15. UNP学习笔记-第二章传输层
  16. 自动更新Android应用后, app 进入后台重进会重启
  17. 一文搞懂交叉熵在机器学习中的使用,透彻理解交叉熵背后的直觉
  18. 第七节 圣维南原理及其应用
  19. Charles 注册、抓包 详细操作手册
  20. 富翁与陌生人编程 python_Python实验-大富翁(伪)

热门文章

  1. 三菱fx3u+485ADP MB与4台欧姆龙E5CC温控器通讯案例程序
  2. 复杂业务逻辑问题记录
  3. 移动端mobiscroll时间控件的使用
  4. android gpu性能测试,CPU/GPU以及整体性能测试_手机_手机Android频道-中关村在线
  5. 干货!鲁棒彩票现象:藏在随机初始化神经网络中的鲁棒子网络
  6. 游戏合作伙伴专题:BreederDAO 与 Fancy Birds 合作达到新高度
  7. 小试牛刀_浅谈AspNetPager在三层架构中的使用
  8. matlab中求包络线函数,matlab包络线函数
  9. 转载:文本编辑器 UltraEdit/EmEditor/EditPlus/AptEdit 之超级评测
  10. 《全职高手》所有职业技能(转载)