■APIキーと翻訳したいドキュメントを渡して結果を受け取るだけなのにPythonで長文書くのも面倒だったりするけれど、aws cliですぐ試せるのでありがたい。bashの範囲で書いたのでCloudShellでこのまま動く
PDF1ページの文字数は1200~1500文字だとして、300ページ程度だと36万〜46万文字
DeepLは50万文字まで無料なので失敗がなければギリギリなので失敗時のリ80文字のカバリは難しい
Amazon Translateなら200万文字まで無料なので、全体を取り込んで失敗してもリカバリできそう
■公式サイトからはコンソールやSDKのサンプルコードも確認できる
APIキーの取得方法は省く。「aws configure」で設定済であればOK。
■aws cliのコードサンプルを参考にして、4行ヘッダを作って原文・訳文を出力
「#」を80回繰り返し出力する行
日付と消費文字をカウントして、「aws_translate_年月」に追記
200万文字を超えていないか累計チェックのため、実際に累計を出して表示
「#」を80回繰り返し出力する行
$ cat translate.sh
#!/bin/bash
original="$(echo $@ | sed -e 's/\. /&\n/g')"
sumfile="aws_translate_$(date '+%Y%m')"
echo "#" | awk '{for(n=1;n<=80;n++){printf "%c",$1}}END{printf "\n"}'
echo $(date;echo -n "消費文字:";echo "${original}" | wc -c) | tee -a "${sumfile}"
awk -F":" '{sum+=$NF}END{print FILENAME,sum}' "${sumfile}"
echo "#" | awk '{for(n=1;n<=80;n++){printf "%c",$1}}END{printf "\n"}'
echo "${original}"
#exit
aws translate translate-text \
--region us-east-1 \
--source-language-code "en" \
--target-language-code "ja" \
--text "${original}" | jq -r '.TranslatedText'
■実行日時と消費文字が347文字、累計が約4万文字になったことがわかる
$ ./translate.sh $(cat jobs_speech.txt )
################################################################################
Mon Dec 23 02:30:57 PM UTC 2024 消費文字:347
aws_translate_202412 39885
################################################################################
I am honored to be with you today at your commencement from one of the finest universities in the world.
Truth be told, I never graduated from college.
And um, this is the closest I’ve ever gotten to a college graduation.
(audience: Laugh) Today I want to tell you three stories from my life.
That’s it.
No big deal.
Just three stories.
本日、世界屈指の大学の卒業式に出席できることを光栄に思います。
実を言うと、私は大学を卒業したことがない。
そして、ええと、これは私が今までに大学卒業に最も近づいた時です。
(観客:笑) 今日は、私の人生における3つの話をしたいと思います。
それでおしまいです。
大したことないよ。
たった三つの物語。
■消費文字数はローカルなら1024文字に収めて、loggerでsyslogに書き込んでも良さそう
累計は200万までの%表記もできるけど、まあ今回はスルー
$ logger "Mon Dec 23 02:30:57 PM UTC 2024 消費文字:347"
■ヘッダは先頭4行で、原文・訳文はそれぞれ同数行なので、全体行の半分がわかれば一行づつにもできる
$ ./translate.sh $(cat jobs_speech.txt ) > jobs_speech.out
$ awk '(NR>4){a[(NR-4)]=$0}END{b=(NR-4)/2;c=0; \
for(n in a){if(c<b){print a[n]"\n"a[n+b]"\n";c++}}}' jobs_speech.out
I am honored to be with you today at your commencement from one of the finest universities in the world.
本日、世界屈指の大学の卒業式に出席できることを光栄に思います。
Truth be told, I never graduated from college.
実を言うと、私は大学を卒業したことがない。
And um, this is the closest I’ve ever gotten to a college graduation.
そして、ええと、これは私が今までに大学卒業に最も近づいた時です。
(audience: Laugh) Today I want to tell you three stories from my life.
(観客:笑) 今日は、私の人生における3つの話をしたいと思います。
That’s it.
それでおしまいです。
No big deal.
大したことないよ。
Just three stories.
たった三つの物語。
■Amazon Translateの結果が、個人的には自然な訳文だったので良かった