问题描述
我能够将用英语编写的印地语脚本转换回印地语
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 库,但得到了类似的结果。
解决方法
前言:我对梵文一无所知,所以你必须忍受我。
首先,考虑您的功能。它可以返回两个东西,character
或 None
(打印只是输出一些东西,它实际上并不返回值)。这使得您的第一个输出示例源自打印函数,而不是 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()
的通用文本中修复。