python - 熊猫专栏需要很长时间才能翻译
问题描述
我有一个大约 20 万条记录的熊猫数据框。它有两列;英文文本和分数。我想将一个专栏从英语翻译成其他几种语言。为此,我使用了来自 Google 的 GCP 的 Cloud Translation API。然而,翻译它们花费了非常长的时间。我的代码基本上是这样的:
def translate_text(text, target_language):
from google.cloud import translate_v2 as translate
try:
translate_client = translate.Client(credentials=credentials)
result = translate_client.translate(text, target_language=target_language)
return result['translatedText']
except Exception as e:
print(e)
还有这个:
df['X_language'] = df['text'].apply(lambda text: translate_text(text, '<LANG CODE>'))
我已经看到它apply()
相当慢,加上来自 API 的响应可能是它变慢的另一个因素,但是有什么方法可以让它更高效吗?我尝试了更快,但几乎没有减少几秒钟(在针对数据帧的子集进行测试时)。
请注意,数据框中的某些文本字段包含大约 300 个字符。数量不多,但数量可观。
编辑:
translate
从函数外部导入google.cloud
并定义客户端后,代码运行得更快。但是,由于某种原因,当我尝试传递一个列表(“文本”列的行)时,它不会返回翻译后的文本;它只是快速运行并以英文返回列表本身。
这可能与我使用的凭据有关,还是?我正在传递您在 GCP 中创建项目时获得的服务帐户 JSON 文件。
编辑 2:
我将我的数据框划分为 4 个,每个都有约 50k 条记录。仍然需要太多时间。我什至删除了所有超过 250 个字符的文本..
我认为这是一个翻译 API 问题?我猜翻译时间太长了。
解决方案
为了修复缓慢的代码,我只是在函数外初始化了一次导入和翻译客户端。
在 403 POST 错误的情况下,我不得不创建另一个 GCP 帐户。当我看到旧帐户(试用)中的配额时,没有超过或接近,但试用期显然已经结束,我不再拥有免费积分(400 美元)。我尝试为 API 启用计费(并检查我的卡没有失效),但这并没有太大变化。批量翻译在我的新帐户中工作。
所以,这只是一个帐户问题,而不是 API 问题。
推荐阅读
- python - 不确定这里出了什么问题,无论我尝试什么,它都会返回 TypeError: 'NoneType' object is not iterable
- oracle - 数字的 Oracle 字节大小
- r - 在 R Lubridate 中解析我的日期时间时出现问题
- php - 如何使用 cakephp 2 在视图中显示树视图
- selenium - 复选框中的 Xpath 定位器
- vue.js - 无法对 Vuesax 数据表中的日期列进行排序
- c++ - 关于抽象类(cpp)的运算符重载
- unity3d - 统一地牢生成
- c++ - 使用 Sony Camera Remote SDK 获取照片
- postgresql - SUM distinct 内窗函数