浅析Python 实现一个自动化翻译和替换的工具


Posted in Python onApril 14, 2019

一个可能你似曾相识的场景

阅读内容包含大量英文的 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("too long to translate")
   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)14   setText(res)
   time.sleep(1)
   ls = res

值得注意的是,系统剪贴板对象是单例模式的,在操作系统范围内只有一个,而且读写剪贴板都是互斥的,在读(写)剪贴板的同时不允许任何对剪贴板的写(读)操作。试想这样一种情景,我们在其他软件中 Ctrl + C 写入剪贴板,而此时我们的程序代码正好执行到读剪贴板那一行,毫无疑问会报错,我的解决办法是使用 try…except 语句延时 1 s再读取,这样可以大大降低读写碰撞的概率,但无疑消耗了程序性能。

总结

以上所述是小编给大家介绍的Python 实现一个自动化翻译和替换的工具,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家!

Python 相关文章推荐
python实现爬虫下载漫画示例
Feb 16 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
linecache模块加载和缓存文件内容详解
Jan 11 Python
利用python对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
python 反向输出字符串的方法
Jul 16 Python
python使用folium库绘制地图点击框
Sep 21 Python
对pandas中两种数据类型Series和DataFrame的区别详解
Nov 12 Python
python实现nao机器人手臂动作控制
Apr 29 Python
浅谈Python_Openpyxl使用(最全总结)
Sep 05 Python
tensorflow 初始化未初始化的变量实例
Feb 06 Python
Python try except异常捕获机制原理解析
Apr 18 Python
如何理解python接口自动化之logging日志模块
Jun 15 Python
提升Python程序性能的7个习惯
Apr 14 #Python
Python根据当前日期取去年同星期日期
Apr 14 #Python
Python实现的微信支付方式总结【三种方式】
Apr 13 #Python
Python实现合并excel表格的方法分析
Apr 13 #Python
Python Image模块基本图像处理操作小结
Apr 13 #Python
python使用pymongo操作mongo的完整步骤
Apr 13 #Python
Python实现去除图片中指定颜色的像素功能示例
Apr 13 #Python
You might like
简单的页面缓冲技术
2006/10/09 PHP
php5.3 废弃函数小结
2010/05/16 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
JavaScript的字符串方法汇总
2016/07/31 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
用原生js做单页应用
2017/01/17 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
js计时事件实现圆形时钟
2020/03/25 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
Python中使用HTMLParser解析html实例
2015/02/08 Python
django的model操作汇整详解
2019/07/26 Python
pytorch GAN伪造手写体mnist数据集方式
2020/01/10 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
python如何构建mock接口服务
2021/01/28 Python
法学专业毕业生自荐信范文
2013/12/18 职场文书
初中数学教学反思
2014/01/16 职场文书
学生生病请假条范文
2014/02/16 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
材料员岗位职责
2015/02/10 职场文书
业务员岗位职责范本
2015/04/03 职场文书
2015年财政局工作总结
2015/05/21 职场文书
入党积极分子群众意见
2015/06/01 职场文书
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电
Redis IP地址的绑定的实现
2021/05/08 Redis