Программирование

Перевод через Google с помощью Python

Из результатов предыдущего поста, возникла следующая задача: есть набор txt-файлов, каждый из готовых надо перевести. У Google Translate есть собственный API, которым и можно воспользоваться для автоматизации процесса.

В первую очередь необходимо пойти на Google Cloud , создать новый проект, включить Google Translate API, и получить ключ для доступа приложения к облаку. Подробный мануал по этим действиям я описал в статье про перевод с помощью NodeJS. Полученный API стоит вставить в переменную developerKey (см. код ниже)

Кроме того, понадобиться модуль apiclient.discovery, который я установил через pip.

Алгоритм программы прост: она залезает в папку /texts, загружает имена всех txt файлов в директории. После этого в цикле начинаются настоящие чудеса.

Стоит обратить внимание на то, что в минуту можно обрабатывать не более 100 000 знаков, в противном случае программа выпадает с ошибкой (обусловлено особенностями API и ограничениями на серверах Google Cloud), поэтому в коде указана задержка в десять секунд. Если у вас тексты небольшие, то задержку можно сделать меньше.

Полный код:

import json
from apiclient.discovery import build
import os
import time
directory = 'texts/'
files = os.listdir(directory) 
print("Найдено ", len(files), " файлов")
i=0
while i < len(files):
     try:
          f = open(directory+files[i], encoding='utf-8')
          query=f.read()
          f.close
          target_language = 'ru'
          service = build('translate','v2',developerKey='YOUR_DEVELOPER_KEY')
          collection = service.translations()
          request = collection.list(q=query, target=target_language)
          response = request.execute()
          response_json = json.dumps(response)
          ascii_translation = ((response['translations'][0])['translatedText']).encode('utf-8').decode('utf-8', 'ignore')
          l = open(files[i], 'w', encoding='utf-8')
          l.write(ascii_translation)
          l.close
          l.flush()
          print("Записан", i+1 , " файл " , directory, 'ru/', files[i])
          i = i+1
          time.sleep(10)
     except:
          print("Ошибка при ", files[i])
          i=i+1

Для ознакомления с похожим функционалом на JS, смотрите эту статью.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Срок проверки reCAPTCHA истек. Перезагрузите страницу.