Поиск и замена символов в файле с Python - PullRequest
4 голосов
/ 13 февраля 2010

Я пытаюсь выполнить транслитерацию, когда мне нужно заменить каждый исходный символ на английском языке из файла на его эквивалент из словаря, который я использую в исходном коде, соответствующем другому языку в формате Unicode. Теперь я могу читать символ за символом из файла на английском языке. Как найти эквивалентную карту в словаре, который я определил в исходном коде, и убедиться, что он напечатан в новом транслитерированном выходном файле. Спасибо:).

Ответы [ 2 ]

3 голосов
/ 13 февраля 2010

Метод 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 любого размера, который будет удобно помещаться в памяти - в основном, выполнение одного текстового файла, так как время будет прекрасно на большинстве машин (например, замечательный - и огромный - Махабхарата занимает максимум несколько десятков мегабайт в любой из свободно загружаемых форм - санскрит [[с перекрестными ссылками как на деванагари, так и на римско-транслитерированные формы]], перевод на английский - доступен с этого сайта ).

0 голосов
/ 13 февраля 2010

Примечание: обновлено после уточнений от спрашивающего. Пожалуйста, прочитайте комментарии от ОП, прилагаемые к этому ответу.

Примерно так:

for syllable in input_text.split_into_syllables():
    output_file.write(d[syllable])

Здесь output_file - файловый объект, открытый для записи. d - это словарь, в котором индексами являются исходные символы, а значениями являются выходные символы. Вы также можете построчно читать ваш файл, а не читать все сразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...