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


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

    大家好 我是毕加锁 (锁!)

    这篇文章主要介绍了Python 实现一个自动化翻译和替换的工具,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

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

    阅读内容包含大量英文的 PPT、Word、Excel 或者记事本时,由于英语不熟悉,为了流利地阅读,需要打开浏览器进入谷歌翻译的主界面,然后把英文复制到谷歌翻译的输入框中,最后又把翻译结果复制回 PPT、Word 和 Excel。

    c0199bdeb1af450581dd6553848114e2.jpg

    4ff875cf58994c629c2efca07c5ab974.jpg

    要是一个两个单词还好,要是发现有 100 个单词不认识,就必须复制粘贴 200 次,如此机械性重复性的工作,应该交给程序来做,这就是我设计下面这个自动化翻译工具的初衷。

    提升办公效率的法宝

    9d991c0e1aa5899cb2987e6be3af00ff.gif

    如上图所示,运行程序并保持后台运行,在电脑上的任何一个软件中选择一段文本,并 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

    谷歌翻译爬虫的主要代码如下:

    1. def translate(tk, content):
    2. if len(content) > 4891:
    3. print("too long to translate")
    4. return
    5. param = {'tk': tk, 'q': content}
    6. result = requests.get("""http://translate.google.cn/translate_a/single?client=t&sl=en
    7. &tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss
    8. &dt=t&ie=UTF-8&oe=UTF-8&clearbtn=1&otf=1&pc=1&srcrom=0&ssel=0&tsel=0&kc=2""", params=param)
    9. data = result.json()
    10. print(data[0][0][0])

    返回结果是 json 形式的,翻译结果保存在结果的第一个元组中。

    Python 操作系统剪贴板

    将读取剪贴板的内容的代码封装成函数如下:

    1. def getText():#读取剪切板
    2. # 打开剪贴板
    3. w.OpenClipboard()
    4. # 读取剪贴板的内容
    5. d = w.GetClipboardData(win32con.CF_TEXT)
    6. # 关闭剪贴板
    7. w.CloseClipboard()
    8. try:
    9. return d.decode('utf-8')
    10. except:
    11. return d.decode('gbk')

    返回值 d 是字节类型的,需要解码,中文按 gbk 格式解码,英文按 utf-8 解码。

    类似地,写入剪贴板的代码如下:

    1. def setText(aString):#写入剪切板
    2. # 打开剪贴板
    3. w.OpenClipboard()
    4. # 清空剪贴板
    5. w.EmptyClipboard()
    6. # 写入剪贴板
    7. w.SetClipboardText(aString)
    8. # 关闭剪贴板
    9. w.CloseClipboard()

    实现将翻译结果自动替换原文的逻辑的代码如下:

    1. while(True):
    2. # 如果剪贴板正在被占用
    3. try:
    4. cs = getText()
    5. except:
    6. time.sleep(1)
    7. cs = getText()
    8. print('cs',cs)
    9. if cs and cs != ls:
    10. print('准备翻译')
    11. content = getText()
    12. tk = js.getTk(content)
    13. res = translate(tk, content)14 setText(res)
    14. time.sleep(1)
    15. ls = res


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

    我是毕加锁 🔒🔒🔒期待你的关注

  • 相关阅读:
    MyBatis是什么呢?
    RabbitMq(集群搭建)
    计算机毕业设计 SSM高校普法系统 法律知识平台 法律科普平台 律师推荐平台Java Vue MySQL数据库 远程调试 代码讲解
    算法补天系列之——中级提高班-2(树的递归,动态规划,调整遍历方向减少复杂度)
    流畅的Python读书笔记(五)序列:序列的排序及管理
    C语言生成随机数、C++11按分布生成随机数学习
    简单介绍ogb包(open graph benchmark)(图神经网络的基准数据集)
    Linux shell编程学习笔记14:编写和运行第一个shell脚本hello world!
    WindTerm 开源的高性能终端模拟器 最酷
    吃柿子的禁忌靠谱吗?
  • 原文地址:https://blog.csdn.net/weixin_69999177/article/details/125400085