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

如何用Python实现罗马化英文转尼泊尔语天城文转换器?

罗马化英文转尼泊尔语天城文转换器实现方案

基本原理

核心逻辑基于最长匹配优先的字符映射规则:罗马化尼泊尔语存在单字符、双字符甚至多字符的天城文对应(如chha对应छ、kshya对应क्ष),优先匹配更长的字符组合,能避免短匹配导致的拆分错误。同时直接保留输入中的非罗马化字符(如空格、问号)。

运行机制

  1. 预处理与排序:先将映射字典的按键按字符长度降序排列,确保遍历时优先匹配最长的罗马化组合。
  2. 逐字符匹配转换:从输入字符串的起始位置开始,依次尝试匹配最长的罗马化键值,匹配成功则替换为对应天城文并移动指针;未匹配到的字符(如标点、空格)直接保留。
  3. 结果拼接:将所有转换后的字符和保留的原字符拼接成最终的天城文字符串。

完整实现代码

首先修正原字典的语法错误(如引号缺失、无效注释),再添加转换逻辑:

# 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:30:37