浅析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实现
Jan 28 Python
Python中属性和描述符的正确使用
Aug 23 Python
Python实现的多线程http压力测试代码
Feb 08 Python
多个应用共存的Django配置方法
May 30 Python
利用python脚本如何简化jar操作命令
Feb 24 Python
Python+OpenCV采集本地摄像头的视频
Apr 25 Python
用Python解数独的方法示例
Oct 24 Python
PYTHON实现SIGN签名的过程解析
Oct 28 Python
用Python生成HTML表格的方法示例
Mar 06 Python
keras 多任务多loss实例
Jun 22 Python
Python lambda表达式原理及用法解析
Aug 18 Python
Django rest framework如何自定义用户表
Jun 09 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
php执行sql语句的写法
2009/03/10 PHP
PHP 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
php开启openssl的方法
2014/05/15 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
jQuery中ajax的load()与post()方法实例详解
2016/01/05 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
微信小程序 可搜索的地址选择实现详解
2019/08/28 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
python数据结构之二叉树的建立实例
2014/04/29 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
python解析命令行参数的三种方法详解
2019/11/29 Python
Python callable内置函数原理解析
2020/03/05 Python
python def 定义函数,调用函数方式
2020/06/02 Python
python 瀑布线指标编写实例
2020/06/03 Python
TensorFlow-gpu和opencv安装详细教程
2020/06/30 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
怎样从/向数据文件读/写结构
2014/11/23 面试题
结婚典礼证婚词
2014/01/11 职场文书
军训自我鉴定200字
2014/02/13 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
房屋产权证明书
2014/10/15 职场文书
捐助倡议书
2015/01/19 职场文书
中秋节主题班会
2015/08/14 职场文书
《包身工》教学反思
2016/02/23 职场文书
保安辞职申请书应该怎么写?
2019/07/15 职场文书
Golang 如何实现函数的任意类型传参
2021/04/29 Golang