将用 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 库,但我得到了类似的结果。
前言:我对天城文一窍不通,还请多多包涵。
首先,考虑你的功能。它可以 return 两件事,character
或 None
(打印只是输出一些东西,它实际上并不 return 一个值)。这使得您的第一个输出示例源自 print 函数,而不是 Python 评估您的最后一个语句。
然后,当您考虑第二个测试字符串时,它会看到有一些 Devanagari 文本,只有 return 字符串返回。如果这个音译像我想的那样工作,你必须做的是将这个功能应用到你文本中的每个单词。
我将你的函数修改为:
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
函数映射(即,将函数应用于每个元素)到这个新列表。最后,我将带有 space 的单独单词连接到 return 您转换后的字符串。
输出:
'बक्र्य विकणे आहे'
如果我可以建议,我会把这个 splitting/mapping 功能放到另一个函数中,以便更容易应用。
编辑:我不得不将您的测试字符串从 'Bakrya विकणे आहे'
修改为 'bakrya विकणे आहे'
,因为 B
没有被转换。这可以在带有 character.lower()
.
的通用文本中修复
我可以将用英语编写的印地语脚本转换回印地语
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 库,但我得到了类似的结果。
前言:我对天城文一窍不通,还请多多包涵。
首先,考虑你的功能。它可以 return 两件事,character
或 None
(打印只是输出一些东西,它实际上并不 return 一个值)。这使得您的第一个输出示例源自 print 函数,而不是 Python 评估您的最后一个语句。
然后,当您考虑第二个测试字符串时,它会看到有一些 Devanagari 文本,只有 return 字符串返回。如果这个音译像我想的那样工作,你必须做的是将这个功能应用到你文本中的每个单词。
我将你的函数修改为:
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
函数映射(即,将函数应用于每个元素)到这个新列表。最后,我将带有 space 的单独单词连接到 return 您转换后的字符串。
输出:
'बक्र्य विकणे आहे'
如果我可以建议,我会把这个 splitting/mapping 功能放到另一个函数中,以便更容易应用。
编辑:我不得不将您的测试字符串从 'Bakrya विकणे आहे'
修改为 'bakrya विकणे आहे'
,因为 B
没有被转换。这可以在带有 character.lower()
.