• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于python:如何用Python一次性翻译十万条数据

python 搞代码 3年前 (2022-02-20) 48次浏览 已收录 0个评论
文章目录[隐藏]

前段时间, 我想翻译一个文档, 比拟大, 钻研一番, 最初还是只有走上写代码这条路. 我不须要高质量翻译, 机器翻译就能够了, 毋庸置疑, 谷歌的翻译品质是最好的, 或者说是我最称心的. 于是就寻找(Python)翻译库, 一番操作下来都不称心, 其中一个比拟受欢迎, 然而依照惯例(阐明文档)形式装置下来, 调用间接报错, 我晓得这必定是能够解决的, 可能哪里出了点小问题, 毕竟很多人用, 前面如同看见说是版本不对, 要略微指定一下版本. 我没有去尝试, 到当初我也没有用上那个, 因为我本人写了一个 Python翻译库 pygtrans

为什么取这个名字呢? 因为想的好多个名字都被占用了.

含意: Python Google Translate, Python谷歌翻译


基本功能

  • 获取语言反对列表
  • 自动检测语言, 反对批量
  • 文本/HTML 翻译, 反对批量
  • 反对 TTS

Github开源地址: pygtrans

文档地址: 文档

装置

<code class="bash">pip install pygtrans

<code class="bash">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. Translate: 翻译模块
  2. ApiKeyTranslate: 应用谷歌翻译APIKEY进行翻译的模块
  3. TranslateResponse: 翻译的响应模块
  4. LanguageResponse: 获取语言反对列表响应的模块
  5. DetectResponse: 语言检测响应模块
  6. Null: 示意一个失败的对象, 因为有时可能会失败

详情能够查看源码或文档

一些限度

  1. Translate: 暂未发现任何限度, 但这不是官网提供的规范办法, 无奈失去任何保障.
  2. ApiKeyTranslate:

    • 限度批量翻译数量 128 以内, 即一次性只能翻译 128 条句子, 在代码中, 这一个限度曾经容错, 无需思考.
    • 限度翻译整体内容大小 102400 bytes, 即一次性只能翻译 100KB 内容. 在应用 pygtrans 过程中, 只须要留神, 不要让单条句子超过这个 100KB 限度即可.

这两个翻译模块, 都是不须要楼梯的, 不过 ApiKeyTranslate 可能须要 money, 尽管官网提供了试用. 并且因为其限度, 在承受本文题目工作[如何用Python一次性翻译十万条句子]时, 尽管亲测能够胜任, 但还是不迭 Translate 用着刺激, 所以本文不介绍 ApiKeyTranslate, 具体用法看ApiKeyTranslate文档

如何判断一个申请(翻译/调用办法)是否胜利

from pygtrans import Translate, Null

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

个别不判断, 间接应用

应用Translate

# 导包导模块
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)

# 当初就失常了

回到咱们的主题

如何用Python一次性翻译十万条句子?

如何用Python一次性翻译十万条句子?

如何用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 的说法.

最初

  • 我第一次翻译这么多的时候, 认为会被反爬, 没想到所有都十分顺利
  • 当初是能够用的, 亲测很屡次, 未发现问题, 但当前就不晓得了. 如果当前不能用了, 求大家不要骂我, 先谢谢大家了🌹
  • 其余谷歌翻译库(办法), 可能都波及到了tk参数的问题, 这个比拟麻烦, 可能须要常常保护, 而 pygtrans 避开了这个问题
  • 有问题, 求反馈
  • 感觉不错, 求个小星星
  • 如果大家有什么好的想法或倡议, 请只管来

2021年07月25日14时17分54秒

对了, 还有个TTS (文本转语音) 的性能

tts = client.tts("""
我的小鱼你醒了,还意识晚上吗?

昨夜你已经说,愿夜幕永不来临。

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

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

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

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

这里不能放视频, 大家能够看下 这里


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于python:如何用Python一次性翻译十万条数据

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址