ニュース・コラム
DeepL翻訳をPythonから使う
第一回 タグ付き文字列の翻訳
この記事では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を使用して、文字列ファイル翻訳をします。お楽しみに!
お読みいただきありがとうございます。