自分だけのクイズ作成 - Quipha公開中

【DeepL API】Pythonのクライアントライブラリで本格実装

Python
スポンサーリンク

はじめに

前回の記事では、DeepLの無料のAPIへ登録し、サンプルコードを実装してみました。
今回は、DeepL公式が公開している、Pythonのクライアントライブラリを利用して、実践向けの実装を行っていきます。

他にも私のブログで、Pythonについて解説している記事がありますのでご覧ください。

使用するバージョンなど
  • Windows 11 or macOS Monterey (M1)

2022/04/20 WindowsとMacを使い、最新バージョンで確認しました。

DeepL API Pythonのクライアントライブラリ

前回の記事では、PythonやcurlコマンドでDeepL APIを呼び出し、翻訳結果を取得しました。

DeepL公式でPython向けのクライアントライブラリが公開されています。
これを利用すると、もっと便利に簡単にコーディングができます。

DeepL APIで使えるPythonのクライアントライブラリ
We’re excited to announce the release of our Python client library for the DeepL API.

DeepL APIで使えるPythonのクライアントライブラリを公開しました。プログラミング言語で書かれた、DeepL APIのための初めてのライブラリです。Pythonを扱う開発者に、DeepLを使ったアプリケーションをよりスムーズに構築してもらうことが目的です。

https://www.deepl.com/ja/blog/announcing-python-client-library-for-deepl-api

オープンソースで公開されており、意見や新機能追加のリクエストはGitHubでやり取りできるようになっています。

GitHub - DeepLcom/deepl-python: Python library for the DeepL language translation API.
Python library for the DeepL language translation API. - GitHub - DeepLcom/deepl-python: Python library for the DeepL language translation API.

VS Codeの用意

VS Codeのインストール方法は、以下の記事にまとめましたのでご覧ください。

設定方法は以下を参考にしてください。

ライブラリのインストール

python環境で、pipコマンドでDeepLのクライアントライブラリをインストールすることができます。

pip install --upgrade deepl

Python環境の開発については、個人的にVS CodeでDockerを利用したリモート開発をオススメしています。

実装

認証キー

事前に認証キーを取得する必要があります。
以下の記事を参考にしてください。

初期化

最初に、Translatorオブジェクトを生成します。

import deepl

translator = deepl.Translator("認証キー")

例えばソースコードをGitHubにプッシュすることを考えると、なるべく認証キーをコードに埋め込まないほうが良いでしょう。
OSの環境変数にキーと値(認証キー)を設定しておき、コード上では以下のように認証キーを取得する方が安全かと思います。

import deepl

translator = deepl.Translator(os.getenv("DEEPL_AUTH_KEY"))

どちらの方法でも構いませんが、認証キーは絶対に他人に知られないように注意が必要です。

日本語へ翻訳

英語を日本語へ翻訳してみましょう。
target_langは「JA(日本語)」を指定します。

result = translator.translate_text("This is a pen.", target_lang="JA")
print(result)

実行結果は、以下になります。
正しく翻訳結果を取得することができました。

これはペンです。

スポンサーリンク

ドキュメントの翻訳

例えば、Wordで作成されたファイルを翻訳することができます。
以下のようなファイルを用意しました。

以下のコードで、ドキュメントの翻訳ができます。
引数はファイル名を指定します。

translator.translate_document_from_filepath(
    "translate-test.docx",
    "translate-test-ja.docx",
    target_lang="JA"
)

Wordファイルが新たに作成され、文章は翻訳されていました。

対応しているファイルは以下です。

  • 「docx」- Word ドキュメント
  • 「pptx」- Power Point ドキュメント
  • 「pdf」- PDF
  • 「htm / html」- HTML
  • 「txt」- テキスト

このドキュメントの翻訳機能については、文字数に関係なく最低5万文字が消費される点に注意が必要です。

DeepL meta_title
meta_description

Please note that with every submitted document of type .pptx.docx or .pdf you are billed a minimum of 50’000 characters with the DeepL API plan, no matter how many characters are included in the document.

.pptx、.docx、または.pdfタイプのドキュメントを送信するたびに、ドキュメントに含まれる文字数に関係なく、DeepL APIプランで最低50,000文字が課金されることに注意してください。

https://www.deepl.com/ja/docs-api/translating-documents/

マイページの利用状況を確認すると、しっかりと加算されていました。

無料プランの場合、1ヶ月あたり10ファイルの翻訳もできないので、注意しましょう。

例外を拾う

DeepLライブラリを使用して例外が発生した場合は、DeepLExceptionがスローされます。
以下のようにキャッチすることができます。

from deepl.exceptions import DeepLException

try:
    result = translator.translate_text("This is a pen.", target_lang="XX")
except DeepLException as e:
    print(e)

target_langに存在しない言語を指定しているため、以下のエラーが発生します。

Bad request, message: Value for ‘target_lang’ not supported.

利用状況の確認

利用状況については、マイページからも確認できますが、以下のコードでも確認できます。

# Check account usage
usage = translator.get_usage()
if usage.character.limit_exceeded:
    print("Character limit exceeded.")
else:
    print(f"Character usage: {usage.character}")

Character usage: 50215 of 500000

言語の一覧確認

翻訳元の言語、翻訳先の言語の一覧を確認することができます。

翻訳元の言語の一覧です。

print("Source languages:")
for language in translator.get_source_languages():
    print(f"{language.code} ({language.name})")  # Example: "DE (German)"

Source languages:
BG (Bulgarian)
CS (Czech)
DA (Danish)
DE (German)
EL (Greek)
EN (English)
ES (Spanish)
ET (Estonian)
FI (Finnish)
FR (French)
HU (Hungarian)
IT (Italian)
JA (Japanese)
LT (Lithuanian)
LV (Latvian)
NL (Dutch)
PL (Polish)
PT (Portuguese)
RO (Romanian)
RU (Russian)
SK (Slovak)
SL (Slovenian)
SV (Swedish)
ZH (Chinese)

翻訳先の言語の一覧です。

print("Target languages:")
for language in translator.get_target_languages():
    if language.supports_formality:
        print(f"{language.code} ({language.name}) supports formality")
    else:
        print(f"{language.code} ({language.name})")

Target languages:
BG (Bulgarian)
CS (Czech)
DA (Danish)
DE (German) supports formality
EL (Greek)
EN-GB (English (British))
EN-US (English (American))
ES (Spanish) supports formality
ET (Estonian)
FI (Finnish)
FR (French) supports formality
HU (Hungarian)
IT (Italian) supports formality
JA (Japanese)
LT (Lithuanian)
LV (Latvian)
NL (Dutch) supports formality
PL (Polish) supports formality
PT-BR (Portuguese (Brazilian)) supports formality
PT-PT (Portuguese (European)) supports formality
RO (Romanian)
RU (Russian) supports formality
SK (Slovak)
SL (Slovenian)
SV (Swedish)
ZH (Chinese)

用語集

用語集の登録については、ライブラリは対応していますが、現時点では日本語に対応していないようです。
Web版のDeepLを確認しても日本語がないことが確認できます。
今後に期待ですね。

Pythonコマンドで実行

Pythonコマンドから翻訳を実行することもできます。

python3 -m deepl --auth-key=認証キー text --to=DE "Text to be translated."

Zu übersetzender Text.

Webアプリケーションの作成

別な記事ですが、翻訳ができるWebアプリケーションを作成しました。
DjangoでWebアプリケーションを作成し、DeepLを利用して翻訳機能を実装しました。
良かったら以下の記事もご覧ください。

さいごに

Pythonを使ってDeepL APIを操作する場合は、このライブラリを使用するととても簡単に翻訳を行うことができます。

ぜひ試してみてください。

他にも私のブログで、Pythonについて解説している記事がありますのでご覧ください。

\オススメ/

コメント

タイトルとURLをコピーしました