将乌尔都语(RTL)转换为LTR后语义丢失,求解决方案
问题分析与解决方案
你混淆了文本方向调整和语言转写/翻译的区别:bidi和arabic_reshaper只是用来处理RTL文本在LTR环境下的显示顺序与字形,根本不负责语言的音译或翻译,所以会出现无意义的乱码输出。要保留语义完成转换,需要从以下两个方向入手:
方案1:乌尔都语转拉丁字母音译(罗马化)
如果需要将乌尔都语(阿拉伯字母体系)转成类似你给出的prograaming kee duniya mein aapaka svaagat hai这种拉丁字母音译形式,可以使用专门的罗马化工具:
使用urduhack库
pip install urduhack
import urduhack # 乌尔都语文本,对应语义"Welcome to the world of programming" urdu_text = "مرحبا بك في عالم البرمجة" # 转换为拉丁字母音译 romanized_text = urduhack.romanize(urdu_text) print(romanized_text) # 输出接近语义的拉丁化表述
使用transliterate库(自定义映射更灵活)
pip install transliterate
from transliterate import translit urdu_text = "مرحبا بك في عالم البرمجة" # 乌尔都语转拉丁字母反向转写 romanized_text = translit(urdu_text, 'ur', reversed=True) print(romanized_text)
方案2:乌尔都语直接翻译为目标语言(如英文)
如果需要直接得到语义对应的英文句子,可使用机器翻译模型:
pip install transformers torch
from transformers import pipeline # 加载乌尔都语→英文翻译模型 translator = pipeline("translation", model="Helsinki-NLP/opus-mt-ur-en") urdu_text = "مرحبا بك في عالم البرمجة" result = translator(urdu_text) print(result[0]['translation_text']) # 输出 "Welcome to the world of programming"
为什么之前的代码无效?
bidi.algorithm.get_display仅调整字符的显示顺序,让RTL文本在LTR界面中不出现顺序错乱,但不会改变字符本身,乌尔都语的阿拉伯字母是连写体系,反向后字符组合会变成无意义的乱码。arabic_reshaper只是修复阿拉伯字母的连写字形,确保字符显示正确,同样不涉及语言转写或翻译。
内容的提问来源于stack exchange,提问作者Tanisha
相关产品推荐
相关产品推荐

