京橋のバイオインフォマティシャンの日常

南国のビーチパラソルの下で、Rプログラムを打ってる日常を求めて、、Daily Life of Bioinformatician in Kyobashi of Osaka

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

deepRstudio: DeepL API および rstudioapi を使用した RStudio でのシームレスな言語翻訳 (2023年8月24日 更新)

RStudio上で、DeepL APIをGUIで操作(RStudio addins)で使用して、シームレスな言語間翻訳が行えるRパッケージ、deepRstudioを作成しました。現在、CRANパッケージとして登録されています。 使用には、DeepL APIが必要ですが、無料登録で、月50万文字まで無料で使用できます。有料プランに登録しないと、変な課金はいっさい発生しません。

開発ページは以下を参照してください。

github.com

また、YouTubeで、deepRstudioのデモをご覧いただけます。

youtu.be

はじめに

今回、画期的な機械翻訳ツールを紹介します。その名も、DeepL です。

DeepL翻訳は、2017年8月28日にサービスを開始した無償のニューラル機械翻訳サービスです。

Google 翻訳よりも精度が高く、微妙なニュアンスのある翻訳ができると肯定的な報告があります。

DeepLのWebインターフェイスも中々使い勝手は良いです。

#RからWebページを開く
browseURL("https://www.deepl.com/translator")

DeepLの良さは、何と言っても、その翻訳精度です。 Google翻訳よりも自然なフレーズ選択をしてくれて、結果を見るとスゲーと声が出るほどです。

悲しいことに、 自身の英語力をすでに超えている英訳・和訳なので、 使わないわけにはいきません。。

DeepL登録HP

DeepL APIを使うには、無料のdeveloper登録が必要です。

まず、DeepL APIの登録ページに移動します。

#RからWebページを開く
browseURL("https://www.deepl.com/pro?cta=header-prices/#developer")

DeepL API Freeの「無料で登録する」を選択して、次のページに進みます。

そこで、アカウントの登録を行います。

登録時に、クレジットカード番号を聞かれるのがやや面倒です。

Pro版に変更しないと請求は来ないので安心してください。

これも、素晴らしい翻訳機が無料で使えるので仕方ない。。。

登録が終われば、承認キーが発行されます。

curlで問い合わせるときに、このキーが必要となります。 コピーして、どこか分かりやすところに保存しておくようにしましょう。

DeepL APIを使って、和訳・英訳をやってみる。

DeepLの練習(1)いつもの例題: 英語 to 日本語

source_langを"EN"、target_langを"JA"と設定します。

[Your Authentication Key]に承認キーを入力します。 また、[ ]は不要です。。

#入力文字列
Sentence <- "Hello, world"

#curlを用いて、DeepL API実行
a <- system(paste0('curl -s https://api-free.deepl.com/v2/translate -d "auth_key=[Your Authentication Key]" -d "text=', Sentence, '" -d source_lang="EN" -d "target_lang=JA"'), intern = T)

#前処理
result <- strsplit(strsplit(as.character(a), "\"text\":\"")[[1]][2], "\"}]}")[[1]][1]

#出力結果
result
#[1] "ハロー、ワールド"

DeepLの練習(2)専門的な文書の翻訳: 日本語 to 英語

source_langを"JA"、target_langを"EN"と設定します。

[Your Authentication Key]に承認キーを入力します、また、[ ]は不要です。

#入力文字列
Sentence <- "薬品とは、精製あるいは配合されて、何らかの用途に利用可能な状態とした化学物質のうち、少量で使用するものをいう。"

#curlを用いて、DeepL API実行
a <- system(paste0('curl -s https://api-free.deepl.com/v2/translate -d "auth_key=[Your Authentication Key]" -d "text=', Sentence, '" -d source_lang="JA" -d "target_lang=EN"'), intern = T)

#前処理
result <- strsplit(strsplit(as.character(a), "\"text\":\"")[[1]][2], "\"}]}")[[1]][1]

#結果
result
#[1] "A chemical is a chemical substance that has been refined or blended to make it usable for some purpose, and that is used in small quantities."

DeePL関数(自作関数)を作ってみました!

上記のcurlコマンドをRの関数として実装して、DeePL関数を作成しました。

この関数をソースしてみらえれば、Rの関数として、DeePL翻訳が実行できます。

#ソース
source("https://gist.githubusercontent.com/kumeS/26a7a602070365595a0b552e201079d5/raw/6629ad3663ee2f952a66c9e00df90935dce45d35/DeePL.R")

#実行
DeePL(Sentence="Hello", EN2JA=TRUE, Auth_Key="Your Authentication Key")

gist.github.com

まとめ

関数の動作はやや遅いけど、、DeepLの翻訳は素晴らしいです。

無料版APIオプションの説明

翻訳機能は、テキストの翻訳を可能にするもので、所定のAPI URL (https://api-free.deepl.com/v2/translate) で利用できます。この同期呼び出しは、以下の基本パラメータをサポートしています。

パラメータ オプション 説明
text Required 翻訳されるテキスト。UTF8エンコードのプレーンテキストのみ対応している。パラメータは複数回指定することができ、翻訳は要求された順に返す。それぞれのパラメータ値には、複数の文章を含めることができる。1回のリクエストで、最大50個のテキストを翻訳に送ることができる。
source_lang Optional 翻訳されるテキストの言語。現在利用可能なオプション
"DE" - ドイツ語
"EN」-英語
"ES" - スペイン語
"FR" - フランス語
"IT" - イタリア語
"JA」-日本語
"ZH" - 中国語
このパラメータが省略された場合、APIはテキストの言語を検出して翻訳を試す。
target_lang Required テキストを翻訳する言語。略語は同上。
split_sentences Optional 翻訳エンジンが入力を最初に文に分割するかどうかの設定。デフォルトでは、有効。設定可能な値は以下の通り。
"0" - 分割を行わず、入力全体を1つの文として扱う。
"1" (デフォルト) - 接続点と改行点で分割する。
"nonewlines" - 改行を無視して接続点のみで分割する。
テキストパラメータごとに1つの文を送信するアプリケーションでは、エンジンが意図せずに文を分割してしまうのを防ぐために、split_sentences=0を設定することを推奨。
preserve_formatting Optional 翻訳エンジンがオリジナルのフォーマットを尊重するかどうかの設定(通常は一部を修正する場合もある)。設定可能な値は次の通り。
"0" (デフォルト)
"1"
この設定で影響を受けるフォーマットの側面は次の通り。
文章の最初と最後の句読点
文章の先頭の大文字/小文字
formality Optional 翻訳された文章をフォーマルな表現にするか、インフォーマルな表現にするかの設定。この機能の現在の対象言語は、"DE"(ドイツ語)、"FR"(フランス語)、"IT"(イタリア語)、"ES"(スペイン語)、"NL"(オランダ語)、"PL"(ポーランド語)、"PT-PT"、"PT-BR"(ポルトガル語)、"RU"(ロシア語)の場合のみ動作する。
可能なオプションは
"default" (デフォルト)
"more" - よりフォーマルな言語にする
"less" (より少ない) - よりカジュアルな言語にする場合

また、以下のような拡張パラメータも用意されています。これらのパラメーターの使用方法については、後述の「XMLの取り扱い」をご参照ください。

パラメータ オプション 説明
tag_handling Optional どのような種類のタグを処理するかの設定。現在利用可能なオプション: "xml"
non_splitting_tags Optional 文章を分割しないXMLタグのコンマ区切りのリスト
outline_detection Optional 詳細については、"XMLの処理"セクションを参照
splitting_tags Optional 常に分割を引き起こす XMLタグのコンマ区切りリスト
ignore_tags Optional 翻訳されないテキストを示すXMLタグのコンマ区切りのリスト

原文は、以下のWebページで確認できる。

browseURL("https://www.deepl.com/docs-api/translating-text/")