如何用Python实现单句多语言自动识别与翻译?DeepL失效问题
单句混合多语言内容的翻译解决方案
针对DeepL无法自动识别单句内多语言、不翻译非英文片段的问题,以下是可行的解决方法:
问题背景
给定中英混合文本:
text_to_translate1=" I want to go for swimming however the 天气 (weather) is not good"
需求是将其中的非英文内容(如“天气”)翻译成英文,期望结果:
I want to go for swimming however the weather (weather) is not good
但直接使用DeepL SDK翻译时,系统会将整句识别为英文(detected_source_lang返回EN),导致中文词汇未被翻译。
可行解决方案
方法1:识别非英文字段并单独翻译替换
核心思路是提取文本中的非英文片段,单独调用DeepL翻译后替换回原文本,保留原有英文内容。
实现代码
import deepl from langdetect import detect, LangDetectException import re # 初始化DeepL翻译器 auth_key = "xxxxx" translator = deepl.Translator(auth_key) # 待翻译的混合语言文本 text_to_translate1 = " I want to go for swimming however the 天气 (weather) is not good" # 正则匹配所有非ASCII字符组成的连续片段(英文在ASCII范围内) non_en_pattern = re.compile(r'[^\x00-\x7F]+') def translate_non_en_segment(match): segment = match.group(0).strip() try: # 检测片段语言,仅翻译非英文内容 if detect(segment) != 'en': translation_result = translator.translate_text(segment, target_lang="EN-US") return translation_result.text return segment except LangDetectException: # 无法检测语言时返回原片段 return segment # 替换所有非英文片段 final_translation = non_en_pattern.sub(translate_non_en_segment, text_to_translate1) print(final_translation) # 输出:I want to go for swimming however the weather (weather) is not good
说明
- 使用
langdetect库检测每个片段的语言,确保只翻译非英文内容 - 正则表达式
[^\x00-\x7F]+匹配所有非ASCII字符,适用于中英混合场景;若涉及其他语言,可调整正则规则 - 加入异常处理,避免因语言检测失败导致程序报错
方法2:手动指定源语言组合(针对已知混合语言的场景)
如果明确文本仅包含中英两种语言,可以尝试强制指定DeepL的源语言为中文(需注意此方法可能会重新翻译原有英文内容,需测试后使用):
result = translator.translate_text(text_to_translate1, target_lang="EN-US", source_lang="ZH")
注意事项
- 调用DeepL API需注意调用频率限制,避免触发限流
langdetect库需提前安装:pip install langdetect- 若文本包含大量特殊符号或专业术语,需调整正则或添加自定义词汇表优化翻译结果
内容的提问来源于stack exchange,提问作者xavi
相关产品推荐
相关产品推荐

