Для международных документов русский текст преобразуется с использованием латинского алфавита. ГОСТ Р 52535.1-2006 задаёт правила транслитерации идентификационных карт.
Ниже приведена таблица замен:
- А — A
- Б — B
- В — V
- Г — G
- Д — D
- Е — E
- Ё — E
- Ж — ZH
- З — Z
- И — I
- Й — I
- К — K
- Л — L
- М — M
- Н — N
- О — O
- П — P
- Р — R
- С — S
- Т — T
- У — U
- Ф — F
- Х — KH
- Ц — TC
- Ч — CH
- Ш — SH
- Щ — SHCH
- Ы — Y
- Э — E
- Ю — IU
- Я — IA
Давайте транслитерируем русский текст.
Букву «ё» транслитерируйте как «e», «й» как «и», а «ъ» и «ь» (и их заглавные версии «Ъ» и «Ь») должны исчезнуть из текста. Строчные буквы заменяются на строчные, заглавные заменяются на заглавные. Если заглавная буква превращается при транслитерации в несколько букв, то заглавной должна остаться только первая из них (например, «Ц» → «Tc»). Все некириллические символы должны остаться на месте.
Формат ввода
В одной папке с вашей программой лежит файл cyrillic.txt. В нём, в числе прочих, содержится некоторое количество кириллических символов.
Формат вывода
В файл transliteration.txt записать результат транслитерации исходного файла.
Пример
Ввод
Привет, мир!
Вывод
Privet, mir!
Ввод
Я помню чудное мгновенье: Передо мной явилась ты, Как мимолетное виденье, Как гений чистой красоты.
Вывод
Ia pomniu chudnoe mgnovene: Peredo mnoi iavilas ty, Kak mimoletnoe videne, Kak genii chistoi krasoty.
Решение
Довольно простая задача на словари и работу с файлами. Основной алгоритм берем из задачи J. Транслитерация. Работу с файлами удобнее всего организовать с помощью менеджера контекста with.
Работу с файлами в такого типа задачах можно организовать двумя способами:
Cначала прочитать данные, преобразовать их и только потом записать. Это минимизирует время работы с файлами.
Второй способ – открыть оба файла и сразу записывать преобразованные данные по мере обработки. Этот подход минимизирует использование памяти.
В реальной разработке, при обработке больших объемов данных, эти способы зачастую комбинируются.
Посмотреть код
Решение
alphabet = {
'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'E',
'Ж': 'ZH', 'З': 'Z', 'И': 'I', 'Й': 'I', 'К': 'K', 'Л': 'L', 'М': 'M',
'Н': 'N', 'О': 'O', 'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U',
'Ф': 'F', 'Х': 'KH', 'Ц': 'TC', 'Ч': 'CH', 'Ш': 'SH', 'Щ': 'SHCH',
'Ы': 'Y', 'Э': 'E', 'Ю': 'IU', 'Я': 'IA', 'Ь': '', 'Ъ': ''
}
with open('transliteration.txt', 'w', encoding='UTF-8') as file_out:
with open('cyrillic.txt', encoding='UTF-8') as file_in:
for string in file_in:
for char in string:
current = char.upper()
if current in alphabet:
if char.isupper():
char = alphabet[current].capitalize()
else:
char = alphabet[current].lower()
else:
char = char
print(char, end='', file=file_out)
Решение
alphabet = {
'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'E',
'Ж': 'ZH', 'З': 'Z', 'И': 'I', 'Й': 'I', 'К': 'K', 'Л': 'L', 'М': 'M',
'Н': 'N', 'О': 'O', 'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U',
'Ф': 'F', 'Х': 'KH', 'Ц': 'TC', 'Ч': 'CH', 'Ш': 'SH', 'Щ': 'SHCH',
'Ы': 'Y', 'Э': 'E', 'Ю': 'IU', 'Я': 'IA', 'Ь': '', 'Ъ': ''
}
data, encoded_data = '', ''
with open("cyrillic.txt", encoding="UTF-8") as file_in:
for string in file_in:
data += string
for char in data:
if char.upper() in alphabet:
encoded_data += alphabet[char.upper()].lower().capitalize() if char == char.upper() else alphabet[char.upper()].lower()
else:
encoded_data += char
with open("transliteration.txt", "w", encoding="UTF-8") as file_out:
print(encoded_data, file=file_out)