У вас есть несколько проблем, отличных от той, о которой вы спрашивали.
(1) Концептуальная проблема: "Ek-budz * dhi-m-aan- p-ksii #" равна не"английский".Это язык хинди, написанный на ASCII с использованием некоторой схемы латинизации.Это похоже на ITRAN, но ITRAN не имеет AA и A, у него есть только aa и a.У схемы есть имя?Можете ли вы предоставить URL?Ваш объект лучше описать как «транслитерацию некоторого текста на хинди из безымянной латинизации в сценарий деванагари».
(2) Отображение результата перевода вашего текста с хинди на английский («Мудрое старое животное» и т. Д.)только умеренно полезный.Ожидаемый вывод Деванагари был бы лучшей идеей.
(3) Как отметил @ kaiser.se, словарь транслитерации имеет многобайтовые (до 3 байтов!) Ключи, некоторые из которых являются префиксами других,Предположительно AA
должно быть распознано в приоритетном порядке до A
, gh
должно быть распознано до g
и т. Д. Итерации по элементам словаря происходят в порядке, который предсказуем, но для ваших целей должен рассматриваться как случайный,В следующем коде я отдал приоритет более длинным «ключам».
(4) Либо в словаре отсутствуют некоторые буквенные ключи (S tz), либо правила транслитерации сложнее, чем у любого из нас.до сих пор догадывался
(5) Значение символов # * и - не на 100% очевидно.Из вашего входного текста следует, что z и * появляются только в комбинации как z *
(6) Было бы неплохо, если бы вы объяснили интерпретацию, например, shaakhaay-e-ng
... начинается ли она с sh
затем aa
или оно начинается с sha
, затем a
?Каковы правила?
Ответ на проблему, о которой вы спрашивали, конечно же, так как несколько других указали, что вам необходимо кодировать вывод Unicode, используя кодировку, поддерживаемую вашим устройством отображения, например UTF-8.
Вот некоторый код:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
input_data = """
E-k- b-u-d-z*dhi-m-aan- p-ksii#
E-k- ghn-e- j-ngg-l- m-e-ng E-k- b-h-u-t- UUNNc-aa p-e-dr thaa#
[snip]
"t-o- k-z*y-aa h-u-AA"#
"""
roman_devanagari_dict={'A' : u'अ' , 'AA' : u'आ ' , 'I' : u'इ' , 'II' : u'ई ' , 'U' : u'उ ' ,\
[snip]
'2' : u'२' , '5' : u'५' , '3' : u'३' , '7' : u'७' , '9' : u'९' , '1' : u'१'}
#Presuming we need to do the 3-letter cases then the 2-letter then the 1-letter
replacements = [(-len(k), unicode(k), v) for k, v in roman_devanagari_dict.items()]
replacements.sort()
data = input_data.decode('ascii')
for _junk, from_text, to_text in replacements:
data = data.replace(from_text, to_text)
# Presuming the '-' are inter-character markers, delete them last, not first
data = data.replace(u'-', '')
data = data.replace(u'#', '')
print "untransliterated:", set(c for c in data if 0x20 < ord(c) < 0x7f)
BOM = u'\ufeff'
outf = open('devanagari.txt', 'w')
outf.write(BOM.encode('utf8')) # for the benefit of clueless Windows s/w
outf.write(data.encode('utf8'))
outf.close()
Вывод:
* बुद z * बहु पक्षी
एक घने जनगगल मेनग एक बहु बहु बहु z tz t ोनग से ष ष 10 10 z बू बैजुओनग मज रह झुनह मज तीनग वन कै झुनह * 10 10 10 ड 37 37 37 37 37 सुरक्षि सुरक्षि सुरक्षि सुरक्षि रह रह रह रह रह रह ेबुद z धिमैन थ a इस बुद z धिमैन पक्षक ने एक दिन की जड मेनग से से ल ल ल ल ग ग ग ग ग ग इस इस की कीउपूछै "t ुम z हेनग इसे न S ह z ट कर देनै चैहिए" "इसे क z योनग न S ह z ट कर देनै चैहिए?"श ने आ श z च रय से पूछै "ो t ो इ t नी छोटी क हेि हमेनग क क z यै हैनि पहुँचै सक t ी हेि" "मेरे मित्रोनग," बुद z धिमैन पक्षी ने उ tz t दियै दियै वह वह ल t जल z 52 ही बडी हो यह हमैरे हमैरे चढ चढ 10 10 52 52 52 52 52 52 लिपट 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 54 54 54 54 54 1054हुआ "
, который имеет только несколько узнаваемых слов при отправке через Google Translate.
Обновление после более тщательного изучения таблицы транслитерации:
Три записи (AA, II и U) имеют пробел после эквивалента Деванагари.Возможно, пробелы следует удалить.
Общий шаблон для согласных выглядит следующим образом:
Письмо DEVANAGARI XA представлено как x
Письмо DEVANAGARI XXA представлено как X
Письмо DEVANAGARI XHA представлено как xh
Письмо DEVANAGARI XXHA представлено как Xh
Однако 3 записи нарушают шаблон:
SSA -> sha, но шаблон говоритS
TA -> th, но шаблон говорит, что t
THA -> tha, но шаблон говорит, что *
Примечание: изменение вышеуказанных 3-х записей не давало моему коду жаловаться, что S и t были оставлены неизменными при транслитерацииВаш образец текста и удалил, казалось бы, аномальные записи sha и tha.
Записи (D и dr) отображаются на один и тот же символ DEVANAGARI LETTER DDA.D - ожидаемая запись для этого символа;возможно, доктор должен быть сделанв другом месте.
Нет записи для Письма DEVANAGARI NGA (U + 0919); возможно, он должен быть закодирован как ng - в образце текста есть несколько слов, оканчивающихся на ng.
Имеют ли вхождения в строку «z *» в тексте образца какое-либо отношение к DEVANAGARI LETTER ZA (U + 095B)?