浅析Python 实现一个自动化翻译和替换的工具
作者:学好Python吧 发布时间:2021-12-03 20:48:25
一个可能你似曾相识的场景
阅读内容包含大量英文的 PPT、Word、Excel 或者记事本时,由于英语不熟悉,为了流利地阅读,需要打开浏览器进入谷歌翻译的主界面,然后把英文复制到谷歌翻译的输入框中,最后又把翻译结果复制回 PPT、Word 和 Excel。
要是一个两个单词还好,要是发现有 100 个单词不认识,就必须复制粘贴 200 次,如此机械性重复性的工作,应该交给程序来做,这就是我设计下面这个自动化翻译工具的初衷。
提升办公效率的法宝
如上图所示,运行程序并保持后台运行,在电脑上的任何一个软件中选择一段文本,并 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 实现一个自动化翻译和替换的工具,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家!
来源:https://www.jianshu.com/p/5d98fd17ef9f


猜你喜欢
- Python有一随机函数可以产生[0,1)区间内的随机数,基于此函数生成随机分布在任意三角形内的点由数学知识得知:几何体的向量表达形式直线:
- 这个涉及到的知识点是django数据库查询问题,我们可以在view.py文件中操作blog_list = models.Blog.objec
- 前言:group by函数后取到的是分组中的第一条数据,但是我们有时候需要取出各分组的最新一条,该怎么实现呢?本文提供两种实现方式。一、准备
- 怎么增大MySQL数据库连接数,MYSQL数据库安装完成后,默认连接数是100,流量稍微大一点的论坛或网站这个连接数是不够哟用
- 几个利用背景结合a:hover做的小东东,希望对大家有所帮助。<!DOCTYPE html PUBLIC "-//W3C//
- Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由byt
- 诊断SQLSERVER问题常用的日志这里主要有两个:(1)Windows事件日志(2)SQLSERVER ErrorLog1、Windows
- MyBatis 如何写配置文件和简单使用MyBatis3.x这里简单贴一下MyBatis的介绍,具体使用方法会在代码中贴出。MyBatis的
- 二级域名的解析指向ASP源代码,懂程序的人一看就明白怎么实现了。呵呵!真简单<%@ LANGUAGE =&nb
- 实例如下所示:# -*- coding: utf-8 -*-"""使用通配符,获取所有文件,或进行操作。&qu
- 直接赋值:其实就是对象的引用(别名)。浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。深拷贝(deepcopy): copy 模
- 函数原型resample(self, rule, how=None, axis=0, fill_method=None, closed=No
- 前言网易云音乐这款音乐APP本人比较喜欢,用户量也比较大,而网易云音乐之所以用户众多和它的歌曲评论功能密不可分,很多歌曲的评论非常有意思,其
- <% '****************************** '函数:Chec
- 本文实例讲述了python类继承用法。分享给大家供大家参考。具体方法如下:#!/usr/bin/python# Filename: inhe
- 一份完全按照李航<<统计学习方法>>介绍的HMM代码,供大家参考,具体内容如下#coding=utf8 '&
- 本文实例讲述了Python使用matplotlib绘制正弦和余弦曲线的方法。分享给大家供大家参考,具体如下:一 介绍关键词:绘图库官网:ht
- isset和is_null啥区别,看手册上讲的话, isset和is_null的功能几乎完全”相反的一样”..是不是isset就是一个is_
- 安装anaconda登录anaconda的官网下载,anaconda是一个集成的工具软件不需要我们再次下载。anaconda官网点击下载跳转
- 代码如下:Create trigger tri_wk_CSVHead_History on wk_CSVHead_History --声明