如何用Python实现罗马化英文转尼泊尔语天城文转换器?
罗马化英文转尼泊尔语天城文转换器实现方案
基本原理
核心逻辑基于最长匹配优先的字符映射规则:罗马化尼泊尔语存在单字符、双字符甚至多字符的天城文对应(如chha对应छ、kshya对应क्ष),优先匹配更长的字符组合,能避免短匹配导致的拆分错误。同时直接保留输入中的非罗马化字符(如空格、问号)。
运行机制
- 预处理与排序:先将映射字典的按键按字符长度降序排列,确保遍历时优先匹配最长的罗马化组合。
- 逐字符匹配转换:从输入字符串的起始位置开始,依次尝试匹配最长的罗马化键值,匹配成功则替换为对应天城文并移动指针;未匹配到的字符(如标点、空格)直接保留。
- 结果拼接:将所有转换后的字符和保留的原字符拼接成最终的天城文字符串。
完整实现代码
首先修正原字典的语法错误(如引号缺失、无效注释),再添加转换逻辑:
# Romanaizer.py # version 1.0 key_chars = { # 元音映射 "aa": "आ", "ai": "ऐ", "au": "औ", "am": "अン", "a": "अ", "i": "इ", "ii": "ई", "u": "उ", "U": "ऊ", "e": "ए", "o": "ओ", # 辅音及组合映射 "kshya": "क्ष", "chha": "छ", "jha": "झ", "Tha": "ठ", "Dha": "ढ", "kha": "ख", "gha": "घ", "nga": "ङ", "cha": "च", "ja": "ज", "yna": "ञ", "Ta": "ट", "Da": "ड", "Na": "ण", "tha": "थ", "dha": "ध", "pha": "फ", "bha": "भ", "Sa": "श", "sha": "ष", "tra": "त्र", "gya": "ज्ञ", "ka": "क", "ga": "ग", "ta": "त", "da": "द", "na": "न", "pa": "प", "ba": "ब", "ma": "म", "ya": "य", "ra": "र", "la": "ल", "va": "व", "sa": "स", "ha": "ह" } # 按键长度降序排序,保证最长匹配优先 sorted_keys = sorted(key_chars.keys(), key=lambda x: len(x), reverse=True) def roman_to_nepali(text): result = [] idx = 0 text_len = len(text) while idx < text_len: match_found = False # 遍历所有键,尝试最长匹配 for key in sorted_keys: key_len = len(key) if idx + key_len <= text_len and text[idx:idx+key_len] == key: result.append(key_chars[key]) idx += key_len match_found = True break # 未匹配到则保留原字符(如空格、标点) if not match_found: result.append(text[idx]) idx += 1 return ''.join(result) # 测试示例 if __name__ == "__main__": test_inputs = [ "ke gardai chhau?", "namaste", "mero naam tara ho", "kshya tra gya" ] for input_str in test_inputs: print(f"输入: {input_str}") print(f"输出: {roman_to_nepali(input_str)}\n")
代码关键说明
- 最长匹配排序:将
key_chars的按键按长度从长到短排序,确保chha先于cha被匹配,避免出现chhau被错误拆分为cha+u的情况。 - 容错处理:未匹配到罗马化字符的内容(如问号、空格)直接保留,保证输入格式的完整性。
- 可扩展性:若需支持更多罗马化规则,只需在
key_chars中添加对应的键值对即可。
内容的提问来源于stack exchange,提问作者Tara Nath Niraula
相关产品推荐
相关产品推荐

