微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将用 2 个不同文字写成的句子音译成一个文字

如何解决将用 2 个不同文字写成的句子音译成一个文字

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

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(打印只是输出一些东西,它实际上并不返回值)。这使得您的第一个输出示例源自打印函数,而不是 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() 的通用文本中修复。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。