您的位置:首页 > 脚本大全 > > 正文

python语言翻译中文(浅析Python 实现一个自动化翻译和替换的工具)

更多 时间:2021-10-20 08:15:40 类别:脚本大全 浏览量:422

python语言翻译中文

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

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

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

python语言翻译中文(浅析Python 实现一个自动化翻译和替换的工具)

python语言翻译中文(浅析Python 实现一个自动化翻译和替换的工具)

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

提升办公效率的法宝

python语言翻译中文(浅析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

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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 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 操作系统剪贴板

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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 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 解码。

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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • def settext(astring):#写入剪切板
  •  # 打开剪贴板
  •  w.openclipboard()
  •  # 清空剪贴板
  •  w.emptyclipboard()
  •  # 写入剪贴板
  •  w.setclipboardtext(astring)
  •  # 关闭剪贴板
  •  w.closeclipboard()
  • 实现将翻译结果自动替换原文的逻辑的代码如下:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 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

    您可能感兴趣