活学活用Python01:谷歌翻译小助手

写这篇文章的缘由

由于学业需要,我每天都药花大量的时间看论文,而且都是英文论文。作为一个工作了几年再读博的老博士,英语已经忘得差不多了。碰到一些难以理解的段落,就需要借助于谷歌翻译等在线的翻译工具。因此,我最经常做的事情就是:在PDF阅读器中复制一段话,再到谷歌翻译的网页中粘贴,看看自己有没有理解错误。比如这样:

我们看到,出现了两个问题:
1. 因为换行符造成句子中断,影响了谷歌翻译的准确性。
2. 每次都要切换到谷歌翻译的网页,手动粘贴进去,也很麻烦。

这两周一直在看申龙斌的python教程,有一天就突然想要自己动手写个python小程序,来解决我上面碰到的两个问题了。

任务分解

我要写的程序要能够解决上面的两个问题,因此要实现以下功能:
1. 能够替换掉PDF文件段落复制时产生的换行符,替换成空格。
2. 能够自动打开网页并把翻译结果显示出来。

我们看着两个功能还是太笼统了,仿照申龙斌博客中的思路,按照《如何解题》里面说的,要先把问题分解。1.读取剪贴板,把剪贴板的内容保存成一个字符串2.替换剪贴板里面的换行符为空格3.直接打开替换后的文本的谷歌翻译页面

解决过程

1.读取剪贴板

首先百度以下python读取剪贴板:

比较了一下,发现第二个链接非常的容易懂。使用了一个包叫pyperclip,这个包里面有两个函数copy()paste(),可以在本文的程序中使用。方法如下:

import pyperclip
pyperclip.copy('Hello world.')
print(pyperclip.paste())

就会输出:Hello world.
上面的两行代码就能够读取剪贴板的内容并打印出来了

2.替换换行符

测试了一下,在PDF文件中复制以后,直接使用pyperclip.paste()得到的就是文本,类型是Unicode,查了一下,应该是字符串的一种,可以直接使用python中的字符串的方法。而字符串方法中有一个函数就是replace(‘需要替换的字符’,“想要换成的字符”)
测试一下:

import pyperclip
copyedText= pyperclip.paste()normalizedText = copyedText.replace('\n', ' ')

发现没有反应,于是想到有些换行可能不是\n,也有可能是\r,于是就这样反复尝试,最后发现PDF换行换行很复杂,是\r\n,后来又发现一些小的bug,进行了修改,最终形成的函数是:

normalizedText = copyedText.replace('\r','\\r').replace('\n','\\n').replace('-\\r\\n','').replace("\\r\\n"," ")

至此,已经能够的到正常的文本了

3.直接打开替换后的文本的谷歌翻译页面

Python里面打开网页的函数是webbrowser.open(url)
查看一下刚才的文字翻译的网页的地址:http://translate.google.cn/#en/zh-CN/Abstract%E2%80%94Performing%20predictive%20modelling%2C%20such%20as%20anomaly%0Adetection%2C%20in%20Big%20Data%20is%20a%20difficult%20task.%20This%20problem%20is%0Acompounded%20as%20more%20and%20more%20sources%20of%20Big%20Data%20are%20generated%0Afrom%20environmental%20sensors%2C%20logging%20applications%2C%20and%0Athe%20Internet%20of%20Things.%20Further%2C%20most%20current%20techniques%20for%0Aanomaly%20detection%20only%20consider%20the%20content%20of%20the%20data%20source
可以看出这个地址的结构是这样的:
http://translate.google.cn/#en/zh-CN/sentenceToBeTranslated
那么我们要打开的页面地址就是:
http://translate.google.cn/#en/zh-CN/text_norm
用字符串的方式写就是
url= 'http://translate.google.cn/#en/zh-CN/'+text_norm
然后调用webbrowser来打开新的页面
webbrowser.open(url)

4.设置监听和查重

要让我们的程序不停的监听剪贴板,那么就需要设置一个循环,我这里根据我自己的习惯,设置了每10秒运行一次。

import time
while True:
    time.sleep(10)
    【上述功能代码】

监听设置以后发现不管你有没有复制新的东西,都会每10秒打开一个新页面,这很不爽,因此加上一个查重:设置一个缓冲,把已经得到的文本存放在copyBuff中,如果新的文本来了就和copyBuff对比一下, 不同就翻译,相同就忽略。

while True:
    time.sleep(10)
    copyedText=pyperclip.paste()
    if copyBuff != copyedText:
        copyBuff=copyedText
      【上述功能代码】

最终的代码如下:

import pyperclip
import time
import webbrowser
copyBuff=' '
while True:
    time.sleep(10)
    copyedText=pyperclip.paste()
    if copyBuff!=copyedText:
        copyBuff=copyedText
        normalizedText=copyBuff.replace('\r','\\r').replace('\n','\\n').replace('-\\r\\n','').replace("\\r\\n"," ")
        url='http://translate.google.cn/#en/zh-CN/'+normalizedText
        webbrowser.open(url)
    else:
        print('no change')
5.测试一下

打开python程序,从PDF中复制一段文字,稍等片刻,成功了!感谢CCTV……

总结:

  • 复杂问题先分解
  • pyperclip
  • str.replace()函数
  • time.sleep(seconds)
  • webbrowser.open(url)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值