You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python文本预处理后翻译出现NotValidPayload错误的解决方法

空字符串过滤实现方案

你对问题根源的判断是正确的,deep_translator的GoogleTranslator.translate_batch方法要求输入列表中的每一个元素都为非空、长度不超过5000字符的有效文本,空字符串''、纯空白字符的元素都会触发NotValidPayload报错。你可以从两个层面添加过滤逻辑解决问题:

1. 词干提取步骤后直接过滤(源头处理方案)

在词干提取函数的返回逻辑中直接过滤无效值,避免无效参数流入后续步骤,推荐优先用这个方案:

# 假设 stemmed_tokens 是词干提取后的输出列表
# 同时过滤空字符串和纯空白字符的元素,比直接判断 token != '' 覆盖场景更全
filtered_tokens = [token for token in stemmed_tokens if token.strip()]

2. 翻译函数入口添加校验(兜底防护方案)

如果要避免其他预处理步骤漏处理带来的同类问题,可以在调用翻译接口前再加一层校验,同时还可以同步校验单条文本长度是否超出5000字符的限制:

from deep_translator import GoogleTranslator

def translate_indonesian_tokens(tokens, target_lang='zh-CN'):
    # 同时过滤无效文本、校验长度上限
    valid_tokens = [
        token for token in tokens 
        if token.strip() and len(token.strip()) <= 5000
    ]
    # 空列表直接返回,避免调用接口时报错
    if not valid_tokens:
        return []
    return GoogleTranslator(source='id', target=target_lang).translate_batch(valid_tokens)

可选:保留原始列表索引的处理方案

如果你的业务逻辑需要翻译后的列表和原始词干列表的位置、长度一一对应,可以用占位符替换空值,翻译完成后再替换回空字符串,避免索引错乱:

placeholder = '__EMPTY_TOKEN_PLACEHOLDER__'
processed_tokens = []
for token in stemmed_tokens:
    cleaned = token.strip()
    processed_tokens.append(cleaned if cleaned else placeholder)

# 批量翻译
translated_list = GoogleTranslator(source='id', target='zh-CN').translate_batch(processed_tokens)

# 替换回空字符串,和原始列表长度保持一致
final_translated = [item if item != placeholder else '' for item in translated_list]

内容的提问来源于stack exchange,提问作者Ayu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:54:07