Перевод текста с помощью 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! (после возможных повторных попыток)