indico記事の流れで機械学習系のサービスを横断的に探していて、以下の記事からMSの翻訳APIを発見しました。
Google翻訳APIは有料だけどMSのは無料のもあるみたいです。
Microsoft Translator APIを使ってみるを参考にしつつ、ここに掲載されていたコードがうまく動作しなかったのでこちら(Windows Translatorで "ArgumentOutOfRangeException: 'to' must be a valid languageというエラーが出るときの対処)も参考にして動作を検証したメモです。
##アカウント発行と必要な情報取得
-
Microsoft Translatorのページで無料枠にサインアップ https://datamarket.azure.com/dataset/1899a118-d202-492c-aa16-ba21c33c06cb
-
アプリ登録をしましょう。 https://datamarket.azure.com/developer/applications
とりあえず試すだけならリダイレクトURLは適当なもので大丈夫です。
顧客の秘密
って書いてるところが↓のソースコードのclient_secret
になります。クライアントIDはそのままclient_id
ですね。
サンプルをNode.jsで動かす。
外部モジュールが無いので、このままコピペで動くとおもいます。
ちなみにNode.jsはv6.0
'use strict';
const http = require('http');
const https = require('https');
const qs = require('querystring');
//アクセストーク取得
function getAccessToken(callback) {
let body = '';
let data = {
'client_id': '自分のアプリケーションのクライアントID',
'client_secret': '自分のアプリケーションのクライアントシークレット',
'scope': 'http://api.microsofttranslator.com',
'grant_type': 'client_credentials'
};
let req = https.request({
host: 'datamarket.accesscontrol.windows.net',
path: '/v2/OAuth2-13',
method: 'POST'
}, (res) => {
res.setEncoding('utf8');
res.on('data', (chunk) => {
body += chunk;
}).on('end', () => {
let resData = JSON.parse(body);
callback(resData.access_token);
});
}).on('error', (err) => {
console.log(err);
});
req.write(qs.stringify(data));
req.end();
}
//翻訳 (日本語 -> 英語)
function translate(token, text, callback) {
let options = 'from=ja'+
'&to=en' +
'&text=' +
qs.escape(text) +
'&oncomplete=translated';
let body = '';
let req = http.request({
host: 'api.microsofttranslator.com',
path: '/V2/Ajax.svc/Translate?' + options,
method: 'GET',
headers: {
"Authorization": 'Bearer ' + token
}
}, (res) => {
res.setEncoding('utf8');
res.on('data', (chunk) => {
body += chunk;
}).on('end', () => {
eval(body);
});
}).on('error', (err) => {
console.log(err);
});
req.end();
function translated(text) {
callback(text);
}
}
//実行
getAccessToken((token) => {
translate(token, process.argv[2], (translated) => {
console.log(process.argv[2],'->',translated);
});
});
実行
$ node app.js こんばんわ
こんばんわ -> Good evening!
$ node app.js めちゃ眠い
めちゃ眠い -> So sleepy
こんな感じで結構口語の日本語でも翻訳してくれてけっこう精度の良さを感じますね
パラメータは今回は日本語->英語なのでfrom=ja&to=en
ですが、英語->日本語にするときはfrom=en&to=ja
にしましょう。