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
相关产品推荐
相关产品推荐

