将用 2 种不同脚本编写的句子音译为单个脚本

Transliterate sentence written in 2 different scripts to a single script

我可以将用英语编写的印地语脚本转换回印地语

import codecs,string
from indic_transliteration import sanscript
from indic_transliteration.sanscript import SchemeMap, SCHEMES, transliterate


def is_hindi(character):
    maxchar = max(character)
    if u'\u0900' <= maxchar <= u'\u097f':
    return character
    else:
        print(transliterate(character, sanscript.ITRANS, sanscript.DEVANAGARI)

character = 'bakrya'
is_hindi(character)

Output:
बक्र्य

但是如果我尝试这样做,我不会得到任何转化

character = 'Bakrya विकणे आहे'
is_hindi(character)

Output:
Bakrya विकणे आहे

Expected Output:
बक्र्य विकणे आहे

我也尝试了 Polyglot 库,但我得到了类似的结果。

前言:我对天城文一窍不通,还请多多包涵。

首先,考虑你的功能。它可以 return 两件事,characterNone(打印只是输出一些东西,它实际上并不 return 一个值)。这使得您的第一个输出示例源自 print 函数,而不是 Python 评估您的最后一个语句。

然后,当您考虑第二个测试字符串时,它会看到有一些 Devanagari 文本,只有 return 字符串返回。如果这个音译像我想的那样工作,你必须做的是将这个功能应用到你文本中的每个单词。

我将你的函数修改为:

def is_hindi(character):
    maxchar = max(character)
    if u'\u0900' <= maxchar <= u'\u097f':
        return character
    else:
        return transliterate(character, sanscript.ITRANS, sanscript.DEVANAGARI)

并修改了对

的调用
' '.join(map(is_hindi, character.split()))

让我解释一下,从右到左。首先,我用 .split() 将你的测试字符串拆分成单独的单词。然后,我将新的 is_hindi 函数映射(即,将函数应用于每个元素)到这个新列表。最后,我将带有 space 的单独单词连接到 return 您转换后的字符串。

输出:

'बक्र्य विकणे आहे'

如果我可以建议,我会把这个 splitting/mapping 功能放到另一个函数中,以便更容易应用。

编辑:我不得不将您的测试字符串从 'Bakrya विकणे आहे' 修改为 'bakrya विकणे आहे',因为 B 没有被转换。这可以在带有 character.lower().

的通用文本中修复