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程序设计入门(3)数组的使用
Jun 16 Python
使用Python的Bottle框架写一个简单的服务接口的示例
Aug 25 Python
浅析Python 中整型对象存储的位置
May 16 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
Django实现一对多表模型的跨表查询方法
Dec 18 Python
python从入门到精通 windows安装python图文教程
May 18 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
Jul 31 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
Oct 12 Python
python绘制规则网络图形实例
Dec 09 Python
python字符串判断密码强弱
Mar 18 Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 Python
Python文件的操作示例的详细讲解
Apr 08 Python
教你用Python写一个植物大战僵尸小游戏
python爬取新闻门户网站的示例
Apr 25 #Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
You might like
mysql5详细安装教程
2007/01/15 PHP
php输出表格的实现代码(修正版)
2010/12/29 PHP
php文件夹与文件目录操作函数介绍
2013/09/09 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
基于php编程规范(详解)
2017/08/17 PHP
深入理解JavaScript系列(15) 函数(Functions)
2012/04/12 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
Nodejs获取网络数据并生成Excel表格
2020/03/31 NodeJs
js简单判断flash是否加载完成的方法
2016/06/21 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
vue elementui el-form rules动态验证的实例代码详解
2019/05/23 Javascript
vue cli3 配置proxy代理无效的解决
2019/10/30 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
使用python存储网页上的图片实例
2018/05/22 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
Python中format()格式输出全解
2019/04/12 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
会计专业毕业生自我评价
2013/09/25 职场文书
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
中专生自我鉴定范文
2014/02/02 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
股指期货心得体会
2014/09/10 职场文书
服装区域经理岗位职责
2015/04/10 职场文书
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技