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实现数组插入新元素的方法
May 22 Python
使用python实现ANN
Dec 20 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
Python嵌套列表转一维的方法(压平嵌套列表)
Jul 03 Python
Python2和Python3的共存和切换使用
Apr 12 Python
python numpy实现文件存取的示例代码
May 26 Python
Python实现word2Vec model过程解析
Dec 16 Python
pytorch实现MNIST手写体识别
Feb 14 Python
Python模块相关知识点小结
Mar 09 Python
基于python实现检索标记敏感词并输出
May 07 Python
python中scrapy处理项目数据的实例分析
Nov 22 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 Python
教你用Python写一个植物大战僵尸小游戏
python爬取新闻门户网站的示例
Apr 25 #Python
python自然语言处理之字典树知识总结
Python自然语言处理之切分算法详解
Apr 25 #Python
Python网络编程之ZeroMQ知识总结
Python 文本滚动播放器的实现代码
Apr 25 #Python
Python基于Opencv识别两张相似图片
You might like
老照片 - 几十年前的收音机与人
2021/03/02 无线电
高性能PHP框架Symfony2经典入门教程
2014/07/08 PHP
PHP中的一些常用函数收集
2015/05/26 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
Display SQL Server Version Information
2007/06/21 Javascript
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
微信小程序实现购物页面左右联动
2019/02/15 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
详解微信小程序轨迹回放实现及遇到的坑
2021/02/02 Javascript
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
极简的HTML5模版
2015/07/09 HTML / CSS
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
思想政治教育专业个人求职信范文
2013/12/20 职场文书
室内拓展活动方案
2014/02/13 职场文书
《值日生》教学反思
2014/02/17 职场文书
促销活动总结报告
2014/04/26 职场文书
医生见习报告范文
2014/11/03 职场文书
《为人民服务》教学反思
2016/02/20 职场文书
JUnit5常用注解的使用
2021/07/02 Java/Android
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python