DeepL翻訳をPythonから使う(第1回)

この記事ではDeepL翻訳のAPIの使い方を第1回、第2回と分けて、文字列の翻訳とファイル翻訳についてご紹介します。
※PythonとLinuxの初歩的な知識を前提としています。

本家のマニュアルもあわせてご覧ください。
https://www.deepl.com/en/docs-api

Pythonは3.9を使用しています。
APIの仕様は2022年7月現在のものです。ご承知おきください。
APIを使うためには、ユーザー登録してアクセスキー(auth_key)を
取得する必要があります。

この記事では [authKey] と表記しますので、ご自分のアクセスキーに置き換えてください。
後で登場する文書ID および 文書キーの文字列も [documentID] [documentKey] と表記します。

タグ付き文字列の翻訳

まずは文字列の翻訳です。
xmlタグ(htmlタグ)の付いた日本語を英語(米)に翻訳します。

マニュアルのコード例は、HTTP Request のフォーマットと、それをLinuxの
定番コマンドツールである curl にしたものの2つの形式が記載されています。
手軽に試すことのできる curl の方を参考に見て行きます。

日本語文字列「例文:<br /><span style=”font-size:1.2em”>こんにちは、世界</span>
を英語(米)に翻訳したい場合は次のようになります:

$ src='例文:<br /><span style="font-size:1.2em">こんにちは、世界</span>'
$ auth_key=[authKey]
$ curl https://api.deepl.com/v2/translate \
$ -d auth_key=${auth_key} \
$ -d text=${src} \
$ -d target_lang=en-us \
$ -d tag_handling=xml

 

このurlは有料版のものです。無料版のurlはマニュアルをご参照ください。
xmlタグを扱うので、リクエストではtag_handlingの指定もしています。
原言語は指定していませんが、この場合は自動検出されます。
この記事では実行結果は省略します。是非実際に確認しながら読み進めてください。
これをPythonで書くとrequests.post() を使って次のようになります:
(requests がなければインストールしてください)

import requests
import json

def get_key():
    return open(‘key.txt’).read().rstrip()

def translate_xml(src):
    ”’
    xmlタグ付き文字列の翻訳
    curlコマンドをpythonで書く
    ”’
    url = ‘https://api.deepl.com/v2/translate’
    headers = dict()
    headers[‘Content-Type’] = ‘application/x-www-form-urlencoded’
    data = dict()
    data[‘auth_key’] = get_key()
    data[‘text’] = src
    data[‘target_lang’] = ‘en-us’
    data[‘tag_handling’] = ‘xml’

    res = requests.post(url, headers=headers, data=data)
    res_text = res.text
    res_data = json.loads(res_text)
    tgt = res_data[‘translations’][0][‘text’]
    return tgt

src = ‘例文:<br /><span style=”font-size:1.2em”>こんにちは、世界</span>’
tgt = translate_xml(src)
print(tgt)

 

アクセスキーの文字列は、ソースコードに書くのを避けて
テキストファイル key.txt に格納したものを読み込んで使っています。
res_text がDeepLのサーバから受け取った結果で、json形式の文字列です。
json.loads() を使っていったん dict にしてから、翻訳結果を取り出します。
この記事の目的のひとつは、マニュアルのcurlコマンドを
Pythonで表現する例を示すことです。
両者を見比べると、感じがつかめると思います。

以上、この記事では:

・DeepLのAPIを使用して、文字列を翻訳しました。
次回はDeepLのAPIを使用して、文字列ファイル翻訳をします。

お読みいただきありがとうございます。