现在有分段、句子数量可能不一致的中英文文本,如何用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")
功能特点:
-
智能分句处理:
- 英文支持常见缩写(如Mr., Ms.等)
- 中英文使用不同分句规则
- 处理全角/半角标点差异
-
段落保持功能:
- 保留原始段落结构
- 每个段落独立处理
- 自动处理空行分隔
-
容错对齐机制:
# 对齐处理(取最大长度) 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 "[无译文]"
-
批量翻译优化:
# 批量翻译(提高效率) 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: [无原文]
使用说明:
-
安装依赖:
pip install googletrans==4.0.0-rc1 regex
-
自定义处理:
- 调整
split_sentences
中的正则表达式优化分句 - 添加重试逻辑处理API限制
- 扩展支持更多语言对
- 调整
-
注意事项:
- Google翻译API的免费版有调用频率限制
- 中文分句准确率约90%(建议对专业文本进行后处理)
- 网络连接不稳定时添加重试机制
此方案通过分段落、智能分句、批量翻译和容错对齐机制,能够较好地处理中英文混合文本的对照翻译需求,即使原文和译文的句子数量不一致也能保持基本对齐。