Как сделать транслит в python

Добавил пользователь Евгений Кузнецов
Обновлено: 10.09.2024

Функция translate() в Python возвращает новую строку, в которой каждый символ в строке заменяется с использованием данной таблицы перевода.

Таблица перевода должна быть отображением порядковых номеров Unicode в порядковые номера Unicode, строки или None.

Мы можем создать таблицу перевода с помощью функции maketrans() или предоставить ее вручную с помощью сопоставления словаря.

Мы можем передать в функцию maketrans() максимум три строковых аргумента:

  • Если есть только один аргумент, это должен быть словарь, отображающий порядковые номера (целые числа) или символы Unicode в порядковые номера Unicode, строки или None.
  • Если есть два аргумента, они должны быть строками одинаковой длины, и в результирующем словаре каждый символ в x будет сопоставлен с символом в той же позиции в y.
  • Если есть третий аргумент, это должна быть строка, символы которой в результате будут сопоставлены с None.

Примеры

Давайте посмотрим на несколько примеров использования функции string translate().

maketrans() с одним аргументом

maketrans() с двумя аргументами

Второй перевод имеет два строковых аргумента одинаковой длины, и каждый символ в первой строке сопоставляется с соответствующим индексным символом во второй строке. Таким образом, A будет заменен на a, B будет заменен на b, C будет заменен на c, а D будет заменен на d в строке результата.

Если две строки аргументов имеют разную длину, возникнет ошибка.

Ошибка: ValueError: первые два аргумента maketrans должны иметь одинаковую длину

maketrans() с тремя аргументами

Если мы предоставим более трех аргументов, возникает ошибка.

Ошибка: TypeError: maketrans() принимает не более 3 аргументов (4 задано)

С ручным отображением


Если вы не прятались под скалой, вы, вероятно, много раз использовали Google Translate. Всякий раз, когда вы пытаетесь перевести слово или предложение с определенного языка на другой, именно API Google Translate предоставляет вам желаемые результаты в фоновом режиме. Хотя вы можете переводить что угодно, просто перейдя на веб-страницу Google Translate, вы также можете интегрировать Google Translate API в свои веб-приложения или программы для ПК. Самое лучшее в API - это то, что он чрезвычайно прост в настройке и использовании.

На самом деле вы можете многое сделать с помощью Google Translate API, начиная от определения языков и заканчивая простым переводом текста, настройкой исходного и целевого языков и переводом целых списков текстовых фраз. В этой статье вы узнаете, как работать с Google Translate API на языке программирования Python.

Установка Google Translate API

Прежде чем вы сможете работать с Google Translate API в Python, вам нужно будет установить его. Существует два разных способа установки API. Первый способ прост. Просто зайдите в терминал и используйте pip для установки API, как и для любой другой библиотеки Python. Для этого введите в своем терминале следующую команду:

Нажмите Enter и модуль Python для Google Translate API будет установлен в вашей системе.

Если вы установили дистрибутив Python для Anaconda, вы можете установить API с помощью Anaconda Prompt. В этом конкретном методе вы замените в приведенной выше команде pip на conda , как показано в следующем фрагменте кода:

Теперь, когда вы установили API, мы увидим его в действии с помощью нескольких примеров.

Список поддерживаемых языков

Google Translate API поддерживает множество языков. Чтобы вывести список всех поддерживаемых языков, запустите следующий скрипт:

В приведенном выше примере вы используете ключевое слово import для импорта модуля googletrans . Впоследствии вы можете перечислить все названия языков, напечатав атрибут LANGUAGES модуля googletrans .

При выполнении вышеприведенный фрагмент кода перечислит имена всех поддерживаемых языков вместе с их сокращенной записью. Вот как будет выглядеть вывод:

Основное использование

Основное использование Google Translate API - это, конечно, перевод слов или предложений с одного языка на другой. Для этого мы должны импортировать класс Translator из модуля googletrans .

Далее вы должны создать объект класса Translator .

Как только объект класса Translator создан, вы передадите текст на исходном языке в качестве параметра методу translate() объекта класса Translator() , как показано ниже:

В приведенном выше сценарии мы передаем финский текст методу translate() .

Метод translate() возвращает объект, содержащий информацию о переводе текста, источника и назначения языков и произношения текста. По умолчанию метод translate() возвращает английский перевод текста, переданного ему. В нашем случае объект, возвращаемый методом translate() , сохраняется в переменной result .

Объект, возвращаемый методом translate() , имеет следующие атрибуты:

Давайте напечатаем все вышеперечисленные атрибуты и посмотрим, что мы получим

Выходные данные показывают, что исходный язык - финский (fi), а язык назначения - английский (en). Переведенное предложение можно распечатать через атрибут text .

В приведенном выше примере мы не указали исходный язык. Поэтому Google Translate API пытается определить исходный язык. Аналогично, мы также не указали ни одного языка назначения, и поэтому API перевел исходный язык на язык по умолчанию, английский. Но что, если вы хотите указать исходный и целевой языки?

Указание исходного и целевого языков

На самом деле, очень легко указать язык назначения и исходный язык в Google Translate API. Вот код, который вы будете использовать для передачи только исходного языка:

Чтобы добавить только целевой язык, вы должны добавить атрибут dest , за которым следует код языка:

Вы также можете передать исходный и целевой языки одновременно:

Давайте теперь переведем финское предложение на французский, а затем напечатаем исходный и целевой языки, а также переведенный текст. На этот раз мы укажем исходный и целевой языки.

Приведенный выше фрагмент кода даст следующий результат.

Перевод списка фраз

Также можно перевести список текстовых фраз с помощью Google Translate API. Основной процесс такой же, как описано выше. Вам просто нужно передать список, содержащий фразы, в качестве параметра метода translate() . Это полезно для того, чтобы пакет фраз переводился отдельно, но все в одном вызове API.

Давайте создадим список строк, содержащих некоторые фразы из французского языка.

Теперь пришло время вызвать метод translate() и передать в качестве параметров список, исходный язык и язык назначения.

В приведенном выше сценарии исходный язык - французский, а язык назначения - суахили.

Метод translate() возвращает список объектов, если вы передаете список фраз к нему. Каждый объект в списке, возвращаемый методом translate() , соответствует каждой фразе в списке ввода, который должен быть переведен. Лучший способ найти перевод каждой входной фразы в списке - это перебрать список выходных объектов. Затем вы можете использовать text , origin , src и другие атрибуты отдельных объектов, чтобы увидеть перевод отдельных фраз в списке ввода.

В приведенном ниже сценарии мы перебираем список объектов, возвращаемых методом translate() , а затем печатаем источник и переведенный текст:

Следующий результат будет отображаться на экране.

Перевод текстовых документов

Вы также можете переводить текстовые документы через Google Translate API. Все, что вам нужно сделать, это прочитать текстовый файл в Python, используя метод open , прочитать текст и передать его в метод translate() .

Далее вы можете использовать метод f.read() для чтения содержимого файла. Содержимое файла может быть сохранено в любой переменной. В нашем случае имя переменной будет contents .

Мы также напечатаем переменную contents , чтобы проверить, правильно ли Python читает текстовый файл:

Вот вывод содержимого файла:

Убедитесь, что у вас есть вышеуказанный контент в вашем текстовом файле, если вы хотите следовать нашему примеру.

Мы убедились, что Python обращается к текстовому файлу и читает его. Теперь мы переведем результат, импортировав тот же старый класс Translate , что и раньше.

Следующим шагом является передача переменной contents , содержащей входной текст, в функцию translate() . Наконец, напечатайте атрибут text объекта, возвращенного методом translate() , и вы получите переведенную строку.

Вывод должен выглядеть следующим образом:

В приведенном выше примере мы использовали менеджер контекста with для автоматического открытия и закрытия потока записи. Во-вторых, мы открыли файл в режиме записи. Наконец, мы использовали метод write() для записи переведенной строки в новый файл.

Вывод

Google Translate - это инструмент с API, который помогает вам выполнять множество различных функций, связанных с переводом. Мы только поцарапали поверхность с приведенными выше примерами. Вам предлагается практиковать API, а также изучать и понимать, как использовать его в реальных приложениях.

Загрузка. Пожалуйста,
подождите.

Репутация: 7
Всего: 58

Репутация: 3
Всего: 36

Цитата

При помощи pytils можно сделать транслитерацию:

>>> print pytils.translit.translify(u"Проверка связи")
'Proverka svyazi'
>>> pytils.translit.detranslify("Proverka svyazi")
u'Проверка связи'

В translify вывод - str, а не unicode. В detranslify вход может быть как unicode, так и str.

И сделать строку для URL (удаляются лишние символы, пробелы заменяются на дефисы):

Репутация: 7
Всего: 58

Репутация: 10
Всего: 97

import sys
from pytils.translit import translify

Далее пишем скрипт для любимой оболочки ;)

1. Установить пакет python-setuptools.
2.

Репутация: 7
Всего: 58

Репутация: 3
Всего: 36

Цитата(GrayCardinal @ 24.7.2009, 21:42 )
Я в питоне ни в зуб ногой. Ты не мог бы готовый скрипт вывалить ?

так либо ты не GrayCardinal, либо я что-то пропустил, т.к. нак портале по питону я часто твои посты читаю.

Цитата(GrayCardinal @ 25.7.2009, 15:00 )
Я не правильно выразился. Мне файлы надо переименовать в транслит. smile


тебе нужно перекодировать только названия у файлов или и содержимое файлов?
рекурсивно в подкаталогах или только в текущем каталоге?

Репутация: 28
Всего: 317

надо конечно тут всякие тесты добавить - что делать если напр. файл - это каталог,
это уже оставим "как упражнение читателю", сам допендривай ;-), с мозгами у тебя нет напряжёнки.

Репутация: 7
Всего: 58

pythonwin,
Кто-то под меня косит :( )))
Названия файлов (без содержимого), названия каталогов, рекурсивно.

Репутация: 28
Всего: 317

  • попытка нырнуть
  • генерим список файлов
  • скармливаем его новому одноимённому процессу
  • по истечении возвращаемся наверьх

Репутация: 10
Всего: 97

Цитата(bilbobagginz @ 25.7.2009, 14:45 )
посмотри мануал os.path, там есть несколько тестов.

bilbobagginz, да можно и без питона прямо на бэше, имея программу, которая делает транслитерацию имён.

Репутация: 3
Всего: 36

Цитата(GrayCardinal @ 25.7.2009, 16:39 )
Кто-то под меня косит :( )))

Репутация: 7
Всего: 58

  • Конкретные вопросы о конкретном ПО. В таких вопросах желательно привести точные данные о программе: версия программы, версия ОС, версия ядра, и проблему в форме: сделал Х, хотел получить Y, а получил Z.
  • Неконкретные вопросы о выборе ПО
  • Обзоры - как дополнение в ветку Обзоры
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).

В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.

[ Время генерации скрипта: 0.1332 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Метод maketrans() string возвращает таблицу сопоставления для перевода, используемую для метода translate().

Проще говоря, метод - это статический метод, который создает взаимно однозначное отображение символа на его перевод/замену.

Он создает представление Unicode для каждого символа для перевода.

Это сопоставление перевода затем используется для замены символа на его сопоставленный символ при использовании в методе translate().

Здесь y и z - необязательные аргументы.

Параметры строки

Метод в Python принимает 3 параметра:

  • x - если указан только один аргумент, это должен быть словарь. Он должен содержать преобразование 1 к 1 одной символьной строки или номер Unicode (97 для ‘a’) на ее перевод.
  • y - если переданы два аргумента, это должны быть две строки одинаковой длины. Каждый символ в первой строке является заменой соответствующего индекса во второй строке.
  • z - если переданы три аргумента, каждый символ в третьем аргументе отображается в None.

Возвращаемое значение

Модуль возвращает таблицу перевода с отображением 1 к 1 порядкового номера Unicode в его перевод/замену.

Пример 1: Таблица перевода с использованием словаря

Здесь определяется словарь dict . Он содержит отображение символов a, b и c на 123, 456 и 789 соответственно.

Функция создает отображение порядкового номера Unicode символа в его соответствующий перевод.

Итак, 97 (‘a’) отображается в ‘123’, 98 ‘b’ в 456 и 99 ‘c’ в 789. Это может быть продемонстрировано на выходе обоих словарей.

Кроме того, если в словаре отображаются два или более символа, возникает исключение.

Пример 2: Таблица перевода с использованием двух строк

Здесь сначала определяются две строки равной длины abc и def. И создается соответствующий перевод.

Печать только первого перевода дает соответствие 1 к 1 порядковому номеру каждого символа в Unicode в firstString и тому же индексированному символу на secondString .

В этом случае 97 (‘a’) отображается в 100 (‘d’), 98 (‘b’) в 101 (‘e’) и 99 (‘c’) в 102 (‘f’).

При попытке создать таблицу перевода для строк неравной длины возникает исключение ValueError, указывающее, что строки должны иметь одинаковую длину.

Пример 3: Трансляционная таблица со съемной строкой

Здесь сначала создается сопоставление между двумя строками firstString и secondString .

Затем третий аргумент thirdString сбрасывает отображение каждого символа в нем на None, а также создает новое отображение для несуществующих символов.

В этом случае thirdString сбрасывает отображение 97 (‘a’) и 98 (‘b’) в None, а также создает новое отображение для 100 (‘d’), отображаемое в None.

Метод string translate() возвращает строку, в которой каждый символ сопоставлен с соответствующим символом в таблице перевода.

Метод в Python использует таблицу перевода для замены/перевода символов в данной строке в соответствии с таблицей сопоставления.

Таблица трансляции создается статическим методом maketrans().

Параметры

Метод принимает единственный параметр:

  • table - таблица трансляции, содержащая отображение между двумя символами; обычно создается maketrans().

Возвращаемое значение

Команда возвращает строку, в которой каждый символ сопоставляется с соответствующим символом в соответствии с таблицей перевода.

Пример 1: Перевод и отображение с использованием таблицы перевода

Но строка удаления thirdString сбрасывает сопоставление на a, а b на None.

Итак, когда строка переводится с помощью translate(), a и b удаляются, а c заменяется i, выводя idef.

Пример 2: с таблицей ручного перевода

Здесь мы не создаем таблицу перевода из maketrans(), а вручную создаем перевод словаря сопоставления.

Затем этот перевод используется для перевода строки, чтобы получить тот же результат, что и в предыдущем примере.

Читайте также: