Перевод текста с помощью Python: доступные инструменты и библиотеки

Раздел: Библиотеки -> Обработка естественного языка

Средства перевода текста в Python

Библиотека googletrans: простой доступ к Google Translate

Как перевести фразу или целый документ без регистрации и API-ключа?

Библиотека googletrans предоставляет неофициальный интерфейс к сервису Google Translate. Она не требует ключа, проста в установке и использовании. Основной класс – Translator, его метод translate().

pip install googletrans==4.0.0-rc1

библиотека nlp python (библиотека nlp в python)

Пример базового перевода:

from googletrans import Translator

translator = Translator()
result = translator.translate('Привет, мир!', dest='en')
print(result.text)  # Hello, World!

библиотека spacy python (библиотека spacy в python)

Можно указать исходный язык (src) или оставить автоопределение.

Типичные ошибки: AttributeError: 'NoneType' object has no attribute 'text' – возникает при превышении лимита запросов или блокировке Google. Решение – добавить задержку между запросами или использовать библиотеку deep-translator с другим провайдером.

Вариант 1: deep-translator – множество провайдеров в одной библиотеке

Как перевести текст, если googletrans перестал работать из-за ограничений?

deep-translator поддерживает Google, Microsoft, Yandex, LibreTranslate, Deepl, Pons и другие. Для каждого провайдера вызывается отдельный класс. Например, для Google Translate:

from deep_translator import GoogleTranslator

translated = GoogleTranslator(source='auto', target='en').translate('Привет, мир!')
print(translated)  # Hello world!

Python текст перевод (перевод текста с помощью python)

Для перевода списка предложений используется аргумент batch_size.

Проблема: некоторые провайдеры могут требовать API-ключ (Microsoft, Deepl). Для Google – лимит ~3000 символов за один запрос, но можно обойти разбивкой текста на части.

Вариант 2: Модели машинного перевода из Hugging Face (transformers)

Как выполнять перевод локально, без обращения к внешним серверам?

Библиотека transformers позволяет загружать предобученные модели, например Helsinki-NLP/opus-mt-ru-en. Пример:

from transformers import pipeline

pipe = pipeline("translation", model="Helsinki-NLP/opus-mt-ru-en")
result = pipe("Привет, мир!")
print(result[0]['translation_text'])  # Hello, world!

определить язык слова python (определение языка слова в python)

Требуется загрузка модели (может занимать время и много памяти). Для разных языков – разные модели.

Проблемы: модели большие (гигабайты), не все пары языков доступны. Качество может уступать облачным сервисам. Для русского -> английский подходит модель opus-mt-ru-en, для английского -> русский – opus-mt-en-ru.

Вариант 3: LibreTranslate – self-hosted альтернатива Google

Как получить бесплатный и конфиденциальный перевод без лимитов?

LibreTranslate – это сервер на базе Argos Translate. Можно запустить локально через Docker или использовать публичное API. Библиотека libretranslatepy:

pip install libretranslatepy

стоп слова python (стоп-слова в python)

from libretranslatepy import LibreTranslateAPI

lt = LibreTranslateAPI("https://libretranslate.com")
translation = lt.translate("Привет, мир", "ru", "en")
print(translation)  # Hello world

Для локального сервера нужен Docker: docker run -d -p 5000:5000 libretranslate/libretranslate.

Типичная ошибка: ConnectionError – не запущен сервер или выбран неверный URL. При использовании публичного API могут быть ограничения по количеству запросов.

Вариант 4: Официальные API (Yandex.Translate, Microsoft Translator, Google Cloud Translation)

Как обеспечить стабильный перевод с высоким качеством для коммерческого проекта?

Требуется регистрация и получение API-ключа. Пример с Yandex.Translate (через библиотеку yandex-translater):

pip install yandex-translater
from yandex_translater import YandexTranslater

translater = YandexTranslater(api_key='ваш_ключ')
result = translater.translate('Привет, мир!', lang='en')
print(result)  # Hello, World!

Аналогично для Google Cloud Translation используется клиентская библиотека google-cloud-translate.

Проблемы: необходимость оплаты, сложность настройки аутентификации. Ключи нельзя публиковать в открытом коде. При превышении квоты приходят ошибки 403 или 429.

Вариант 5: Библиотека translate – минималистичный клиент для Google Translate

Как сделать перевод в одну строку без лишних зависимостей?

Библиотека translate (PyPI: translate) представляет собой обёртку над Google Translate, похожую на googletrans, но с другим API:

pip install translate
from translate import Translator

translator = Translator(from_lang='ru', to_lang='en')
translation = translator.translate('Привет, мир!')
print(translation)  # Hello, world!

Поддерживает также перевод целых файлов через translate_file.

Недостатки: те же ограничения, что и у googletrans – блокировка при большом количестве запросов. Библиотека менее популярна, обновляется редко.

Расширенные примеры использования

1. Пакетный перевод большого текста с googletrans и обработка ошибок

Предположим, нужно перевести статью из 10000 символов. Разбивка на части и повторные попытки:

Пример
import time
from googletrans import Translator

translator = Translator()
text = "Длинный текст... " * 1000  # имитация

# Разбить на части по 4000 символов (без разрыва слов)
def split_text(text, max_len=4000):
    words = text.split()
    chunks, current_chunk = [], []
    current_len = 0
    for word in words:
        if current_len + len(word) + 1 > max_len:
            chunks.append(' '.join(current_chunk))
            current_chunk = [word]
            current_len = len(word)
        else:
            current_chunk.append(word)
            current_len += len(word) + 1
    if current_chunk:
        chunks.append(' '.join(current_chunk))
    return chunks

chunks = split_text(text, 4000)
translated_chunks = []
for chunk in chunks:
    while True:
        try:
            result = translator.translate(chunk, dest='en')
            translated_chunks.append(result.text)
            break
        except Exception as e:
            print(f"Ошибка: {e}. Пауза 5 секунд...")
            time.sleep(5)
full_translation = ' '.join(translated_chunks)
Результат: строка с переводом всей статьи, без потери фрагментов.

2. Асинхронный перевод с aiohttp и Google Translate (через неофициальное API)

Для ускорения при большом количестве запросов используется asyncio. Пример с библиотекой aiohttp и прямым обращением к Google Translate API (неофициальные эндпоинты):

Пример
import asyncio
import aiohttp
import json

async def translate_text(session, text, target='en', source='ru'):
    url = "https://translate.googleapis.com/translate_a/single"
    params = {
        'client': 'gtx',
        'sl': source,
        'tl': target,
        'dt': 't',
        'q': text
    }
    async with session.get(url, params=params) as response:
        data = await response.json()
        # data имеет формат [[[translated, ...], ...]]
        translated = ''.join([part[0] for part in data[0]])
        return translated

async def main():
    texts = ["Привет", "Как дела", "Пока"]
    async with aiohttp.ClientSession() as session:
        tasks = [translate_text(session, t) for t in texts]
        results = await asyncio.gather(*tasks)
        for original, translated in zip(texts, results):
            print(f"{original} -> {translated}")

asyncio.run(main())
Привет -> Hello
Как дела -> How are you
Пока -> Bye

Примечание: прямое обращение к API Google может быть заблокировано. Для production лучше использовать официальный SDK.

3. Использование deep-translator с разными провайдерами и настройка прокси

Библиотека deep-translator позволяет переключиться между провайдерами в рантайме. Пример с поддержкой прокси для Google:

Пример
from deep_translator import GoogleTranslator
import os

# Установка прокси (если необходимо)
os.environ['HTTP_PROXY'] = 'http://proxy.example.com:8080'
os.environ['HTTPS_PROXY'] = 'http://proxy.example.com:8080'

translator = GoogleTranslator(source='auto', target='de')
result = translator.translate('Hello world')
print(result)  # Hallo Welt

Для Microsoft Translator необходим ключ:

Пример
from deep_translator import MicrosoftTranslator

translator = MicrosoftTranslator(api_key='ваш_ключ', source='en', target='fr')
result = translator.translate('How are you?')
print(result)  # Comment allez-vous?

4. Перевод с сохранением форматирования (Markdown, HTML)

При переводе документов часто требуется сохранить разметку. Пример с использованием deep-translator и заменой временных плейсхолдеров:

Пример
import re
from deep_translator import GoogleTranslator

def preserve_tags(text, target_lang='en'):
    """Заменяет HTML-теги на плейсхолдеры, переводит, затем восстанавливает."""
    tags = re.findall(r'<[^>]+>', text)
    placeholder_map = {}
    for i, tag in enumerate(tags):
        ph = f'__TAG{i}__'
        placeholder_map[ph] = tag
        text = text.replace(tag, ph, 1)
    translator = GoogleTranslator(source='auto', target=target_lang)
    translated = translator.translate(text)
    for ph, tag in placeholder_map.items():
        translated = translated.replace(ph, tag)
    return translated

text = "<h1>Hello</h1><p>World</p>"
print(preserve_tags(text))
# <h1>Привет</h1><p>Мир</p>
Сохранились HTML-теги, а содержимое переведено.

5. Обработка исключений и повторные попытки с экспоненциальной задержкой (retry)

Надёжный переводчик с библиотекой tenacity:

Пример
pip install tenacity
Пример
from tenacity import retry, stop_after_attempt, wait_exponential
from deep_translator import GoogleTranslator
import random

@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=2, min=2, max=10))
def safe_translate(text, target='en'):
    # имитация случайного сбоя
    if random.random() < 0.3:
        raise ConnectionError("Simulated network error")
    translator = GoogleTranslator(source='auto', target=target)
    return translator.translate(text)

print(safe_translate('Привет, мир!'))
Hello, World! (после возможных повторных попыток)

Перевод текста с помощью Python - comments

En
Python текст перевод (python)