LoginSignup
1

DeepLを使って、R内の日本語データを英語に翻訳する

Posted at

問題

  • 日本語の列名などを高性能な翻訳ツールで一瞬で英語に変更したい。
    • Google Formで日本語でアンケートを行った場合など

解決策

  • DeepLに翻訳をしてもらう。

必要な準備

DeepL APIの取得

RでDeepLを使うには、APIの取得が必要です。無料と有料のアカウントがあり、無料だと、1か月に50万字までの翻訳が無料です。50万字ってどれくらいか調べたところ、200ページの文庫本で12万字のようなので、質問項目や、列名くらいであれば余裕ですね。

アカウントでは、下記画像のように使用状況を確認できます。
image.png

分析コード

  • 基盤となるのは以下のコードです。「この中にあなたの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型とかは置いておきます(笑)。

image.png

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

結果

しっかり翻訳されています。
image.png

もちろん、各データを翻訳することもできます。列名ではなく、データの1行目を指定しました。
image.png

最後に

一度の翻訳処理では50のテキストが上限のようなので注意してください( 1 )。

参考文献

( 1 ) R言語で、現在最強の機械翻訳ツール「DeepL API」を使ってみた件

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1