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根据给定文件返回文件名和扩展名的方法
Mar 27 Python
仅用50行Python代码实现一个简单的代理服务器
Apr 08 Python
在 Python 应用中使用 MongoDB的方法
Jan 05 Python
基于Python实现的ID3决策树功能示例
Jan 02 Python
[原创]Python入门教程4. 元组基本操作
Oct 31 Python
Django中使用Celery的方法示例
Nov 29 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
Feb 17 Python
python redis 批量设置过期key过程解析
Nov 26 Python
python ftplib模块使用代码实例
Dec 31 Python
Python tkinter之Bind(绑定事件)的使用示例
Feb 05 Python
Python机器学习之基于Pytorch实现猫狗分类
Jun 08 Python
Python常用配置文件ini、json、yaml读写总结
Jul 09 Python
教你用Python写一个植物大战僵尸小游戏
python爬取新闻门户网站的示例
Apr 25 #Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
You might like
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
如何用php生成扭曲及旋转的验证码图片
2013/06/07 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
2017/06/07 PHP
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
jQuery中:image选择器用法实例
2015/01/03 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
jQuery实现的简单悬浮层功能完整实例
2017/01/23 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
详解JavaScript的变量
2019/04/04 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
实例说明Python中比较运算符的使用
2015/05/13 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
2018/04/21 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
python移位运算的实现
2019/07/15 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
python3的pip路径在哪
2020/06/23 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
党员组织关系介绍信
2014/02/13 职场文书
摄影展策划方案
2014/06/02 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
完美解决golang go get私有仓库的问题
2021/05/05 Golang
详解MySQL集群搭建
2021/05/26 MySQL
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android