作者 | veelion

责编 | 仲培艺

宝宝生日前后的那几天,她正好不在家,我一个人在家孤独、寂寞、冷。没有她的骚扰就可以安心写程序了!

别人家的宝宝过生日,无非是鲜花、包包和红包什么的,可我是程序员欸,怎么可以这么俗套呢?那就写个小软件,为她减轻一点做事情的辛苦,每天都能贴心呵护她。

她经常接触一些英文资料,免不了要进行翻译。而今,翻译这个活儿人工智能已经可以干个七七八八了,再辅助以人工校对就可以高质量地完成翻译工作。

于是,我决定帮她做人工智能翻译的活儿。借助谷歌翻译这个人工智能翻译机器来实现。我负责“人工”,她负责“智能”。我把文本 Ctrl+C、Ctrl+V 到谷歌翻译,再 Ctrl+C、Ctrl+V 到 Word,编辑好后给宝宝用她的智能去校对。

可我身为程序员,怎么能做 Ctrl+C、Ctrl+V 的苦力活儿呢?那就用 Python 写个小软件来替我做苦力吧。说干就干!

需求分析

输入为 Word 文档(*.docx),选择文档语言和翻译目标语言。

输出仍为 Word 文档(*.docx),以段落为单位,中英文对照,方便校对。如下图所示:

设计实现

人工智能翻译

基本上搜索引擎都提供了机器翻译的功能,国内的百度、搜狗、腾讯、有道,以及国外的谷歌等。除了网页版,还提供了 API 供开发者使用,但是 API 基本上都是收费的,所以还是用网页版的免费功能吧。这么多家到底哪家翻译技术强呢?个人比较喜欢谷歌的,那就选 Google 的吧。正好谷歌中国的翻译功能访问起来是通畅的:

https://translate.google.cn/

方便的是,基于网页版的 Google 翻译已经有人做成了 Python 库:googletrans,就是它了。

人机界面

现在的软件都流行云服务,即处理运算都在服务器上,用户只需要浏览器打开一个网页操作,就是所谓的 B/S 架构。这样的好处是,软件修改升级都很方便。

然而,谷歌翻译的使用有频率限制,后面软件开源了,大家都通过我的服务器进行谷歌翻译,我的服务器很容易被谷歌服务器封杀。所以决定写成一个纯粹的 PC 版软件,用户的电脑直接访问翻译服务器。

Python 写图形化界面(GUI)的库也有好几个,比较有名的是 wxPython 和 PyQt。我对 Qt 早有耳闻,而且它在图形化界面领域地位很高,决定选择 PyQt 来写软件的图形化界面。

进一步了解,原来 PyQt 不是 Qt 官方写的,而是一个叫 Riverbank Computing 的公司对 C++ 编写的 Qt 的 Python 绑定,并且基于 GPL 协议发布。GPL 具有传染性,不是特别喜欢它。正好发现,Qt 官方自己按照 PyQt 的接口写了一套 Python 绑定,起名为 PySide,并以 LGPL 协议发布,这个协议友好多了。最新的 PySide 基于 Qt 5,名为 PySide2,就选它了(哎,这是个坑啊,后面详解)。

但是我对 Qt 写界面完全不熟。不过我是谁啊,我可是程序员,这难不倒我。找来 PySide2 自带的 example,从里面找个跟我需要类似的。我需要选择框(选语言用)、文件选择器(选要翻译的文档用)这两个。发现有个 findfiles.py 有点类似。就从它开始边学边改,终于成型了:

功能实现

边学边写界面耗时很长,剩下的就简单多了。读取 docx 用 python-docx 库,翻译用前面说的 googletrans,一气呵成。最后,把提示语言写到界面的文本区域时遇到点问题,还是 Qt 不熟悉造成的,继续学习,其实就是 Qt 的信号传递。大功告成,测试一下:

发布软件

软件写好了,要交给宝宝使用。但是我没有信心教会她从源代码运行这个程序。毕竟是宝宝嘛,能双击运行就可以啦。

于是用 Pyinstaller 打包这个软件。一条命令完成,非常 easy,生成一个可以单独运行的 exe 文件,双击运行没问题。作为老江湖,当然还要拿到其他机器上去测试一下下。纳尼?!报错了!!!把错误信息 Google 一下,搜到的结果不多,而且是 PyQt5 的,没有 PySide2 的信息。为了这个错误,又耗费了几个小时,这就是坑啊,选择要慎重。

果断换成 PyQt5,因为两者很相似改起来并不复杂,只是信号部分的名称不一样。换成 PyQt5 后,一切正常了。不过,作为一个程序员并不打算就此放过 PySide2,有时间还是要搞定它的 Pyinstaller 发布!

后记

这个小软件虽然小,但涉及的技术栈还不少,完全用 Python 完成:

  • Python 3.7:编程语言;

  • googletrans:谷歌翻译网页版接口;

  • PyQt5/PySide2:图形化界面库

小软件大功能,借助谷歌人工智能的强大力量,翻译质量有保证,几十种语言之间自由切换相互翻译,是居家生活、工作学习的必备良器。

另附下载链接:https://github.com/veelion/transdocx/releases

作者:veelion,具有十年开发经验,主要使用Python、C++语言,从事网络爬虫、搜索引擎、自然语言理解处理等领域的研发工作。

声明:本文为作者投稿,版权归对方所有。

 热 文 推 荐 

☞ 调查 10,500 名 Java 开发者发现,收费的 OracleJDK 仍是主流、IntelliJ IDEA 最受欢迎

如何在一行 rm -rf 的基础上释放 Mac 上的内存空间?

程序员除了转行做管理,还可以做什么?

☞35 岁程序员,年后第一天被辞退

☞讲讲亿级PV的负载均衡架构!

☞深圳一AI公司人脸数据泄露,超256万用户敏感信息在“裸奔”!

☞推荐一款敲代码神器,代码量至少省一半!

☞干了一年区块链,工作没了,负债累累

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

点击“阅读原文”,打开 CSDN App 阅读更贴心!

喜欢就点击“好看”吧!

单身暴击!程序员用 Python 给女朋友写了个翻译软件相关推荐

  1. 搭讪技巧,希望所有单身的程序员兄弟都有女朋友哦!!

    刚搭讪认识的妹子,匆匆互留电话号码,彼此了解有限,该如何通过短信与MM聊天呢?因为搭讪建立的安全感不会很高,所以认识之后不适合马上进入追求程序,下面我们先列举一些错误的短信聊天方式,看看你中枪了没有吧 ...

  2. 关于程序员和家人或者女朋友的狗血小故事

    我是一枚新媒体编辑,我在IT图书出版行业工作3年了,我还是单身狗一枚,在这个行业混久了,常常听到一些关于程序员和家人或者女朋友的狗血小故事. 最为常见的场景之: 饭好了,菜冷了,他敲代码敲饱了- 最为 ...

  3. python在哪里写代码比较适合-程序员面试被要求手写代码,你与顶级程序员的差别在哪?...

    原标题:程序员面试被要求手写代码,你与顶级程序员的差别在哪? 前言: Python现在非常火,语法简单而且功能强大,很多同学都想学Python! 所以小的给各位看官们准备了收藏已久的视频教程分享给大家 ...

  4. 30岁自学python找工作-程序员自学Python开发,20到30岁几乎决定了你的未来!

    原标题:程序员自学Python开发,20到30岁几乎决定了你的未来! 之前程序员界流行一句话:人生苦短,请用Python. 随着Python成为网红语言之后,不少程序员想多学这一门语言好傍身. 甚至有 ...

  5. python程序员发展-2018年,程序员对Python有着这些期待!

    [IT168 评论]自1991年首次发布以来,Python的普及程度已经大大提高,现在已经跻身在世界上最流行的编程语言之列,战胜了那些声明速度太慢或无法扩展的语言. 事实上,最近PayPal,Inst ...

  6. python3入门与进阶笔记_16_变量进阶 — 黑马程序员《Python入门教程完整版》笔记...

    变量进阶(理解) - 黑马程序员<Python入门教程完整版>笔记 目标变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用变量 和 数据 都是保存在 内存 中的 在 Py ...

  7. python 入门程序_非Python程序员的Python速成课程-如何快速入门

    python 入门程序 This article is for people who already have experience in programming and want to learn ...

  8. java min 函数的使用方法_【Python】Java程序员学习Python(五)— 函数的定义和使用...

    不想做一个待宰的羔羊!!!!要自己变得强大.... 函数的定义和使用放在最前边还是有原因的,现在语言趋于通用,基本类型基本都是那些,重点还是学习对象的使用方法,而最根本的还是方法的使用,因此优先介绍, ...

  9. 给Lisp程序员的Python简介

    给Lisp程序员的Python简介 作者:Peter Norvig,译者:jineslong<zzljlu@gmail.com> 这是一篇为Lisp程序员写的Python简介(一些Pyth ...

最新文章

  1. html中open打开新网页,JavaScript-打开新窗口(window.open)
  2. 技术评析:云计算与摩尔定律相悖?
  3. 动态加载的js文件在Chrome进行调试时找不到
  4. php中怎样阻止网页进行跳转,php中如何阻止网页进行跳转?
  5. sql server 2005日志文件过大问题解决后分析--针对发布订阅产生的日志问题
  6. 人生有五不:不等、不管、不看、不做、不给
  7. python游戏按键无效_瞬速掌握Python系统管理-调试和分析脚本1-debugging
  8. Facebook要造芯片了,开发团队正在组建中
  9. linux硬盘格式化物理卷,创建物理卷报错Can't open /dev/sdb5 exclusively. Mounted filesystem的问题解决过程记录......
  10. 前端开发必备(三)-----用js验证表单是否为空以及验证码是否输入正确
  11. DAOS 源码解析之 daos_api
  12. Freemaker判断是否为空
  13. 禁止浏览器对页面进行缩放
  14. NFT: 开启加密艺术时代的无限可能
  15. Redis数据类型汇总
  16. 数据库管理系统的层次结构--语言处理层
  17. Ceph源码解析:读写流程
  18. 大学中明白的一百件事情
  19. 卧听夏蝉---总结一下/ ./../三个路径符号的区别
  20. oracle 10g升级到11g

热门文章

  1. 汉语语法分析的重点是_语法特定句式 |现代汉语专题研讨(15)
  2. python的config模块_python中ConfigParse模块的用法
  3. 最小生成树--通公路问题
  4. 关于Linux的close函数的注意点
  5. 中国节能吊扇行业市场供需与战略研究报告
  6. 超材料技术行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  7. mac android通知中心,有什么软件可以把安卓通知栏变成苹果通知栏
  8. 为什么强化学习会成为当下超火的研究领域?
  9. 探究贴片广告背后的技术大片
  10. 保持代码工整的 7 个小技巧