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 获取 Linux 系统信息的代码
Jul 13 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
Feb 23 Python
python中字符串比较使用is、==和cmp()总结
Mar 18 Python
Python实现的自定义多线程多进程类示例
Mar 23 Python
对numpy Array [: ,] 的取值方法详解
Jul 02 Python
Python 判断文件或目录是否存在的实例代码
Jul 19 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
Feb 12 Python
python selenium自动化测试框架搭建的方法步骤
Jun 14 Python
使用Python爬取Json数据的示例代码
Dec 07 Python
python性能测试工具locust的使用
Dec 28 Python
matplotlib交互式数据光标实现(mplcursors)
Jan 13 Python
教你用Python写一个植物大战僵尸小游戏
python爬取新闻门户网站的示例
Apr 25 #Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
You might like
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
2013/09/28 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
jqgrid 简单学习笔记
2011/05/03 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
总结JavaScript的正则与其他语言的不同之处
2016/08/25 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
2016/12/12 Javascript
微信小程序 首页制作简单实例
2017/04/07 Javascript
深入理解vue中的$set
2017/06/01 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
Python查询IP地址归属完整代码
2017/06/21 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
Python3.5基础之NumPy模块的使用图文与实例详解
2019/04/24 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
Python Selenium库的基本使用教程
2021/01/04 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
最新党员的自我评价分享
2013/11/04 职场文书
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
餐饮业创业计划书范文
2014/01/06 职场文书
简单的大学生自我鉴定
2014/02/18 职场文书
行政内勤岗位职责
2014/04/07 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
出生公证书
2015/01/23 职场文书
中学教师个人总结
2015/02/10 职场文书
2015年会计年终工作总结
2015/05/26 职场文书
TV动画「神渣☆爱豆」公开第一弹主视觉图
2022/03/21 日漫