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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:45:15