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

如何在Python中实现整词及整句的关联字符串翻译?

问题:如何修改代码实现整词/整句翻译?

需求

开发一个程序,将文件中的特定词汇(如“sun”译为“nuclear fusion”,“Mars”译为“Earth”)等进行翻译。

现有代码

import time
import os
import sys
import pyperclip
import numpy as np


translator = {
    'E' :  'L' ,
    'H' :  'O' ,
    'L' : 'S' ,
    'O' :  'A' ,
    'HELLO' : 'Salut',
}

def a():
    f_path = input("File: ")
    f = open(f_path, 'r')
    lines = f.read()
    converted_data = ""

    for i in range(0, len(lines)):
        if lines[i] in translator.keys():
           converted_data += translator[lines[i]]
        else:
           converted_data += lines[i]
    print(converted_data)

a()

当前问题

代码运行时,若文件包含“HELLO”,输出结果为“OLSSA”而非预期的“Salut”。原代码仅匹配单个字符的字典键,无法实现整词或整句翻译。


解决方案

核心思路是优先匹配长文本(整词/整句),再匹配单个字符,通过正则表达式可以高效实现这一逻辑:

  1. 调整字典键的排序:将长键放在匹配优先级的首位,避免长文本被拆分为单个字符逐一替换。
  2. 使用正则批量替换:通过正则表达式生成匹配规则,一次性完成所有替换操作,提升效率与准确性。

修改后的代码如下:

import re  # 导入正则表达式模块

translator = {
    'HELLO': 'Salut',
    'E': 'L',
    'H': 'O',
    'L': 'S',
    'O': 'A',
}

# 生成正则匹配规则:按键的长度降序排列,确保长文本优先匹配
pattern = re.compile('|'.join(re.escape(key) for key in sorted(translator.keys(), key=len, reverse=True)))

def translate_file():
    f_path = input("File: ")
    with open(f_path, 'r') as f:  # 使用with语句自动管理文件资源,避免泄漏
        content = f.read()
    
    # 执行替换:匹配到的内容直接用字典对应值替换
    converted_data = pattern.sub(lambda match: translator[match.group()], content)
    print(converted_data)

translate_file()

关键说明

  • 排序规则:sorted(translator.keys(), key=len, reverse=True)将字典键按长度从长到短排序,确保“HELLO”这类长字符串先被匹配,不会被拆分为单个字符替换。
  • re.escape():转义键中的正则特殊字符(如., *等),避免匹配逻辑出错。
  • re.sub()的lambda替换:每次匹配到目标内容时,直接从字典中取出对应值完成替换。
  • with语句:替代直接open()文件的写法,自动处理文件关闭操作,代码更安全。

内容的提问来源于stack exchange,提问作者Genius500

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:05:15