Python按多个不同字符串分割字符串 自定义语言翻译器开发问题
自定义语言翻译器BUG修复方案
核心问题点
- 正则分割逻辑错误:
re.split()内错误使用and逻辑运算符,原本要匹配「定冠词前缀 或 动词/介词」的规则完全失效,仅会按动词/介词分割内容 - 动词丢失问题:分割后移除了动词内容,仅将动词追加到了未使用的
new_sentence变量,合并用的new_sentence2没有包含动词,导致colten丢失 - 变量未初始化兜底缺失:无动词/介词的句子会直接触发异常跳过语序调整逻辑,导致输出语序错误
- 语序调整逻辑混乱:没有按需求先提取所有定冠词引导的名词短语,再拼接动词、介词
修复后的核心分割逻辑代码
直接替换原有try块内容即可:
# 提前初始化变量避免未定义报错,注意逐词翻译函数开头也要加这两个变量的初始化定义 verbo = "" prepo2 = "" try: # 提取所有de/di开头的名词短语片段 parts = re.split(r'(de |di )', translated_sentence) noun_phrases = [] current_phrase = "" for part in parts: if part in ('de ', 'di '): if current_phrase: # 清理短语中包含的动词、介词内容 cleaned = current_phrase.replace(verbo, '').replace(prepo2, '').strip() if cleaned: noun_phrases.append(cleaned) current_phrase = part else: current_phrase += part # 处理最后一个名词短语 if current_phrase: cleaned = current_phrase.replace(verbo, '').replace(prepo2, '').strip() if cleaned: noun_phrases.append(cleaned) # 按要求拼接:所有名词短语 + 动词 + 介词 translated_sentence = ' '.join(noun_phrases).strip() if verbo: translated_sentence += ' ' + verbo if prepo2: translated_sentence += ' ' + prepo2 # 清理多余空格 translated_sentence = re.sub(r'\s+', ' ', translated_sentence).strip() except: pass
测试效果验证
- 输入
the man sits with the woman:输出de mno di felio colten aili,符合预期 - 输入
the man sits the woman:输出de mno di felio colten,符合动词移至句尾的逻辑 - 输入
the man is with the woman:输出de mno di felio aili,符合介词移至句尾的逻辑
内容的提问来源于stack exchange,提问作者qwerteee
相关产品推荐
相关产品推荐

