pthon翻译googletrans案例
在对1600+行内容,进行中英互译时,发现报错:
一开始以为是文件内容或是语法问题,反复查验,未发现文件内容方面的问题;
语法方面,切换了多个googletrans版本,均出现报错;
最后把文档内容做了切分,发现数据记录相对较少的文件可以正常运转,排除语法方面问题;
经测试:但是每次报错的节点不一样,有时候198条内容报错,有时281条内容报错,每次都不一致,排除文件格式问题,经过多次尝试,怀疑是过度频繁的使用网页请求而被系统监测到,从而报错;
使用time.sleep()处理:
40条记录,休息10秒,ok;
50条记录,休息10秒,ok;
100条记录,休息10秒,报错;
1条记录,休息1秒,暂未报错(已运行500+条)
# import asyncio
import time
import numpy as np
from googletrans import Translator
import pandas as pd
filepath='/Users/kangyongqing/Downloads/'
file1='Location分布.xlsx'
df1=pd.read_excel(filepath+file1)
# df=df1[df1['location'].str.contains(r'[\u4e00-\u9fff]+')].copy() # \u4e00-\u9fff 是unicode中汉字的常用范围
df=df1.copy()
df['loc1']=''
translator=Translator()
# df['loc1']=df['location'].map(lambda x:translator.translate(x,dest='en').text)
k=1
i=0
# for i in range(i,len(df)):
# print(i)
# df.iloc[i, 1] = translator.translate(df.iloc[i, 0], dest='en').text
# print(df.iloc[i, 1])
# i+=1
# if np.mod(i,40)==0:
# df.iloc[(k-1)*40:i,:].to_excel(filepath + f'chuli到{(k-1)*40}到{i-1}条记录.xlsx')
# k+=1
# time.sleep(10)
# elif i==len(df):
# df.iloc[(k - 1) * 40:i, :].to_excel(filepath + f'chuli到{(k - 1) * 40}到{i - 1}条记录.xlsx')
# for i in range(i,len(df)):
# print(i)
# df.iloc[i, 1] = translator.translate(df.iloc[i, 0], dest='en').text
# print(df.iloc[i, 1])
# i+=1
# if np.mod(i,50)==0:
# df.iloc[(k-1)*50:i,:].to_excel(filepath + f'chuli到{(k-1)*50}到{i-1}条记录.xlsx')
# k+=1
# time.sleep(10)
# elif i==len(df):
# df.iloc[(k - 1) * 50:i, :].to_excel(filepath + f'chuli到{(k - 1) * 50}到{i - 1}条记录.xlsx')
for i in range(i,len(df)):
print(i)
df.iloc[i, 1] = translator.translate(df.iloc[i, 0], dest='en').text
time.sleep(1)
i+=1
# if np.mod(i,500)==0:
# df.iloc[(k-1)*500:i,:].to_excel(filepath + f'chuli到{(k-1)*500}到{i-1}条记录.xlsx')
# k+=1
# time.sleep(10)
# elif i==len(df):
# df.iloc[(k - 1) * 500:i, :].to_excel(filepath + f'chuli到{(k - 1) * 500}到{i - 1}条记录.xlsx')
df.to_excel(filepath+'fanyi.xlsx')
结果1:
结果2:
逐条监督运行,成功翻译1600+记录,并导出明细,达成目标:
pandas筛选含有汉字的行:
# df=df1[df1['location'].str.contains(r'[\u4e00-\u9fff]+')].copy() # \u4e00-\u9fff 是unicode中汉字的常用范围