Googletrans处理大数据集失效:Dataframe波斯语翻译遇阻
解决大规模DataFrame文本翻译中断问题
问题原因
你遇到的核心问题是Googletrans免费API的请求频率限制,循环中每次初始化Translator+高频请求会触发限流机制,导致后续翻译请求失败,仅完成约1800行。
解决方案
以下是针对性优化方案,解决限流、重试和进度丢失问题:
1. 核心优化方向
- 复用
Translator实例,避免重复初始化带来的资源浪费和请求特征异常 - 添加请求延迟,降低请求频率,规避限流
- 实现失败重试机制,临时网络波动或限流时自动重试
- 分批保存翻译结果,防止意外中断丢失全部进度
2. 优化后的代码
import pandas as pd from googletrans import Translator import time from tenacity import retry, stop_after_attempt, wait_exponential # 仅初始化一次翻译器,避免重复创建连接 translator = Translator() # 失败重试装饰器:最多重试3次,等待时间指数增长(缓解限流) @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10)) def translate_single_text(text, dest_lang='fa'): translated = translator.translate(text, dest=dest_lang) return translated.text def batch_translate(df, text_col='question', batch_size=100): translated_df = df.copy() translated_df['translated'] = '' # 分批处理数据,降低单次请求压力 for start in range(0, len(df), batch_size): end = min(start + batch_size, len(df)) batch = df.iloc[start:end] for idx in batch.index: try: raw_text = batch.loc[idx, text_col] translated_text = translate_single_text(raw_text) translated_df.loc[idx, 'translated'] = translated_text # 添加小延迟,避免触发API频率限制 time.sleep(0.5) except Exception as e: print(f"行{idx}翻译失败: {str(e)}") translated_df.loc[idx, 'translated'] = None # 每批处理完成后保存中间进度,防止意外中断丢失数据 translated_df.to_csv('translated_progress.csv', index=False) print(f"已完成{end}/{len(df)}行翻译,进度已保存") return translated_df # 调用翻译函数 final_translated_df = batch_translate(df) final_translated_df.to_csv('final_translated_data.csv', index=False)
3. 额外说明
- 若未安装
tenacity库,先执行pip install tenacity - 可根据实际情况调整
time.sleep()时长(0.3-1秒区间均可)和batch_size大小 - 若仍遭遇持续限流,建议切换到Google Cloud Translation API(需付费,但无严格频率限制,适配大规模数据翻译场景)
内容的提问来源于stack exchange,提问作者Majid wasiqi
相关产品推荐
相关产品推荐

