今回はタイピングソフトのキーセッティング、入力方法自動判別に関して考察する。
キーセッティングはあらかじめユーザーに入力方法を選択してもらい、その入力方法で
文字列を出力するというもの。
例:『し』の入力方法をユーザーが『si』とした場合の『知らない』のローマ字出力は
『siranai』
例:『し」の入力方法をユーザーが『shi』とした場合の『知らない』のローマ字出力は
『shiranai』
入力方法自動判別とは上記のキーセッティングで行う作業をなくし、『し』を『shi』でも『si』
でも入力できるようにすることである。
実際にそれぞれの機能を実現させるにはどのようにすれば良いのか?であるが、
キーセッティング機能に関して言えば、それぞれ対応するひらがなをローマ字に変換して
出力すれば良い。
具体的には『あ』→『a』、『い』→『i』となるようにそれぞれを連結して文字列を作る。
これを利用して、ユーザーにキーセッティングで選んでもらったように、
『し』→『shi』または『si』として出力すればいいことになる。
ただこのようにすべての入力方法がすんなりいくわけでもない。
例えば『しゃっくり』を『syakkuri』という風に初期入力方法で設定されてるとする。
ここでユーザーが『しゃ』を『sha』としていたとする。
しかし『syakkuri』をそのまま『shakkuri』にした場合問題が生じる。
なぜなら『しゃ』は『shilya』や『sixya』など他にも入力できる方法があるからだ。
つまり『しゃ』の入力方法としていくつものパターンを作らなければならず、すべての入力方法を
設定するのは大変になる。
『syakkuri』というローマ字の場合『syaltukuri』という入力でも打てる。
つまり連続する『kk』という文字は『ltuk』という入力でも打てる。
この『k』という文字だけが連続するのではなく、後に来る文字によって連続する文字が変わってくる。
例として『はっぷん』というローマ字は『happun』である。
だが、すべての入力方法をキーセッティングで設定できればこの機能で入力方法をカバーすることは
可能であると言える。(実際スクリプト作成してないのでなんともいえない)
次に入力方法自動判別機能に関してであるが、これは入力方法を自動で変換しどの入力方法でも打てるように
するということであるが、実際どのように変換させるのか?
この機能を実現させるには膨大なスクリプトを必要とする。
例として『しゃかい』というひらがなをローマ字で出力しその文字列をどんな入力方法でも打てるようにするとする。
『しゃかい』の打ち方のパターンとしては、『syakai』、『shakai』、『shilyacai』・・・・など
様々な方法がある。
つまりそのすべてに対してスクリプトで変換させる必要がある。
その実現方法であるが、
例えば『sya』という文字列を変換させる場合、最初の『s』はすべて同じなのでそのまま
(実際は『し』を『ci』とも入力できるので最初は『s』でも『c』でも
よしとしなければならない)、次の『y』が来たときに
『i』や『h』などの入力方法がある為ここで分岐させなければならない。
プログラム的に言えば
今現在『y』の文字を指している状態
if(前の文字が『s』であったとき){
if(今打った文字が『y』または『h』または『i』である時){
現在打った文字を入力した文字列として出力;
問題のローマ字も変換させる;
正解とし次の文字を指す;
}
}else{
それ以外の文字を打った場合は間違いとして同じ文字を打たせるようにする;
}
というような感じですべての入力方法について記述していくこととなる。
すべての入力方法をサポートさせるにはかなりのスクリプトの量が必要となるし、何文字前とか何文字後が
この文字の時などの条件を考えるのがかなり大変である。
『う』を『wu』で入力できるがほとんど使われる事がない入力方法なのでこういったあまり
使われる事のない入力方法を避け、頻繁に使われる入力方法だけにするとスクリプト量も少なくすみ、
スクリプト上で問題が発生するのも避けることができる。
しかしいろいろな入力方法で入力するユーザーがいるのですべての入力方法をサポートしている方が
良いことは確かである。
ただ注意しなければならないのは、タイピングの練習ソフトとしてこの入力自動判別機能を搭載した場合、
いろいろな打ち方ができるので初心者に難しくさせ、なおかつ入力方法をなかなか覚えられないかもしれないし、
ひとつの入力方法で練習ができないので効率が悪い。
初心者向けのタイピングソフトでは一般によく使われる入力方法で固定して練習してもらうか、もしくは
キーセッティング機能のほうが適していると言えるであろう。
さて、入力自動判別機能に関してはひっぱれオレンジ君である程度の入力方法ができたのですが、
もっと効率の良い変換法やタイピングオブザデッドのように前回打った打ち方でローマ字を出力できるようにする
などの機能を備えたスクリプトを製作してみようと思います。
方法としては、ひらがなからのローマ字出力とそれによっての不具合の解消、キーセッティング機能実現の為の
アルゴリズムを適用しての自動判別機能の作成を目指します。
できあがりしだいサンプルを載せます。
ファイルやスクリプト自体はたぶん配布しないかと思います。(わかりませんが・・)
長々とタイピングアルゴリズムをやってきましたが、タイピングソフトorタイピングゲームの作成に役立てたでしょうか?
かえって悩ませる結果となっているかもしれませんが・・、とりあえずスクリプトの利用だけに留まらず、
どのようにアルゴリズムを考えて作成するかということを書きたかったので書いてみました。
自分も充実してこの考察ができたのでよかったと思います。
本当はもっと細かい事も書こうと思ってたんですが、あまりに膨大な文章になりそうなので、やめました(汗)
これからもタイピングソフト作りに励んでいただければと思います。