浅析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之有容乃大的list(2)
Sep 15 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
python实现图书管理系统
Mar 12 Python
python2.7无法使用pip的解决方法(安装easy_install)
Apr 03 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
May 24 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
Jun 09 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
Jan 11 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
Sep 05 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
Mar 07 Python
使用keras内置的模型进行图片预测实例
Jun 17 Python
python四个坐标点对图片区域最小外接矩形进行裁剪
Jun 04 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
77A一级收信机修理记
2021/03/02 无线电
Yii分页用法实例详解
2014/12/04 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
joomla数据库操作示例代码
2016/01/06 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
PHP与以太坊交互详解
2018/08/24 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
Prototype使用指南之ajax
2007/01/10 Javascript
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
js清空表单数据的两种方式(遍历+reset)
2014/07/18 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
浅析jquery unbind()方法移除元素绑定的事件
2016/05/24 Javascript
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
javascript的几种写法总结
2016/09/30 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
js匿名函数使用&传参(实例)
2017/09/08 Javascript
玩转vue的slot内容分发
2018/09/22 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
Vue插件之滑动验证码
2019/09/21 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
详解Python中break语句的用法
2015/05/14 Python
python获取目录下所有文件的方法
2015/06/01 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
python urllib爬虫模块使用解析
2019/09/05 Python
Python调用.NET库的方法步骤
2019/12/27 Python
什么叫做SQL注入,如何防止
2016/10/04 面试题
大学生实习证明范本
2014/09/19 职场文书
会计电算化实训报告
2014/11/04 职场文书
2014年档案室工作总结
2014/12/01 职场文书
党性分析材料格式
2014/12/19 职场文书
劳动模范获奖感言
2015/07/31 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python
python神经网络编程之手写数字识别
2021/05/08 Python
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript