浅析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求解平方根的方法
Mar 11 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
Django 前后台的数据传递的方法
Aug 08 Python
Python上下文管理器和with块详解
Sep 09 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
python kmeans聚类简单介绍和实现代码
Feb 23 Python
python3读取csv和xlsx文件的实例
Jun 22 Python
python批量修改图片大小的方法
Jul 24 Python
利用python计算windows全盘文件md5值的脚本
Jul 27 Python
python matplotlib库绘制散点图例题解析
Aug 10 Python
Python调用接口合并Excel表代码实例
Mar 31 Python
Elasticsearch 聚合查询和排序
Apr 19 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获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
帝国cms常用标签汇总
2015/07/06 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
js replace 全局替换的操作方法
2018/06/12 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
Python实现FTP弱口令扫描器的方法示例
2019/01/31 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
学生党员思想汇报
2013/12/28 职场文书
教师自我鉴定范文
2014/03/20 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
数学教师个人工作总结
2015/02/06 职场文书
七一晚会主持词
2015/06/29 职场文书
争做文明公民倡议书
2019/06/24 职场文书
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS