[英]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,但我得到了类似的结果。
前言:我对梵文一无所知,所以你必须忍受我。
首先,考虑你的功能。 它可以返回两个东西, 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 विकणे आहे'
为'bakrya विकणे आहे'
因为B
没有被转换。 这可以通过character.lower()
在通用文本中修复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.