日本語を入力するとスターウォーズに出てくるオーラベッシュという言語に変換してくれるものが欲しい!
ということで、調べたところ新三部作が公開された際にGoogle翻訳で出来るようになっていたそうですが現在は使えず、他にもサイトとしては存在しなかったため自作することにしました。(英語から翻訳というのはいくつかありました。)
完成したものは以下のリンクからアクセスできるので是非使用してみてください!
オーラベッシュと翻訳方法について
オーラベッシュは映画スターウォーズに出てくる言語で、劇中やディズニーランドのアトラクションなどで見ることができます。
そして、オーラベッシュの文法や構造は英語と全く一緒なので、日本語から英語に翻訳してその出力のフォントをオーラベッシュにするといった方向で行います。
また、フレームワークはFlaskにしました。
翻訳:Argos Translate
Pythonを使用した翻訳について調べていると幾つかあり、その中でもArgos Translateというものがローカルでも翻訳できるというのに魅力を感じたため今回はそれを使用しました。
ただ、軽く触ってみたところ翻訳の精度はボチボチといった感じだったので精度を求めるのならGoogleのAPIを使用するのが良いと思います。
argostranslateのインストール
pipインストールでインストールします。
pip3 install argostranslate
また、以下のコマンドで全言語をインストールできます。
argospm install translate
翻訳関数の実装
今回は日本語から英語に変換すれば良いので以下のように関数を定義します。
def translate_text(text, from_lang="ja", to_lang="en"):
installed_languages = argostranslate.translate.get_installed_languages()
from_lang_obj = next(filter(lambda x: x.code == from_lang, installed_languages), None)
to_lang_obj = next(filter(lambda x: x.code == to_lang, installed_languages), None)
if from_lang_obj and to_lang_obj:
return from_lang_obj.get_translation(to_lang_obj).translate(text)
return "Translation not available."
上記の定義により以下のコードで翻訳を実行することができます。
translate_text("翻訳したい文章")
上記を翻訳ボタンをクリックした際に表記されるようにすれば翻訳の大枠は完成です。
英語が入力された時
英語が入力されたときはそのまま返せば良いのですが、現時点では出来ないため簡易的な英語チェッカーの関数を定義します。
def is_english(text):
english_chars = sum(c.isalpha() and c.lower() in "abcdefghijklmnopqrstuvwxyz" for c in text)
return english_chars / max(len(text), 1) > 0.7
上記ではアルファベットを7割以上含んでいるときはTrueを返します。
まあ、本当なら別の手法を用いるのが良いと思うのですが趣味程度のものなので、
これで良いかなと。。。
フォントの変更
ここまでで翻訳の機能は実装できたので次はオーラベッシュの変換についてやっていきます。
フォントのダウンロード
以下のサイトからフォントをダウンロードしました。
個人及び商業利用可能のものを選びました。
フォントの使用方法
フォントはCSSで以下のように記述することで出来ます。
@font-face {
font-family: 'CustomFont';
src: url('../fonts/AurebeshAF-Canon.otf') format('opentype');
}
h2{
font-family: 'CustomFont', sans-serif;
}
大まかですがこれで基本的な機能は完成です。
あとはHTMLにボタンとテキストボックスを置いてボタンを押すと関数を呼び出すようにしたら完成です。
コメント