メインコンテンツまでスキップ

DeepL API で文書を翻訳してみた

· 約3分
moroball14

大量の文字を翻訳したい、と洋書を読んでいたときに思ったので、DeepL API を使ってみた。

DeepL とは

DeepL は、機械翻訳サービス。ホームページによると、競合他社の翻訳システムよりも優れているらしい。

ref: https://www.deepl.com/quality.html

Microsoft の Word だったり、パワポ、PDF のような文書を丸ごと翻訳できるのも特徴の一つ。

DeepL 社が提供しているページの他に、API を提供していて、API を使うことで、自分のアプリケーションに組み込むことができる。

DeepL の API ドキュメントはこちら

DeepL API で文書を翻訳するには

以下のページに文書の翻訳に関係する API の仕様が書いてある。

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

これらを紹介するとともに、気をつけるべき点についても言及する。

1. ファイルをアップロードする

curl -X POST 'https://api-free.deepl.com/v2/document' \
--header 'Authorization: DeepL-Auth-Key [yourAuthKey]' \
--form 'target_lang=DE' \
--form 'file=@document.docx'

で叩ける。

試した感じ、 file は、絶対パスか相対パスで指定する必要があるみたい。

絶対パスの場合は、 file=@/Users/moroball14/Downloads/document.docx みたいにする。

この返り値は、

{
"document_id": "XXX",
"document_key": "YYY"
}

と後工程(アップロードしたファイルのステータスを確認する、ダウンロードする)でこれらが必要になるので、手元にメモしておく。

2. アップロードしたファイルのステータスを確認する

curl -X POST 'https://api-free.deepl.com/v2/document/{document_id}' \
--header 'Authorization: DeepL-Auth-Key [yourAuthKey]' \
--header 'Content-Type: application/json' \
--data '{
"document_key": "XXX"
}'

を実行したら、upload の状況だったり、ダウンロードした時の課金対象の文字数( billed_characters )がレスポンスとして返却される。

{
"document_id": "XXX",
"status": "done",
"billed_characters": 50000
}

なお、課金対象の文字数は最低 5 万文字となっている。仮に、このステータスのチェックをした際に、50000 とでたらもう少し文字数を増やす方が良い。仮に自分が翻訳をかけようとしたファイルの文字数が 45000 だったとしても 50000 文字として扱われるためだ。

3. ファイルをダウンロードする

ダウンロードするときは、

curl -X POST 'https://api-free.deepl.com/v2/document/{document_id}/result' \
--header 'Authorization: DeepL-Auth-Key [yourAuthKey]' \
--header 'Content-Type: application/json' \
--data '{
"document_key": "XXX"
}'

を実行するのだが、このまま実行してはいけない。注意したいことがある。

file をダウンロードするため、curl で実行する際に output オプションをつけてあげる必要がある。 でなければ、以下の WARNING が出てしまう。

Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file

かつ、請求対象の文字数がカウントされるので、枠が定まっている場合には、無駄遣いしてしまうことになる。(無料枠を浪費してしまったり、無駄に課金されたり)

また、1 度ダウンロードしたら、そのファイルデータは破棄されるので、実行には注意したい。

curl -X POST 'https://api-free.deepl.com/v2/document/{document_id}/result' \
--header 'Authorization: DeepL-Auth-Key [yourAuthKey]' \
--header 'Content-Type: application/json' \
--data '{
"document_key": "XXX"
}' --output /Users/moroball14/Downloads/output.pdf

のように output オプションを付与して出力先を指定すると、成功する。