最近在阅读外文文献时由于自己英文水平不够,看起来很吃力。但是PDF格式的文献复制出来会有很多莫名其妙的换行,所以想自己写一个翻译软件去掉多余的换行并且进行翻译。
首先,我的想法是使用谷歌翻译,但是无奈谷歌翻译不再免费只能退而求其次,使用百度翻译和有道翻译(据说有道翻译也不错)。先上个图,使用界面的图:
下面仔细介绍如何使用API,以百度翻译为例:
1、首先登录http://api.fanyi.baidu.com/api/trans/product/index,申请百度翻译API权限,这时候会生成APPID和密钥。
2、在翻译开放平台上,我们找到接入文档,会看到各语言demo,其中有PHP,JS,Python和Java等,根据需要下载即可。
3、下载Python的demo,但是官网的demo是Python2写的,里面有一些代码需要更改,具体如下:
所以具体代码如下:
def baidu_translation(content):
appid = 'XXXXXXX' #你的appid
secretKey = 'XXXXXXXX' #你的密钥
httpClient = None
myurl = '/api/trans/vip/translate'
q = content
fromLang = 'en'
toLang = 'zh'
salt = random.randint(32768, 65536)
sign = appid+q+str(salt)+secretKey
sign = hashlib.md5(sign.encode()).hexdigest()
myurl = myurl+'?appid='+appid+'&q='+urllib.parse.quote(q)+'&from='+fromLang+'&to='+toLang+'&salt='+str(salt)+'&sign='+sign
try:
httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
httpClient.request('GET', myurl)
#response是HTTPResponse对象
response = httpClient.getresponse()
jsonResponse = response.read().decode("utf-8") # 获得返回的结果,结果为json格式
js = json.loads(jsonResponse) # 将json格式的结果转换字典结构
dst = str(js["trans_result"][0]["dst"]) # 取得翻译后的文本结果
return(dst) # 打印结果
except Exception as e:
print(e)
finally:
if httpClient:
httpClient.close()
对于我们从服务器获得的数据,我们需要先了解数据接口,就像有道翻译里给出的:
我们通过各个字段就可以获得不同的数据信息。
4、经过测试,我们可以得出翻译结果。这时候我们就需要一个GUI界面。Python中的GUI自带的是tkinter,我使用两个text控件和一个button控件,分别用来显示原语言,翻译结果,还有开始翻译的功能。我使用的是Place方法布局,place使用的是绝对坐标,是以像素为单位的。例:
这样我们就写完了整个界面,接下来需要实现消除换行的功能。
5、消除换行:从读入的数据中找到所有的回车,替换为空格。代码很简单,
user = user.replace('\n', ' ')
这句话就可以实现换行。但是这样不能区分是真的段末回车还是PDF中复制出来的不必要的回车,所以我们可以进行一个判断,判断回车符之前是不是句号,如果是句号就不需要进行替换。(一般情况下是这样的吧。。。)
这样的话,我们的整个消除换行翻译软件差不多就完成了,有道翻译也是类似的,有道翻译api的代码大家可以参考一下:
def youdao_translation(content):
appKey = 'XXXXXXXXXX' #你的appid
secretKey = 'XXXXXXXXXXXXXXXXXX' #你的密钥
httpClient = None
myurl = 'http://openapi.youdao.com/api'
q = content
fromLang = 'EN'
toLang = 'zh-CHS'
salt = random.randint(1, 65536)
sign = appKey + q + str(salt) + secretKey
m1 = hashlib.md5()
m1.update(sign.encode('utf-8'))
sign = m1.hexdigest()
myurl = myurl + '?appKey=' + appKey + '&q=' + urllib.parse.quote(q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(salt) + '&sign=' + sign
try:
httpClient = urlopen(myurl)
response = eval(httpClient.read().decode())
#l1 = len(response["translation"])
#l2 = len(response["basic"]["explains"])
#if response["translation"] and l1 > l2:
return(response["translation"])
#else:
#print(response["basic"]["explains"])
except Exception as e:
print(e)
finally:
if httpClient:
httpClient.close()
6、翻译功能到这里就写完了,但是我们现在还是在Python中完成的运行,我们可以将py脚本导出为EXE,具体办法大家可以自行百度,有很多类似的文章。软件到这里就完成了!