漢字直接入力 再考

去年の始めに作った「はぶき」は、結局習得せずに放置してしまったので、改めて作り直したい。


今回は、それ以降に作った解析用の関数があり、より大規模なデータがあるので配列を再検討する。ついったーのタイムラインを1年分ほど貯めているので、その本文データを「もんじ」で解析してみた。データの重複や、自動的に挿入される文字はあるものの、何百人もいるので大体誤差の範囲に収まるはずである。自分のフォローした人の入力したテキストであるので、自分の打つ傾向にも近いと思われる。

#合計55,475,009字(全角のみ)

     1    い   2114430    3.811%
     2    な   1573883    2.836%
     3    の   1427412    2.572%
     4    て   1277171    2.302%
     5    た   1270179    2.289%
     6    か   1268811    2.287%
     7    っ   1225768    2.209%
     8    ー   1072066    1.932%
     9    し   1054230    1.900%
    10    。   1014783    1.829%
    11    と   1013129    1.826%
    12    で   1007415    1.816%
    13    る    994297    1.792%
    14    に    942586    1.699%
    15    ん    928926    1.674%
    16    う    895375    1.614%
    17    が    806689    1.454%
    18    は    749244    1.350%
    19    す    727351    1.311%
    20    ら    658781    1.187%
....

全部で4951種の字があるため、全部載せると長すぎるので、上位20位まで載せる。これで全体のおよそ40%である。短文であるため句読点が少ない、「〜ったー」というワードが多用されるため、それに含まれる字が多い、という傾向は見られるが、字の出現頻度の例として参考になる。

#参考:「はぶき」の上位20位

 の い 、 る 。 に と な で は
 て し が を す た か う れ ま

このような頻出20字が打てれば、全ての文の40%は打てると言っていい。これが日本語の特徴である。頻出字を優遇することで、日本語入力をより速くすることが出来るというコンセプトを維持して、より使いやすい入力法を考えたい。

打鍵数を減らす

漢字直接入力法として、どのように字を配置するかは非常に重要である。というか配置が漢直そのものである。当入力法では、頻出字を1打鍵で打てるようにすることで、平均打鍵数を減らすことを考える。1打鍵で入力可能な字を増やすと、その分入力できる字が減るため、1打鍵字、2打鍵字、3打鍵字の配分が重要である。今回は、3打鍵まで考慮すれば全ての文字をカバー出来る*1ため、4打鍵以上の入力は考慮していない。


この配分をどうすると最適になるか、乱数降下法を用いて検討する。今回出てきた字は4951種であったが、余裕を持たせるために8000字のスロットを確保した上で、1字当たりの平均打鍵数が最小になるような1打鍵字、2打鍵字の数を求めた。

N    打鍵数     A    B    Aの頻度  A+Bの頻度
20   3.0        0    0    0%      0%
21   1.99898    1    41   3.8%    57.6%
22   1.924561   3    57   9.3%    65.1%
25   1.771384   10   57   24.1%   67.2%
30   1.617157   19   66   38.6%   71.1%
40   1.480593   34   41   52.7%   69.2%
50   1.406279   46   41   59.7%   71.5%
60   1.359585   57   48   64.1%   74.3%
70   1.328258   67   91   67.2%   79.7%
80   1.302206   78   59   69.8%   77.9%
90   1.28366    88   56   71.6%   63.7%
100  1.267638   98   92   73.2%   82.0%

打鍵数をグラフにすると図のような具合である。



通常のキーボードでは、メインのキーは48しかないが、Shift側や無変換、かなキーを含めることでN=100程度まで考えることが出来る。T-CODEでは2打鍵/字を割らなかった平均打鍵数が、1打鍵字を含めることで1.5打鍵/字以下にすることも可能である。

検討課題

最適化を考えた場合、出来るだけ1打鍵字を増やすことが良いと分かった。しかし、1打鍵で打てるといっても、使うキーが多いと運指が大変であるし、Shift側も使うと、それはそれで面倒である。この配分を考慮する必要がある。

また、2打鍵字に関してはあまり必要ないことも分かる。打鍵数の最適化では多少は必要な勘定になるが、場合によっては3打鍵に統一しても問題はないだろう。打ちやすい2打鍵枠を用意して、今書いている文書内でよく使う未学習の字はそこへ登録しておく、といった運用も考えられる。


1打鍵字くらいは覚えていられるだろうが、2打鍵以上の字は覚えにくいし、覚えてもほとんど出てこないため、コストに見合わない。したがって、1打鍵字以外は覚え易さを重視した配列にするとよい。


1打鍵字の数を絞ると、平仮名と片仮名の扱いの違いが学習を妨げる問題となる。カナは入力方法を統一してスイッチで切り替える方が良いかも知れない。その場合の切り替えにかかるコストを勘定に入れた場合の打鍵数も考慮したい。また、英数字に関しても同様の問題がある。

追記(2009-10-24 12:13)

平均打鍵数の評価関数が間違っていて、2打鍵字の数を多く計算していた。実際の値は0.2程度大きいと思われる。

*1:Nキー用いたとき、3打鍵まででN^3字種使える。