大量の文字を翻訳したい、と洋書を読んでいたときに思ったので、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 オプションを付与して出力先を指定すると、成功する。