Как перевести 100 000 фрагментов данных одновременно с помощью Python

Python
Как перевести 100 000 фрагментов данных одновременно с помощью Python

Некоторое время назад я хотел перевести документ. Он был относительно большим, и я провел небольшое исследование. В конце концов мне пришлось встать на путь написания кода. Мне не нужен качественный перевод. отлично. Нет сомнений, что качество перевода Google является лучшим. , или я больше всего доволен. Поэтому я искал библиотеку перевода (Python) и не был удовлетворен работой. Один из них был более популярным, но это устанавливался по общепринятому (документальному) методу, а звонок прямо сообщал об ошибке, я знаю Это точно решаемо, может быть небольшая проблема, ведь многие им пользуются, и вроде не та версия позже, поэтому мне нужно немного указать версию, я не пробовал и еще не использовал, потому что я сам написал библиотеку перевода Pythonpygtrans

Почему вы выбрали это имя?Потому что многие имена, о которых я думал, были заняты.

значение:Python Google Translate, Python Google Переводчик


основные навыки

  • Получить список поддерживаемых языков
  • Автоматическое определение языка, пакетная поддержка
  • Перевод текста/HTML, пакетная поддержка
  • Поддержка ТТС

Адрес с открытым исходным кодом Github:pygtrans

Адрес документа:Документация

Установить

pip install pygtrans

или

pip install pygtrans -i https://pypi.org/simple

добавить при необходимости--upgradeпараметр

Полностью понять

Быстрый старт

from pygtrans import Translate

client = Translate()

# 检测语言
text = client.detect('Answer the question.')
assert text.language == 'en'

# 翻译句子
text = client.translate('Look at these pictures and answer the questions.')
assert text.translatedText == '看这些图片,回答问题。'

# 批量翻译
texts = client.translate([
    'Good morning. What can I do for you?',
    'Read aloud and underline the sentences about booking a flight.',
    'May I have your name and telephone number?'
])
assert [text.translatedText for text in texts] == [
    '早上好。我能为你做什么?', 
    '大声朗读并在有关预订航班的句子下划线。', 
    '可以给我你的名字和电话号码吗?'
]

# 翻译到日语
text = client.translate('请多多指教', target='ja')
assert text.translatedText == 'お知らせ下さい'

# 翻译到韩语
text = client.translate('请多多指教', target='ko')
assert text.translatedText == '조언 부탁드립니다'

# 文本到语音
tts = client.tts('やめて', target='ja')
open('やめて.mp3', 'wb').write(tts)

pygtransв целом6модули

  1. Перевод: модуль перевода
  2. ApiKeyTranslate: использоватьGoogle Translate APIKEYмодуль для перевода
  3. TranslateResponse: модуль перевода перевода
  4. LanguageResponse: модуль для получения ответа списка языковой поддержки
  5. DetectResponse: модуль ответа на определение языка
  6. Null: представляет сбойный объект, так как иногда он может дать сбой.

Подробности можно посмотретьисходный кодилиДокументация

некоторые ограничения

  1. Перевод: Ограничений не обнаружено, но это не стандартный способ, предоставляемый официальным сайтом, и никаких гарантий получить нельзя.
  2. ApiKeyTranslate:
    • Ограничьте количество пакетных переводов128внутри, т.е. только разовый перевод128предложение, в коде это ограничение уже является отказоустойчивым и не требует учета.
    • Ограничить общий размер содержимого перевода102400байты, которые могут быть переведены только за один раз100KBСодержание.ИспользуетсяpygtransВо время процесса просто будьте осторожны, чтобы ни одно предложение не превышало это значение.100KBПросто ограничьте.

Эти два модуля перевода не требуют лестницы, ноApiKeyTranslateможет понадобитьсяmoney, хотя официальнопроверять, и из-за его ограничений, принимая этотитульная задача[Как использовать Python для перевода 100 000 предложений за раз], хотя личный тест может быть компетентным, но все же не таким хорошим, какTranslateОн используется для стимуляции, поэтому эта статья не знакомитApiKeyTranslate, см. конкретное использованиеДокументация ApiKeyTranslate

Как узнать, успешно ли выполнен запрос (метод перевода/вызова)

from pygtrans import Translate, Null

client = Translate()
text = client.translate('Hello')
if isinstance(text, Null):
    print("翻译失败")
    # 失败信息(原因)
    print(text.msg)
else:
    print("翻译成功")

Вообще не судите, пользуйтесь напрямую

Использовать Перевод

# 导包导模块
from pygtrans import Translate

# 创建翻译对象
"""
:param target: str: (可选) 目标语言, 默认: ``zh-CN``, :doc:`查看完整列表 <target>`
:param source: str: (可选) 源语言, 默认: ``auto`` (自动检测), :doc:`查看完整列表 <source>`
:param _format: str: (可选) 文本格式, ``text`` | ``html``, 默认: ``html``
:param user_agent: str: (可选) 用户代理, 这个参数很重要, 不设置或错误设置非常容易触发 **429 Too Many Requests** 错误,
    默认: ``GoogleTranslate/6.18.0.06.376053713 (Linux; U; Android 11; GM1900)``, 所以用户可以不用提供.
    这个默认 ``User-Agent`` 很稳定, 暂时未发现 ``429 错误``, 如果出现 ``429``, 建议 **模仿默认 进行构造**,
    或者进行 `反馈 <https://github.com/foyoux/pygtrans/issues/new>`_
    最新版中, 已改为了随机.
:param domain: str: (可选) 域名 ``google.com`` 及其可用平行域名 (如: ``google.cn``), 默认: ``google.cn``
:param proxies: (可选) eg: proxies = {'http': 'http://localhost:10809', 'https': 'http://localhost:10809'}
"""
client = Translate()

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

  1. Перевести одно предложение
"""翻译文本, 支持批量, 支持 html
:param q: str: 字符串或字符串列表
:param target: str: (可选)  目标语言, 默认: ``self.target``, :doc:`查看支持列表 <target>`
:param source: str: (可选)  源语言, 默认: ``self.source``, :doc:`查看支持列表 <source>`
:param _format: str: (可选) 文本格式, ``text`` | ``html``, 默认: ``self.format``
:return: 成功则返回: :class:`pygtrans.TranslateResponse.TranslateResponse` 对象,
    或 :class:`pygtrans.TranslateResponse.TranslateResponse` 对象列表, 这取决于 `参数: q` 是字符串还是字符串列表.
    失败则返回 :class:`pygtrans.Null.Null` 对象
"""
text = client.translate("google")
assert text.translatedText == '谷歌'
  1. определить язык
"""语言检测
:param q: 需要检测的内容, 不支持批量, 如需批量, 请参阅: :func:`translate_and_detect`.
:return: 成功则返回 :class:`pygtrans.DetectResponse.DetectResponse` 对象,
    失败则返回 :class:`pygtrans.Null.Null` 对象
"""
text = client.detect('你好')
assert text.language == 'zh-CN'
  1. Нет метода пакетного обнаружения, только пакетный метод обнаружения и перевода
"""检测并翻译
与 :class:`translate` 相同, 
区别是 ``TranslateResponse`` 对象的 ``detectedSourceLanguage`` 属性可用
"""
text = client.translate_and_detect('谷歌翻译')
assert text.detectedSourceLanguage == 'zh-CN'
texts = client.translate_and_detect(['谷歌', 'Translate'])
assert texts[0].detectedSourceLanguage == 'zh-CN'
assert texts[1].detectedSourceLanguage == 'en'
  1. Перевести с китайского на английский
text = client.translate('中国', target='en')
assert text.translatedText == 'China'
  1. Перевести в текстовом формате
# 默认是以html格式进行翻译的, 要以文本格式翻译, 指定 `_format='txt'` 即可
text = client.translate("""<!DOCTYPE html>
<html lang=en>
  <meta charset=utf-8>
  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
""", _format='txt')

print(text)
# TranslateResponse(translatedText='<!DOCTYPE html>\n<html 语言=zh>\n  <元字符集=utf-8>\n  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">', detectedSourceLanguage=None, model=None)

# 我们注意到, 不该翻译的也被翻译了, 如果使用html格式翻译, 就可以解决这个问题
  1. Перевести в html формат
# 默认是以html格式进行翻译的, 要以文本格式翻译, 指定 `_format='txt'` 即可
text = client.translate("""<!DOCTYPE html>
<html lang=en>
  <meta charset=utf-8>
  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
""")

print(text)
# TranslateResponse(translatedText='<!DOCTYPE html>\n<html lang=en>\n  <meta charset=utf-8>\n  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">', detectedSourceLanguage=None, model=None)

# 现在就正常了

вернуться к нашей теме

Как перевести 100 000 предложений одновременно с помощью Python?

Как перевести 100 000 предложений одновременно с помощью Python?

Как перевести 100 000 предложений одновременно с помощью Python?

Предполагая список строкwords, len(words)>100000

texts = client.translate(words)
# 大概等待20s左右, 执行完毕
len(texts) == len(words)
for i in range(10):
	print(words[i][:20], texts[i][:10])

Я не знаю, возможны ли другие или нет, но в любом случае, я думаю, что это довольно круто, ведь часто есть ограничения.5000утверждение.

В конце концов

  • Когда я так много переводила в первый раз, я думала, что все будет наоборот, но я не ожидала, что все пройдет очень гладко.
  • Его можно использовать сейчас.Я проверял его много раз и не обнаружил никаких проблем, но я не узнаю об этом в будущем.Если его нельзя будет использовать в будущем,пожалуйста, не ругай меня, спасибо всем заранее 🌹
  • Могут быть задействованы другие библиотеки перевода Google (методы).tkПроблема параметров, это более хлопотно,возможныйтребует частого обслуживания иpygtransизбежать этой проблемы
  • есть проблема, спросиОбратная связь
  • чувствуй себя хорошо, спросималенькие звезды
  • Если у вас есть хорошие идеи или предложения, пожалуйста,прийти, несмотря

19 июля 2021 г. 18:00:50

да, есть ещеTTS(преобразование текста в речь) функциональность

tts = client.tts("""
我的小鱼你醒了,还认识早晨吗?

昨夜你曾经说,愿夜幕永不降临。

你的香腮边轻轻滑落的,是你的泪,还是我的泪?

初吻吻别的那个季节,不是已经哭过了嘛?

我的指尖还记忆着,你慌乱的心跳。

温柔的体香里,那一绺长发飘飘。
""")
open('我的小鱼你醒了.mp3', 'wb').write(tts)

Не могу сюда вставить видео, можно посмотретьздесь