因为要用googletrans来回翻译做数据增强,而且有2w条数据,来回翻译就有4w次。
在这个函数里碰到不少问题,这里就直接手把手帮大家直接搞定
是否需要换库?
一开始搜,各种让我换googletrans_new这个库,但是后面又说这个翻译的质量较差,所以本篇文章不涉及换库的,该用googletrans还是用它
1.首先确认自己能否连接
首先就是让命令行能上外网,因为就算挂了梯子,但是命令行是在网络层(可能)并不能通过梯子翻墙,所以需要操作一下设置代理
找到梯子里提供的
https_proxy=http://127.0.0.1:XXXXX
https_proxy=http://127.0.0.1:XXXXX
在命令行里可以通过命令
set https_proxy=http://127.0.0.1:XXXXX
set https_proxy=http://127.0.0.1:XXXXX
来设置临时的代理
set https_proxy=
set https_proxy=
通过上面的代码可以取消设置代理
也可以去PATH里面系统变量里添加https_proxy、https_proxy两个属性来设置永久的代理
或者是通过下面这句来设置
set all_proxy=socks5://127.0.0.1:XXXXX
命令行运行
curl www.google.com -I
来判断是否设置成功,如果返回了一个接口(很多字)则成功
另一种方法
使用谷歌的colab,在它上面进行数据预处理,再把得到的下载下来,这样也可以
2.下载新版本googletrans
pip install googletrans==4.0.0rc1
在新版本修复了3.x.x的很多bug,所以推荐使用该版本,也稳定不少。
3.报错 AttributeError: ‘Translator’ object has no attribute ‘raise_Exception’
这是由于谷歌翻译限制每秒的访问次数
可以通过try-except来重复访问,并通过sleep()来限制访问频率
(“好慢这样!!!我2w条数据互译两个小时才23%!!!!还有没有其他方法!!")
附上我的部分代码
def generate(data_dir, save_dir, n_mask = 5, n_gen = 10):
with open(data_dir, 'r',encoding="utf-8") as f:
data = f.readlines()
f.close()
translator = Translator()
##translator = google_translator()
aug_sents = []
length=len(data)
i=0
for sent in data:
try:
trans_sent = translator.translate(sent, src='en', dest='zh-cn')
except:
print("retry...")
time.sleep(2)
continue
time.sleep(0.3)
try:
aug_sent = translator.translate(trans_sent.text, src='zh-cn', dest='en')
except:
print("retry...")
time.sleep(2)
continue
time.sleep(0.15)
##trans_sent = translator.translate(sent,'zh')
##aug_sent = translator.translate(trans_sent,'en')
aug_sent = aug_sent.text
aug_sents.append(aug_sent)
print("finish ",'%.3f'%(i/length*100),"%")
i+=1
save_data(save_dir, aug_sents)
print("finish augmentation")
for i in range(10):
print("input sentence:", data[i].strip())
print("aug sentence:", aug_sents[i])
print()