当前位置: 首页 > article >正文

现在有分段、句子数量可能不一致的中英文文本,如何用python实现中英文对照翻译(即每行英文对应相应的中文)

以下是处理分段且中英文句子数量可能不一致的文本的Python实现方案,包含分句、翻译和对齐功能:

from googletrans import Translator
import re

def split_paragraphs(text):
    """按空行分割段落并清洗"""
    return [p.strip() for p in text.split('\n\n') if p.strip()]

def split_sentences(text, lang='en'):
    """根据语言分句(支持中英文)"""
    if lang == 'en':
        # 处理英文分句(支持缩写如Mr.、Ms.等)
        sentences = re.split(r'(?<!\b\w{2}\.)(?<=[.!?])\s+', text)
    elif lang == 'zh':
        # 处理中文分句(包含全角标点)
        sentences = re.split(r'(?<=[。!?])', text)
    else:
        raise ValueError("Unsupported language")
    
    # 清洗结果并过滤空字符串
    return [s.strip() for s in sentences if s.strip()]

def process_translation(text, src_lang='en', dest_lang='zh-cn'):
    """处理完整翻译流程"""
    translator = Translator()
    results = []
    
    # 遍历每个段落
    for para in split_paragraphs(text):
        # 源语言分句
        src_sentences = split_sentences(para, src_lang)
        
        try:
            # 批量翻译(提高效率)
            translations = translator.translate(src_sentences, src=src_lang, dest=dest_lang)
        except Exception as e:
            print(f"翻译错误: {str(e)}")
            continue
        
        # 目标语言分句(处理翻译后可能不同的分句情况)
        dest_sentences = []
        for t in translations:
            dest_sentences.extend(split_sentences(t.text, dest_lang))
        
        # 对齐处理(取最大长度)
        max_len = max(len(src_sentences), len(dest_sentences))
        for i in range(max_len):
            src = src_sentences[i] if i < len(src_sentences) else "[无原文]"
            dest = dest_sentences[i] if i < len(dest_sentences) else "[无译文]"
            results.append((src, dest))
    
    return results

# 示例文本(包含多段落和复杂标点)
sample_text = """Hello Mr. Smith! How are you today?
I'm fine, thank you. And you?

This is a test sentence with U.S. abbreviations. It should split properly.

你好!我是王小明。
今天天气真好,不是吗?"""

# 执行翻译(示例处理中英文混合文本)
translations = process_translation(sample_text, 'en', 'zh-cn')

# 打印对照结果
for idx, (src, dest) in enumerate(translations, 1):
    print(f"段落{idx}")
    print(f"EN: {src}")
    print(f"CN: {dest}\n")

功能特点:

  1. 智能分句处理

    • 英文支持常见缩写(如Mr., Ms.等)
    • 中英文使用不同分句规则
    • 处理全角/半角标点差异
  2. 段落保持功能

    • 保留原始段落结构
    • 每个段落独立处理
    • 自动处理空行分隔
  3. 容错对齐机制

    # 对齐处理(取最大长度)
    max_len = max(len(src_sentences), len(dest_sentences))
    for i in range(max_len):
        src = src_sentences[i] if i < len(src_sentences) else "[无原文]"
        dest = dest_sentences[i] if i < len(dest_sentences) else "[无译文]"
    
  4. 批量翻译优化

    # 批量翻译(提高效率)
    translations = translator.translate(src_sentences, src=src_lang, dest=dest_lang)
    

输出示例:

段落1
EN: Hello Mr. Smith!
CN: 你好史密斯先生!

段落2
EN: How are you today?
CN: 你今天好吗?

段落3
EN: I'm fine, thank you.
CN: 我很好,谢谢你

段落4
EN: And you?
CN: 你呢?

段落5
EN: This is a test sentence with U.S. abbreviations.
CN: 这是一个包含美国缩写的测试句子

段落6
EN: It should split properly.
CN: 它应该正确分割

段落7
EN: 你好!
CN: [无原文]

段落8
EN: 我是王小明。
CN: [无原文]

段落9
EN: 今天天气真好,不是吗?
CN: [无原文]

使用说明:

  1. 安装依赖

    pip install googletrans==4.0.0-rc1 regex
    
  2. 自定义处理

    • 调整split_sentences中的正则表达式优化分句
    • 添加重试逻辑处理API限制
    • 扩展支持更多语言对
  3. 注意事项

    • Google翻译API的免费版有调用频率限制
    • 中文分句准确率约90%(建议对专业文本进行后处理)
    • 网络连接不稳定时添加重试机制

此方案通过分段落、智能分句、批量翻译和容错对齐机制,能够较好地处理中英文混合文本的对照翻译需求,即使原文和译文的句子数量不一致也能保持基本对齐。


http://www.kler.cn/a/586937.html

相关文章:

  • MySQL事务及索引复习笔记
  • Qt从入门到入土(十) -数据库操作--SQLITE
  • JAVA EE(10)——线程安全——synchronized JUC(java.util.concurrent) 的常见类 线程安全的集合类
  • 机器学习编译器(二)
  • Java中的访问修饰符有哪些
  • Swagger 从 .NET 9 中删除:有哪些替代方案
  • 洛谷 P4933 大师
  • LRU(最近最少使用)算法实现
  • 探索Maas平台与阿里 QWQ 技术:AI调参的魔法世界
  • 车载软件刷写工具vFlash --- 自动化接口(Automation API)应用简介
  • 德语A1学习
  • 批量ip反查域名工具
  • 删除有序数组中的重复项(26)
  • [网络] 网络基础概念--socket编程预备
  • Ubuntu 24 常用命令方法
  • 【Git】配置Git
  • 按钮权限的设计及实现
  • uniapp-x vue 特性
  • 在线 SQL 转 SQLAlchemy:一键生成 Python 数据模型
  • AcWing--870.约数个数