我正在尝试进行音译,其中我需要用一个文件替换英语中的每个源字符,该文件与我在与Unicode格式的另一种语言对应的源代码中使用的字典相当。我现在能够从英文文件中逐个字符地读取如何在源代码中定义的字典中搜索其等效地图,并确保在新的音译输出文件中打印。谢谢:)。
答案 0 :(得分:3)
Unicode对象的translate方法是执行所需音译的最简单,最快捷的方法。 (我假设您使用的是Unicode,而不是普通的字节字符串,因此无法使用'पत्र'
这样的字符!)。
您所要做的就是以精确的方式布置音译词典,正如我向您指出的文档中所指定的那样:
每个密钥必须是整数,Unicode字符的代码点;例如,0x0904是ऄ
,AKA“DEVANAGARI LETTER SHORT A”的代码点,因此对于音译,您将使用整数0x0904(相当于十进制2308)作为dict中的键。 (对于包含许多南亚脚本的代码点的表,请参阅this pdf)。
相应的值可以是Unicode序数,Unicode字符串(可能是您将用于音译任务的字符串,例如u'a'
如果您想要将Devanagari字母短A音译成英文字母'a')或无(如果在“音译”期间您只想删除该Unicode字符的实例)。
在dict中找不到作为键的字符将从输入传递到输出。
一旦你的dict布局如此,output_text = input_text.translate(thedict)
就会为你完成所有的音译 - 而且相当快。您可以将此应用于任何大小的Unicode文本块,这些块可以很好地适应内存 - 基本上只需要一个文本文件就可以在大多数机器上完成(例如,精彩 - 和巨大 - Mahabharata最多需要任何可免费下载的形式都有几十兆字节 - 梵文[[与天城文和罗马音译形式交叉链接]],英文翻译 - 可从this site获得。
答案 1 :(得分:0)
注意:在提问者澄清后更新。请阅读本答案附带的OP的评论。
这样的事情:
for syllable in input_text.split_into_syllables():
output_file.write(d[syllable])
这里output_file
是一个文件对象,可以写作。 d
是一个字典,其中索引是源字符,值是输出字符。您也可以尝试逐行读取文件,而不是一次性读取所有文件。