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 相关文章推荐
Linux下使用python自动修改本机网关代码分享
May 21 Python
Python实现二叉堆
Feb 03 Python
Python迭代和迭代器详解
Nov 10 Python
Python使用matplotlib简单绘图示例
Feb 01 Python
python 实现在Excel末尾增加新行
May 02 Python
Python文件循环写入行时防止覆盖的解决方法
Nov 09 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
Jun 28 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 Python
django实现将后台model对象转换成json对象并传递给前端jquery
Mar 16 Python
python GUI模拟实现计算器
Jun 22 Python
Python 字典一个键对应多个值的方法
Sep 29 Python
Django集成富文本编辑器summernote的实现步骤
May 31 Python
教你用Python写一个植物大战僵尸小游戏
python爬取新闻门户网站的示例
Apr 25 #Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
You might like
php读取数据库信息的几种方法
2008/05/24 PHP
不要轻信 PHP_SELF的安全问题
2009/09/05 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
php数据访问之增删改查操作
2016/05/09 PHP
PHP实现上传多图即时显示与即时删除的方法
2017/05/09 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
Pandas时间序列:时期(period)及其算术运算详解
2020/02/25 Python
python 给图像添加透明度(alpha通道)
2020/04/09 Python
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
蔻驰法国官网:COACH法国
2018/11/14 全球购物
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
金融专业应届生求职信
2013/11/02 职场文书
酒店副总岗位职责
2013/12/24 职场文书
会计学毕业生求职信
2014/06/25 职场文书
运动会开幕词
2015/01/28 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫
nginx lua 操作 mysql
2022/05/15 Servers