Google AJAX Language API
今研究室で四年生の実験のTAをやっています。実験の題材は「パターン認識システムの製作」でパターン認識を使った何かシステムを作るというもの。テーマを相談させて決定させたところ言語の自動判別をやることになった。
言語の自動判別というと最近Google AJAX Language APIという言語の判別と翻訳を行ってくれるものが出てたなと思って少し触ってみた。
http://d.hatena.ne.jp/j7400157/20080322/1206201444のエントリを参考にして与えられた文章を指定した言語に変換するものを作ってみた、少し変えた所としては言語の変換に失敗した場合、一度英語に直して指定した言語に変換するという処理を行っている。
ソースは以下。またここで動作確認ができる。
<html> <head> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("language", "1"); function init() { var langList = document.getElementById("target-language"); for (var lang in google.language.Languages) { var langOpt = new Option(lang, google.language.Languages[lang]); langList.options[langList.options.length] = langOpt; } } google.setOnLoadCallback(init); function setResult(result){ document.getElementById("result").value = result; } function translate(){ var source = document.getElementById("source").value; google.language.detect(source , function(result){ if(result.error){ return ; } var langList = document.getElementById("target-language"); var destLang = langList.options[langList.selectedIndex].value; //入力言語を選択言語に直す google.language.translate(source , result.language , destLang , function(result2){ if(result2.error){ translate2(source , result.language , destLang); return ; } setResult(result2.translation); }); }); } function translate2(source , srcLang , destLang){ //入力言語をまず英語に変換して、その後選択言語に直す google.language.translate(source , srcLang , "en" , function(res){ google.language.translate(res.translation , "en" , destLang , function(res2){ setResult(res2.translation); }); }); } </script> </head> <body> <textarea id="source" rows="5" cols="50"></textarea><br /> <select id="target-language"></select>に<input type="submit" value="翻訳" onclick="translate()" /><br /> <textarea id="result" readonly="readonly" rows="5" cols="50"></textarea></br> </body> </html>
ちなみに言語の自動判別のやりかたとしては
- Wikipediaなどから各言語ごとのテキストを教師データとして取ってくる
- データをアルファベットの頻度などの特徴量ベクトルに変換する
- 作成した特徴量ベクトルを用いて、入力に対してNaive Bayesかk-NNを使って判定する
のような方法があるのかなと思っている。