首页 > 解决方案 > 熊猫专栏需要很长时间才能翻译

问题描述

我有一个大约 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 问题?我猜翻译时间太长了。

标签: pythonpandasgoogle-translation-api

解决方案


为了修复缓慢的代码,我只是在函数外初始化了一次导入和翻译客户端。

在 403 POST 错误的情况下,我不得不创建另一个 GCP 帐户。当我看到旧帐户(试用)中的配额时,没有超过或接近,但试用期显然已经结束,我不再拥有免费积分(400 美元)。我尝试为 API 启用计费(并检查我的卡没有失效),但这并没有太大变化。批量翻译在我的新帐户中工作。

所以,这只是一个帐户问题,而不是 API 问题。


推荐阅读