Метод translate объектов Unicode - это самый простой и быстрый способ выполнить необходимую транслитерацию. (Я предполагаю, что вы используете Unicode, а не простые байтовые строки, которые делают невозможным использование таких символов, как 'पत्र'
!).
Все, что вам нужно сделать, это правильно расположить словарь транслитерации, как указано в документах, на которые я вам указал:
каждая клавиша должна быть целым числом , кодовая точка символа Unicode; например, 0x0904 - это кодовая точка для ऄ
, AKA "DEVANAGARI LETTER SHORT A", поэтому для ее транслитерации вы должны использовать в качестве ключа в dict целое число 0x0904 (эквивалентно десятичному 2308). (Для таблицы с кодовыми точками для многих южно-азиатских сценариев см. этот pdf ).
соответствующее значение может быть порядковым номером Unicode, строкой Unicode (которая, вероятно, будет использоваться для задачи транслитерации, например, u'a'
, если вы хотите транслитерировать букву деванагари с короткой буквой A в английскую букву 'a'), или None (если во время "транслитерации" вы хотите просто удалить экземпляры этого символа Unicode).
Символы, которые не найдены в качестве ключей в dict, передаются без изменений от входа к выходу.
Как только ваш диктат изложен таким образом, output_text = input_text.translate(thedict)
выполняет всю транслитерацию за вас - и чертовски быстро тоже. Вы можете применить это к блокам текста Unicode любого размера, который будет удобно помещаться в памяти - в основном, выполнение одного текстового файла, так как время будет прекрасно на большинстве машин (например, замечательный - и огромный - Махабхарата занимает максимум несколько десятков мегабайт в любой из свободно загружаемых форм - санскрит [[с перекрестными ссылками как на деванагари, так и на римско-транслитерированные формы]], перевод на английский - доступен с этого сайта ).