Python 制作自动化翻译工具


Posted in Python onApril 25, 2021

妈妈再也不用担心我的英语了。

一个可能你似曾相识的场景

阅读内容包含大量英文的 PPT、Word、Excel 或者记事本时,由于英语不熟悉,为了流利地阅读,需要打开浏览器进入谷歌翻译的主界面,然后把英文复制到谷歌翻译的输入框中,最后又把翻译结果复制回 PPT、Word 和 Excel。

Python 制作自动化翻译工具

Python 制作自动化翻译工具

要是一个两个单词还好,要是发现有 100 个单词不认识,就必须复制粘贴 200 次,如此机械性重复性的工作,应该交给程序来做,这就是我设计下面这个自动化翻译工具的初衷。

提升办公效率的法宝

Python 制作自动化翻译工具

如上图,运行程序并保持后台运行,在电脑上的任何一个软件中选择一段文本,并 Ctrl + C 复制到系统剪贴板中,程序就会自动帮助我们完成翻译,并将翻译结果自动复制到系统剪贴版中,只需 Ctrl + V,就完成了翻译结果对原文的替换。

编码实现

程序主要分为两部分,第一部分为谷歌翻译爬虫,第二部分就是实现这个将翻译结果自动替换的业务逻辑。

谷歌翻译爬虫

通过浏览器 F12 开发者工具,很容易定位到翻译请求的 URL: http://translate.google.cn/translate_a/single?client=t&sl=en&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss &dt=t&ie=UTF-8&oe=UTF-8&clearbtn=1&otf=1&pc=1&srcrom=0&ssel=0&tsel=0&kc=2

这个请求接受两个参数,一个就是我们要翻译的字符串 q,另一个是用于用户认证的 tk(token),其中 q 很容易构造,tk 的构造就需要花费一番心力了,需要我们调试 js 代码,这里参考 Github 上大神的轮子: https://github.com/cocoa520/Google_TK

谷歌翻译爬虫的主要代码如下:

def translate(tk, content):
    if len(content) > 4891:
        print("翻译的长度超过限制!!!")
        return

    param = {'tk': tk, 'q': content}

    result = requests.get("""http://translate.google.cn/translate_a/single?client=t&sl=en
        &tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss
        &dt=t&ie=UTF-8&oe=UTF-8&clearbtn=1&otf=1&pc=1&srcrom=0&ssel=0&tsel=0&kc=2""", params=param)

    data = result.json()
    print(data[0][0][0])

返回结果是 json 形式的,翻译结果保存在结果的第一个元组中。

Python 操作系统剪贴板

将读取剪贴板的内容的代码封装成函数如下:

def getText():#读取剪切板
    # 打开剪贴板
    w.OpenClipboard()
    # 读取剪贴板的内容
    d = w.GetClipboardData(win32con.CF_TEXT)
    # 关闭剪贴板
    w.CloseClipboard()
    try:
        return d.decode('utf-8')
    except:
        return d.decode('gbk')

返回值 d 是字节类型的,需要解码,中文按 gbk 格式解码,英文按 utf-8 解码。

类似地,写入剪贴板的代码如下:

def setText(aString):#写入剪切板
    # 打开剪贴板
    w.OpenClipboard()
    # 清空剪贴板
    w.EmptyClipboard()
    # 写入剪贴板
    w.SetClipboardText(aString)
    # 关闭剪贴板
    w.CloseClipboard()

实现将翻译结果自动替换原文的逻辑的代码如下:

while(True):
        # 如果剪贴板正在被占用
        try:
            cs = getText()
        except:
            time.sleep(1)
            cs = getText()
        print('cs',cs)
        if cs and cs != ls:
            print('准备翻译')
            content = getText()
            tk = js.getTk(content)
            res = translate(tk, content)
            setText(res)
            time.sleep(1)
            ls = res

值得注意的是,系统剪贴板对象是单例模式的,在操作系统范围内只有一个,而且读写剪贴板都是互斥的,在读(写)剪贴板的同时不允许任何对剪贴板的写(读)操作。试想这样一种情景,我们在其他软件中 Ctrl + C 写入剪贴板,而此时我们的程序代码正好执行到读剪贴板那一行,毫无疑问会报错,我的解决办法是使用 try…except 语句延时 1 s再读取,这样可以大大降低读写碰撞的概率,但无疑消耗了程序性能。最好的办法是判断剪贴板对象句柄是否被占用,其实我一直在寻找是否存在判断剪贴板对象句柄是否被占用的 API,但是一直没有找到

项目地址

https://github.com/Python3Spiders/GoogleAutoTranslationTool

以上就是Python 实现自动化翻译和替换的脚本的详细内容,更多关于python 自动化翻译的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
初学python数组的处理代码
Jan 04 Python
Python 抓取动态网页内容方案详解
Dec 25 Python
简单介绍Python中的floor()方法
May 15 Python
Python爬虫爬取美剧网站的实现代码
Sep 03 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
Nov 29 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
Apr 02 Python
python Tkinter版学生管理系统
Feb 20 Python
Python3 文章标题关键字提取的例子
Aug 26 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
CentOS 7如何实现定时执行python脚本
Jun 24 Python
python 根据列表批量下载网易云音乐的免费音乐
Dec 03 Python
Python OpenCV实现图像模板匹配详解
Apr 07 Python
教你用Python写一个植物大战僵尸小游戏
python爬取新闻门户网站的示例
Apr 25 #Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
You might like
搭建基于Docker的PHP开发环境的详细教程
2015/07/01 PHP
PHP 错误处理机制
2015/07/06 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
早该知道的7个JavaScript技巧
2013/03/27 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
详解Vue组件之间的数据通信实例
2017/06/17 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
2018/12/03 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
[01:06]欢迎来到上海,TI9
2018/08/26 DOTA
Python基于PycURL实现POST的方法
2015/07/25 Python
python实现简单socket通信的方法
2016/04/19 Python
Python Logging 日志记录入门学习
2018/06/02 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
python爬虫实现获取下一页代码
2020/03/13 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
2019年Java 最常见的 面试题
2016/10/19 面试题
商务日语专业毕业生自荐信
2014/03/27 职场文书
北京奥运会主题口号
2014/06/13 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书