0

我能够将用英语编写的印地语脚本转换回印地语

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 库,但我得到了类似的结果。

4

1 回答 1

0

前言:我对天城文一窍不通,所以你得忍耐一下。

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

然后,当您考虑第二个测试字符串时,它会看到有一些梵文文本并返回字符串。如果这个音译像我认为的那样有效,那么你要做的就是将此功能应用于文本中的每个单词。

我将您的功能修改为:

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到这个新列表。最后,我用空格连接单独的单词以返回转换后的字符串。

输出:

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

如果我可以建议,我会将此拆分/映射功能放入另一个函数中,以使事情更容易应用。

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

于 2021-04-01T01:48:04.347 回答