繁体   English   中英

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

前言:我对梵文一无所知,所以你必须忍受我。

首先,考虑你的功能。 它可以返回两个东西, characterNone (打印只是输出一些东西,它实际上并不返回值)。 这使得您的第一个输出示例源自 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 विकणे आहे''bakrya विकणे आहे'因为B没有被转换。 这可以通过character.lower()在通用文本中修复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM