問題
- 日本語の列名などを高性能な翻訳ツールで一瞬で英語に変更したい。
- Google Formで日本語でアンケートを行った場合など
解決策
- DeepLに翻訳をしてもらう。
必要な準備
DeepL APIの取得
RでDeepLを使うには、APIの取得が必要です。無料と有料のアカウントがあり、無料だと、1か月に50万字までの翻訳が無料です。50万字ってどれくらいか調べたところ、200ページの文庫本で12万字のようなので、質問項目や、列名くらいであれば余裕ですね。
- API取得はこちらから( https://www.deepl.com/ja/pro/change-plan#developer )。
分析コード
- 基盤となるのは以下のコードです。「この中にあなたのAPI認証キーを貼り付ける」の箇所には、「アカウント情報」の下にある「DeepL APIで使用する認証キー」で示されている、認証キーを貼り付けてください。
api_key <- "この中にあなたのAPI認証キーを貼り付ける"
# 翻訳したいテキスト
text_to_translate <- "英語に翻訳したい日本語をいれる"
# DeepL APIにリクエストを送信
response <- POST(
url = "https://api-free.deepl.com/v2/translate",
query = list(
auth_key = api_key,
text = text_to_translate,
source_lang = "JA", # 翻訳元言語を指定 (日本語)
target_lang = "EN" # 翻訳先言語を指定 (英語)
)
)
API認証キーの取得や、Rでの細かい指定の詳しい解説はこちらにありました( 1 )。例えば、言語の指定は以下のようです。
"DE" - ドイツ語
"EN" - 英語
"ES" - スペイン語
"FR" - フランス語
"IT" - イタリア語
"JA" - 日本語
"ZH" - 中国語
実際のやり方
翻訳したいものをDeepLに渡す
- 例えば、以下のようなデータ(
df
)があり、その列名をすべて英語に直したいとします。データがlong型とかwide型とかは置いておきます(笑)。
api_key <- "この中にあなたのAPI認証キーを貼り付ける"
# 翻訳したい列名を指定(リスト化を忘れないように)
text_to_translate <- list(colnames(df))
# DeepL APIにリクエストを送信
library(httr)
response <- POST(
url = "https://api-free.deepl.com/v2/translate",
query = list(
auth_key = api_key,
text = text_to_translate,
source_lang = "JA", # 翻訳元言語を指定 (日本語)
target_lang = "EN" # 翻訳先言語を指定 (英語)
)
)
# レスポンスを取得
translated_text <- content(response, "text")
JSON形式を変更
- 翻訳されたテキストは、JSON形式で返ってきているようなので、このままだと余計なタグがついています。これを外す処理をします。
library(jsonlite)
parsed_translated_text <- fromJSON(translated_text)
# タグを外し文字ベクトルへ変換
cols_vector <- eval(parse(text = parsed_translated_text$translations$text))
# 列名を変換
colnames(df) <- cols_vector
結果
もちろん、各データを翻訳することもできます。列名ではなく、データの1行目を指定しました。
最後に
一度の翻訳処理では50のテキストが上限のようなので注意してください( 1 )。