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

如何在英翻阿RTL文本处理中避免小数被错误反转

问题解决方案

问题根源

现有代码的问题出在拆分逻辑使用的\w元字符仅支持匹配字母、数字、下划线,不包含小数点,因此2.50这类小数会被拆分为2、.、50三个独立片段,后续顺序反转后就会变成50.2,不符合预期。

修复方案

调整拆分正则和不需要反转的内容匹配规则,优先把完整小数作为独立单元拆分,避免小数被切割:

修改后的代码

import re
from googletrans import GoogleTranslator
import arabic_reshaper

# 匹配所有不需要反转的单元:英文词汇、整数、小数
no_reverse = re.compile(r'^([A-Za-z0-9_.]+|\d+\.\d+)$')
# 拆分正则优先匹配完整小数、英文、数字单元,避免切割小数
split_rule = re.compile(r'(\d+\.\d+|[A-Za-z0-9_.]+)')

item_name = "paper roll 2.50m x 3.36m VIP"
# 翻译+阿拉伯语整形
translated_text = GoogleTranslator(source='en', target='ar').translate(item_name)
reshaped_text = arabic_reshaper.reshape(translated_text)

# 按规则拆分后处理顺序和反转
processed = []
for segment in reversed(split_rule.split(reshaped_text)):
    if not segment.strip():
        continue
    if no_reverse.match(segment):
        processed.append(segment)
    else:
        processed.append(segment[::-1])

final_result = ''.join(processed)

效果验证

运行后输出结果为VIP لفة ورق 2.50 م × 3.36 م,符合预期要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:15:02