Python批量翻译英文成中文

任务描述:将2000个英文单词翻译成中文单词
选择的是百度翻译进行翻译英文单词

1、百度翻译开发者平台

首先需要在百度翻译开发者平台申请一个 appid
在这里插入图片描述
我这里已经申请过了,这样就会得到一个appid和密码
在这里插入图片描述
如果没有特别要求,免费的标准版就足够使用了,尊享版是需要收费的。也可以使用其他翻译平台,应该都是要申请账号才能使用,因为之前刚好申请了百度翻译账号,于是就直接使用这个平台了。

2、代码实现

具体实现代码参考了下面的教程:
https://blog.csdn.net/weixin_36139240/article/details/113980180
导入需要的第三方库

import random
import requests
import hashlib
  • 百度翻译对应的 url
api_url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'

我直接打开百度翻译网页复制的网址和这个不一样哈哈哈哈,然后输入下面这个网址

http://api.fanyi.baidu.com/api/trans

则得到的是百度翻译开发者平台这个网页,后面的具体路径可能才调用到了翻译脚本

  • 设置发送请求参数
    输入的单词作为 ‘q’ 的关键字传入
api_data = {
            'q': en_str,
            'from': 'en',
            'to': 'zh',
            'appid': appid,
            'salt': salt,
            'sign': sign
        }
  • 发送请求获取相应的数据
req_get = requests.get(api_url, api_data)
  • 解析数据
    得到的翻译结果是 json 类型,从json 文件中获得翻译的文本
result = {'from': 'en', 'to': 'zh', 'trans_result': [{'src': 'hello', 'dst': '你好'}]}
result['trans_result'][0]['dst'] = '你好'
  • 完整的代码
def get_md5(self,string):  # 返回字符串md5加密
        hl = hashlib.md5()
        hl.update(string.encode('utf-8'))
        return hl.hexdigest()
def en_to_zh(en_str):  # 英语翻译成中文
    api_url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
    appid = 'xxx'
    secretKey = 'xxxx'
    salt = random.randint(32768, 65536) # 这个不知道是为啥
    sign =get_md5(appid + en_str + str(salt) +secretKey)
    api_data = {
        'q': en_str,
        'from': 'en',
        'to': 'zh',
        'appid': appid,
        'salt': salt,
        'sign': sign
    }
    req_get = requests.get(api_url, api_data)
    result = req_get.json()
    return result
 if __name__ == "__main__":
    print(en_to_zh("hello"))

3、翻译过程

任务描述:需要翻译2000个英文单词,以列表形式存放
第一次尝试
for 循环对词汇一个个翻译,然后输出下面的错误
在这里插入图片描述在这里插入图片描述
这是因为 for 循环访问网址就散过于频繁,导致个别翻译不成功,所以输出的 result中没有 trans_result 的结果

于是我加入语句 time.sleep(1) (需要先 import time),表示每调用一次就等待1秒钟,再继续进行下一次调用,但是词汇有两千多个,这样速度实在太慢了。

第二次尝试
将 整个列表 转换成字符串(要先把方括号、引号去掉,结束了还得把中文的逗号替换成英文的逗号),结果又报了下面的错误
在这里插入图片描述
是因为一下子翻译的词汇过多,百度翻译一次限制5000词以内(一个字母算一个词)

第三次尝试
于是我改成一次翻译1000个词(根据具体情况进行调整),确实很快就运行出结果了,而且貌似是因为一次性翻译的词汇较多,构成上下文语义关系??翻译的结果要比逐个翻译的结果要好,我以为事情到这里就差不多结束了,结果发现翻译得到的中文结果要比英文的词汇个数少。比如我一次性翻译1000个英文单词,得到的中文只有720个,我猜测是有些词汇被黏在一起了,当成同一个词。

第四次尝试
于是我改成一次翻译30个词汇,每次都输出中文词汇个数,总是缺斤少两的,原来有些词汇根本没翻译出来,气死我了气死我了

最后,我还是用回了第一次的方法,大概40分钟吧,才翻译好了2000个词汇,如果想快一点,可以把等到的时间time.sleep(1) 减少一点,0.5秒什么的,但是我担心时间太短了会中途报错,于是就选择稳妥一点的方式。当然啦,中西文化还是有差异的,翻译出来的结果大部分还可以,其他不合适的还得手动修改。

PS:在调用百度翻译平台计算的时候,需要通过抓包工具来分析请求数据,如果不了解过程就只能使用别人写好的请求参数,连这些参数是什么意思都不清楚(我就是不会那个不会用的哈哈哈哈,等我学会了回来写个教程,下次一定)

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值