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实现把回车符\r\n转换成\n
Apr 23 Python
python单元测试unittest实例详解
May 11 Python
Python中使用strip()方法删除字符串中空格的教程
May 20 Python
Python定义一个跨越多行的字符串的多种方法小结
Jul 19 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
Jun 27 Python
Python实现图片添加文字
Nov 26 Python
pytorch实现线性拟合方式
Jan 15 Python
Python 从attribute到property详解
Mar 05 Python
python如何运行js语句
Sep 09 Python
Python读取多列数据以及用matplotlib制作图表方法实例
Sep 23 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
Nov 17 Python
解决python3.6用cx_Oracle库连接Oracle的问题
Dec 07 Python
教你用Python写一个植物大战僵尸小游戏
python爬取新闻门户网站的示例
Apr 25 #Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
You might like
PHP访问MYSQL数据库封装类(附函数说明)
2010/12/04 PHP
PHP访问Google Search API的方法
2015/03/05 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
3种php生成唯一id的方法
2015/11/23 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
关于JavaScript的gzip静态压缩方法
2007/01/05 Javascript
JS 面向对象的5钟写法
2009/07/31 Javascript
jquery中的查找parents与closest方法之间的区别
2013/12/02 Javascript
javascript学习笔记(三)BOM和DOM详解
2014/09/30 Javascript
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
JavaScript实现数组降维详解
2017/01/05 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
JavaScript函数柯里化原理与用法分析
2017/03/31 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
vuex 中插件的编写案例解析
2019/06/10 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
在NumPy中创建空数组/矩阵的方法
2018/06/15 Python
Python for循环中的陷阱详解
2018/07/13 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
2021/01/06 Python
Soft Cotton捷克:来自爱琴海棉花的浴袍
2017/02/01 全球购物
车间操作工岗位职责
2013/12/19 职场文书
美德少年事迹材料
2014/01/23 职场文书
党支部三会一课计划
2014/09/24 职场文书
餐厅服务员岗位职责
2015/02/09 职场文书
财政局个人总结
2015/03/04 职场文书