eelll/JS や、漢字直接入力 (主に練習方法について) に関する、いろいろな覚え書きです。
T-Code や TUT-Code などの、 無想式直接入力 では、コードの表現方法 (文字ヘルプ) の読み方を覚えることが、直接入力を修得するための第一歩です。まずは、 打鍵図 の読み方を覚えましょう。
tc2 や 橋田表 など、 T-Code でよく用いられている図示で、 キーボードを模式的に表す図を用いて、空間的にコードを表現する方法です。 「ドット表現」とも呼ばれます。
打鍵図では、「・」が、キーボード上の、左右の手の四指のホームポジションと、
その上下の段のキー
(右図のキーボードの青く塗られたキー)
を示します。
最上段の数字キーや、人さし指をキーボード中央側にずらして打つキーは空白です。
このような図で、「●」で第一打鍵の位置を、「○」で第二打鍵の位置を示します。
したがって、はじめ図の例は、QWERTY 配列での「l4」、 Dvorak 配列での「n4」というコードを表しています。
第一打と第二打の位置が同じキーの場合 (ここでは「二重打鍵」や「重打」と呼ぶ) は「◎」で表わします。 TUT-Code などの第三打鍵は「△」、第四打鍵は「◇」となります。 TUT 記号などで使われるスペースキーは表記できません。
打鍵の順序を示す記号は、 漢直Win 1.27* の文字ヘルプと共通で、 tc2 ともほぼ同じです (tc2 では、三重打鍵にも「◎」を使っていたかもしれません)。
歴史的には、はじめは「○」が第 1 打鍵、「●」が第 2 打鍵を表していたが、 のちに「● → ○」の順に変更されたようです [tcode-ml:243,988]。
T-Code を拡張した Try-Code と TT-Code は、いずれも、特定のキーを T-Code の通常の二打鍵の前に打鍵することによって、一時的に表を切り換える拡張方式です。 Try-Code では Space によって 連想表 と呼ばれる拡張表に切り換え、 TT-Code では jf と fj (QWERTY 配列) または hu と uh (Dvorak 配列) の二種類のキー列によって、それぞれ 右表 と 左表 と呼ばれる二種類の拡張表に切り換えて入力します。
このような拡張用の特定のキー (またはキー列) を、ここでは prefix と呼ぶことにします。
Try-Code や TT-Code などの prefix 拡張型の T-Code では、 文字ヘルプを、 prefix を取り除いた二打鍵 (ここでは順に 初打 と 終打 と呼ぶ) のみを、prefix によって異なる特別な記号で表示します。
Try-Code は、 「Space + ??」 という三打鍵で、連想表から文字を入力しますが、 このとき、連想表の初打を「■」で、終打を「□」で表わします。 重打の場合は「回」となります。
たとえば、図の例では、「括」は 「Space + dd」 (QWERTY 配列) または 「Space + ee」(Dvorak 配列)、 「弧」は 「Space + q4」(QWERTY 配列) または 「Space + '4」(Dvorak 配列) というコードであることを示しています。
TT-Code では、 「jf + ??」(QWERTY 配列) または 「hu + ??」(Dvorak 配列) で右表から文字を入力し、 「fj + ??」(QWERTY 配列) または 「uh + ??」(Dvorak 配列) で左表から文字を入力しますが、 このとき、右表と左表の初打を、それぞれ「▲」と「▽」で表わします。 終打は、右表、左表ともに「○」です。 また、右表と左表の重打は、初打と同じ記号で、それぞれ「▲」と「▽」と表します。
たとえば、図の例では、「頂」は 「jf + hs」(QWERTY 配列) または 「hu + do」(Dvorak 配列)、 「戴」は 「fj + uu」(QWERTY 配列) または 「uh + gg」(Dvorak 配列) というコードであることを示しています。
素直に、キーボードのキートップの英字 (a—z 0—9 ; , . /) でコードを表す表記法です。 TUT-Code で比較的よく用いられます (たとえば、 TUT-Code の本家で配布されている、標準的な漢字テキスト kanji_a1.txt, 練習プログラム SFCxTYPE, 検索プログラム TUTSearch のいずれでも、この表示法が使われています)。
Try-Code や TT-Code などの、prefix 拡張型の T-Code では、 prefix を示す記号に続けて、 prefix を取り除いた二打鍵 (初打、終打) を表記して表します。
たとえば、 Try-Code の『括弧』は 「■dd ■q4」(QWERTY 配列) または 「■ee ■'4」(Dvorak 配列)、 TT-Code の『頂戴』は 「▲hs ▽uu」(QWERTY 配列) または 「▲do ▽gg」(Dvorak 配列) となります。 (Try-Code では、連想による拡張という設計の哲学を考えると、 「■活 ■孤」と書くのが、あるべき姿かもしれません)
図のように、
T-Code で用いる
40 キーに割りつけたひらがなでコードを表す方式です
[tcode-ml:2006,2012]。
橋田ニモニックでは、たとえば、 T-Code の『漢』は「てぎ」、 TUT-Code の『漢』は「さひじ」となります。
キーボード上の各キーと、かなの対応は、次のとおり。
なお、もともとの橋田ニモニックにはスペースキーへの割り当てはありませんが、 eelll/JS では、 TUT-Code の記号などを配慮して、 スペースキーには「ん」を割り当てています。
RL ・・・・・ ・・・・・ ・・・・・ ・・・・・ ・・・・・ 請境系探象 尚賀岸責漁 舎喜幹丘糖 布苦圧恵固 姿絶密秘押 盛革突温捕 益援周域荒 康徒景処ぜ 邦舞雑漢緊 衆節杉肉除 依繊借須訳 織父枚乱香 譲ヘ模降走 激干彦均又 測血散笑弁 酸昼炭稲湯 貿捜異隣旧 攻焼闘奈夕 盤帯易速拡 汽換延雪互 歩回務島開 キせ区百木 や出タ手保 コ山者発立 ナ金マ和女 給員ど代レ 分よル千ア 7か(トれ きっ日国二 上く8え年 相家的対歴 付プばュ作 内工八テ見 九名川機チ サ建パ第入 桜瀬鳥催障 典博筋忠乳 採謡希仏察 君純副盟標 犯余堀肩療 中スもお定 わラ東生ろ う4)十リ あこ6学月 本さら高シ 3と〇てる ーした一が い、の51 。‐0・2 ではになを ッ人三京ち ロク万方フ んまンつ四 けイす電地 業時「長み 呼幅歓功盗 紀破郡抗幡 房績識属衣 去疑ぢ綿離 秒範核影麻 店持町所ほ 全じ自議明 バ部六経動 後間場ニ産 問ム七住北 行ド円小ジ 通カ社野同 だり―め大 新」9子五 事田会前そ 海道ず西げ 当理メウグ 不合面政オ 委化ビ目市 気売下都株
tc2 や EELLL, DOGGG などで、打鍵図とともに T-Code でよく用いられる図示です。 ストローク表は RL, RR, LL, LR の 4 つの部分表に分かれています。 各部分表の中では、大きく 5×4 にブロックが並び、 各ブロックの中で、やはり 5×4 に文字が並んでいいます。
部分表とブロックは、どちらも、 キーボードの右手側または左手側の半面を表しています。 文字がブロックの中でどこにあるかが、その文字の第一打鍵の位置を示し、 ブロックが部分表全体の中でどこにあるかが、第二打鍵の位置を示します。
図は、ストローク表のうちの RL 表です。 この表から、たとえば『漢』のコードは、次のように読みとることができます。 まず、表の左上に「RL」とあることから、 「第一打鍵が右手、第二打鍵が左手」(Right to Left) であることが分かります。 次に、『漢』が、5×4 ブロックの、中段、左端から 4 列目にあることから、 第一打はキーボード右手側、中段、薬指となります。 また、『漢』を含むブロックが、表全体の、 最上段、右端から 2 列目にあることから、 第二打はキーボード左手側、最上段、人さし指となります。 結局、『漢』の打ち方は、 「右手・中段・薬指 → 左手・最上段・人さし指」となりることが分かります。
このように、 表の内側から外側へと読ませることによって、コードを表現することから、 ストローク表は「木を見て森を見る」表とも呼ばれます。
第一打鍵を○、第二打鍵を●としたのは、単にJIS文字コード 順とか、そういういいかげんな基準で決めてしまったのですが、 実際に表を使うときには色が濃い方が目立つので、今は●を第 一打鍵としています。最初に認知科学の専門家に相談していれ ばこんなことにならなかったのでしょうけど
私はぬりつぶしてある●をパッと見つけ、それを打っている間に見つか りにくい○をさがします。第一打鍵を打ち終えるころには第二打鍵が見 つかっているという感じです。
ニモーニックになっていれば忘れても簡単に思い出せて習得のコストが小さくなる可能性は大いにあると思います。,
というわけで提案ですが、下のように40個のキーにひらがなを割り当ててニモーニックを定義して使ってみるというのはどうでしょうか。
仮名と指の位置をシステマティックに対応付けている
橋田さんが提案されたニーモニックでヘルプを表示する設定
eelll/JS に組みこんでいる練習テキストについて記します。
A1(320字まで)は、1課から順番にやって全部覚えることを前提に作って あります。従って既習漢字もできるだけバランスよく出現するように配慮し たつもりです。
続きのA2ですが、作りかけで2年も放置しておりました・・。,
今見たら、150字分ぐらい作ってありました。
練習のやり方に関するノウハウを集めてまとめてみたい。
tc 2.3.1 のマニュアル tc.info の [Tコードの練習]-[練習のヒント] から。
練習のヒント
練習は基本的にはテキストの順に行えばよいのですが、ひらがなをだいたい 覚えたら、数字やカタカナなどは後まわしにして、漢字に進んでも構いません。 漢字が簡単に入力できることを早目に体験しておくと、練習意欲が増すかもし れません。
さて、練習にあたって心がけておくとよい点をあげておきましょう。
- 指の動きでコード(キーの入力順)を覚える。
例えば「kd」で「の」という覚え方ではなく、「右手中指→左手中指」 の動きで「の」というように覚えましょう。
- 入力はリズムよく。
正確に打つことも大事ですが、一定のリズムで入力することがもっと重 要です。EELLLでは、1行の入力が終わるまで入力した文字列が画面上に 現れないようになっていますが、それはリズムを重視した練習を行いや すくするためです。
- 練習は継続的に。
毎日決まった量(時間)を練習しましょう。なお、1日に2時間以上練習し ても効果は上がらないそうです。30分とか1時間とか、時間を決めて効率 的に練習しましょう。
- 覚えたはずの字のコードを忘れても気にしない。
人間誰でも忘れるもの。忘れたらまた覚えればいいだけのことです。
T-Code メーリングリストの過去記事から ([tcode-ml:294], [tcode-ml:453], [tcode-ml:1645])。
「実務で使いながら覚える」レベルまで行くのが結構大変,
使いながら覚えるのをあきらめて、使うときは使う、習うときは習うというふうにしては,
内容を気にすると効率が下がるといわれています,
私の経験から言うと速度より誤 打鍵に重点を置いたほうがいいと思います。それに速度は遅く てもいいからリズムが一定のほうがいいですね。「タタッタタッ タタッタタッ」という 250ms. を目指すよりは「タンタンタン タン」という 350ms. を目指してください。
ゆっくりでもいいか ら、同じリズムでミスなく打てることが大事です。エラーレー トが5%を切らないうちは、スピードを遅くしてでも正確に打鍵 するよう心がけましょう。
doggg/EELLLの練習テキストを使う場合のコツですが、10~20のレッス ンを平行してやるとよいです。ひらがなを卒業する前に漢字の練習を開 始した方がよい、と言いかえた方がいいかもしれません。
数字のレッスンが苦痛になることはよく知られて いますので、ほどほどにサボりましょう。早めに漢字に突入した方が T-Codeのうれしさがわかり、情熱が上がります。
T-Code や TUT-Code の練習プログラムに限らず、 一般のタイピング練習プログラムにおいては、 テキストの問題文と練習者の入力文を比較して、 入力ミスを見つけ出す誤字判定アルゴリズムはたいへん重要なものです。 ここでは、 eelll/JS の誤字判定アルゴリズムについて、 少しだけ触れておこうと思います。
DOGGG や EELLL は、他の多くのタイプ練習プログラムと異なり、 練習者のタイプミスをその場で指摘したり訂正を求めたりせず、 かわりに一行の入力が終わるごとに、まとめてエラーを示すという方法をとっています。 これは、スムーズなタイプ作業の形成を妨げないための配慮であり、 入力したキーをエコーバックしないのも、この理由によるものです [HOY82], [tcode-ml:1090]。
このような設定で、練習者の学習を効率的に支援するためには、 入力されたひとまとまりのキー列から、“正しい”部分と“そうでない部分”を、 練習プログラムの側がうまく判断することが必要となります。
たとえば、『なのはなははるのはななの』という問題文に対して、 練習者は『なのはるなはなるのはなはなの』と入力したとします。 全体をみると両者は異なる文字列ですが、 次のように部分部分をうまくマッチさせると…
打鍵列 | ||||||||
---|---|---|---|---|---|---|---|---|
問題文 | なのは | なは | は | るのはな | なの | |||
入力文 | なのは | る | なは | な | るのはな | は | なの |
『る』と『は』が余分であった一方で、 『は』を『な』とミスタイプしたこと、そしてここが重要なのですが、 それ以外の部分は正しく入力したこと、が分かります。
このような部分部分のマッチングは、T-Code や TUT-Code のように、 (冗長度の低い符号化を行っている) 2 ストローク系入力方式の場合は、 特に重要です。
たとえば、『なのはなははるのはななの』 (『lgkdjglgjgjg;akdjglglgkd』) (QWERTY 配列での T-Code の打鍵列、以下同様) と入力するべきところを、 誤って『lgkkdjglgjgjg;akdjglglgkd』 と打鍵した場合を考えてみます。 このとき、入力キー列を単純に T-Code として解釈すると 『なエ助言流流渋基助言言争d』 となり、ほとんどの文字を誤入力したことになってしまいます。 しかし、もし最初の『lgk』の以降の 『kdjg…』以降の部分が互いに一致することを検出することができれば、 実は誤りは『k』 の 1 打鍵だけだったと (正しく) 判断できるのです。
タイピング練習プログラムにおいて、 まちがった入力を正しいと誤判定するのは、もちろんしてはいけないことですが、 正しいはずの入力を誤りであると誤判定することも、 非常に好ましくないということに注意しておきたいところです。 なぜなら、そのような誤った判定は、練習者の学習意欲を低下させるだけでなく、 文字から打鍵列という反射運動の形成を阻害しかねないと思われるからです。
しかし、だからといって、問題文と練習者の入力キー列を比較するだけで、 誤りを過不足なく正確に指摘することは、必ずしも可能であるわけではありません。 たとえば、『必要』(shhh) という問題文に対して、 練習者のキー入力が『hshhh』であった場合、 (1) 『h必要』(『h』が余分)、 (2) 『hs要h』(『必』を逆に打ち、 さらに『h』が余分――ストロークを逆順に打ってしまうのはよくある間違いです)、 の二通りの解釈が可能となります。 しかし、練習者のミスが実際にはどちらであったのかは、 練習者自身にしか分からないでしょうし、 練習者自身にも必ずしも分からないかも知れません。
ただ、「練習者の入力を最も好意的に解釈して、 最も誤りが少なくなるような判定を (とりあえず) 示す」という方針は、 自然に見え、また、多くの場合でうまく働くように思えます。 そのような理由から …かはよく分かりませんが、 T-Code の世界では、誤字判定に LCS (Longest Common Subsequence) を用いるのが伝統になっています (たとえば [HOY82])。 LCS とは、与えられた二つの列 (ここでは打鍵列) の中の、 互いに共通する部分部分 (の組み合わせ) のうち、 長さの総和が最も大きくなるようなものを指します。
LCS は Unix の diff のアルゴリズムにも用いられている …らしく、 また、LCS を計算するためのアルゴリズムも、 すでに様々なものが研究されている …らしいです。
しかし、T-Code や TUT-Code などの 2 ストローク系入力方式の場合、 単純にキー列の LCS をとるだけでは不十分です。 たとえば、『はるの』(jg;akd) という問題文に対して、 練習者が『kg;aks』と入力した場合を考えてみます。 単純なマッチングでは、真中の 4 打鍵 『g;ak』が lcs となってしまいますが、 入力列『kg;aks』は、T-Code として解釈すると『にるた』となるので、 有効な LCS は (『る』に対応する) 『;a』の 2 打鍵のみになります。
つまり、2 ストローク系入力方式の場合は、 “コードの境界”を意識した比較を行うことが必要となります。 特に、TUT-Code は、コードの長さが一定でない (2 ストローク・3 ストローク・4 ストロークコードが混在する不定長コード) ために、すべてのコードが 2 ストローク (固定長コード) である T-Code に比べて問題が難しくなる傾向がある …かもしれません。
eelll/JS は、 非常に精度のよいすばらしい誤字判定機能を備えているのですが、 以下では、このことを伝えるために、 他の代表的な T-Code または TUT-Code の練習プログラム DOGGG, EELLL, SFCxTYPE をとりあげて、 その誤字判定の様子を比較してみます。
比較には、次の二つの例を用いることにします (この例文は、有名な EELLLTXT の Lesson 1 からとったものです)。
このときの望ましい誤字判定は、 『ksの、が、のが』 である。
このときの望ましい誤字判定は、 『jdの、が、のが』 である。
この二つの例は、特に人工的な例というわけではないことを、 強調しておきたいところです。 たとえば、例 1 は、『の』(kd) を打つつもりで『た』(ks) と打ってしまった状況ですが、 このように、第一打鍵が同じ (別の) 文字を誤って打ってしまうのは、 学習初期に特によくみられるミスです。 また、例 2 も、『の』をとばして先に『、』を打ってしまった状況ですが、 このように 1 ~ 2 文字先の文字を打ってしまうのも、 先読みと打鍵のタイミングが合わない場合によく生じるミスです。
DOGGG は、山田研究室で開発されたタイプ練習プログラムで、MS-DOS 上で動作します。 MacOS にも Doggg for Macintosh として移植されています。 T-Code 専用であり、1 文字のコードの長さを 2 と決め打ちしています (2 ストロークコードの範囲でテーブルをカスタマイズすることは可能)。 したがって、TUT-Code のような不定長ストロークのコード体系には対応していません。
DOGGG は、たいていの場合には (以下の例 2 のように) 望ましい判定を返しますが、 特定の状況で (例 1 のように) 採点の取りこぼし (正しい打鍵列を誤りと判定) をしてしまいます。
このとき、DOGGG は、 『kskd、が、のが』という (望ましくない) 判定結果を返す。 次のように判定を行っていると思われる。
打鍵列 | ||||||
---|---|---|---|---|---|---|
問題文 | k d | jd | ;s | jd | kd | ;s |
入力文 | kskd | jd | ;s | jd | kd | ;s |
判定 | kskd | 、 | が | 、 | の | が |
入力文の先頭の『ks』を typo として読みとばせば、 その次の『kd』が正しい入力と判断できるはずなだが、 実際は『kskd』全体を typo と判定してしまっている。 おそらく、先頭の『k』でマッチングを行ってしまっているようだ。
このとき、DOGGG は、 『jdの、が、のが』という (望ましい) 判定結果を返す。
DOGGG のアルゴリズムを調べてみると、 まず (1) 問題文と入力文を (単純にストローク列として) 比較し、 一致するストロークをすべて拾い出す、 次に (2) そのすべての可能な組み合わせの中から、 最も成績のよいものを一つ選んで (とりあえずの) LCS とする、 最後に (3) この (とりあえずの) LCS に 2 ストロークごとの区切りを入れて、 最終的な判定結果とする、 という段階を踏んでいる …ようです。
このうち、(1) と (2) のステップでは“コードの境界”は無視されています。 (3) のステップの操作が“コードの境界”を意識したものなのですが、ここで 2 ストロークの区切りと “コードの境界”が一致しなかった部分は誤入力としてしまう …ようです。
結局、“コード境界”を意識しない (1), (2) と、 それを意識する (3) がうまくかみ合わない場合 (上記の例 1 のように) に、 最終的な結果が真の LCS にならなくなってしまうのだろうと思われます。
EELLL は、
Emacs 上の T-Code 入力環境
tc2
に付属する練習プログラムです。
もともとは DOGGG と同様に、T-Code 専用であり、
すべてのT-Code文字(漢字)が2打鍵であることを考慮して、
誤打鍵が最も少なくなるような採点結果(のうちの一つ)を出力
[tcode-ml:1522]
するアルゴリズムを採用していましたが、
tc-2.2 から TUT-Code などの不定長ストロークにも対応するようになりました
[tcode-ml:1997]
。
EELLL は、以下のように、 DOGGG がうまく扱えなかった例 1 もうまく処理しますが、 その一方で、例 2 のような癖のある挙動を示すことがあります (tc-2.3.1 現在)。
このとき、EELLL は、 『ksの、が、のが』という (望ましい) 判定結果を返す。
このとき、EELLL は、 『、のjdがjdkd;s』 という (望ましくない) 判定結果を返す。 次のように判定を行っていると思われる。
打鍵列 | |||||||
---|---|---|---|---|---|---|---|
問題文 | kd | jd | ;sjd | kd | ;s | ||
入力文 | jd | kd | jd | ;s | jdkd;s | ||
判定 | 、 | の | jd | が | jdkd;s |
入力文の先頭の『、』が typo なのだが、これを、 問題文を先読みして現れる (2 番目の)『、』とマッチさせてしまっている。 このため、望ましい判定 (『jdの、が、のが』) とはほど遠い結果となってしまっている。 このような先読みは 2 文字程度先まで働いてしまうことがある (e.g. 問題文『の、が、のが』に対して、 入力文『が、の、が、のが』を与えた場合など)。
T-Code メーリングリストで、 (不定長コードに対応する以前の EELLL に対して) この問題が報告され、 一応のパッチが示されている [tcode-ml:1112,1113] が、現在の EELLL には反映されていないようだ。 ちなみに、現在の EELLL はかなり elisp コードが変更されている (おそらく不定長コード対応のために) ので、このパッチは適用できない。
EELLL のアルゴリズムを調べてみると、 まず (1a) 問題文と入力文を (“コード境界”を意識して) 比較し、 一致するコードをすべて拾い出す、という作業と、 (1b) その可能な組み合わせの中から、 その時点で最も成績のよさそうなもの一つに絞りこむ、 という作業を同時に進め、その後に (2) 得られた組み合わせを、そのまま LCS として返す、 ということを行っている …ようです。
(DOGGG と異なり) はじめから“コード境界”を意識した比較を行っているので、 DOGGG で見られた採点のとりこぼしの問題は解消されていますが、 どうも (1b) の「複数の (というか 2 つの) 候補の中から 1 つを選び出す判定条件」 がバグっているのではないかという気がします (ストロークと文字を同じ重みで比較してしまっているのではないだろうか…)。 そもそも、(1a) の作業が完了しないうちに、 (1b) の絞りこみを行うということを (不定長コードを含む 2 ストローク系入力方式の場合にも) してしまってよいものか、筆者には疑問に感じられます。
SFCxTYPE は、大岩元研究室 (慶應大学) で開発されたタイピング練習プログラムです [Takeda2004]。 標準では、TUT-Code と QWERTY ローマ字入力に対応していますが、 T-Code などの他の入力方式に対応させること、 また練習テキストを追加することも可能です。 ソースファイルは公開されていないようであり、 どのような誤字判定アルゴリズムを用いているのかはよく分かりません。
このとき、SFCxTYPE は、 『正誤結果は:[×,○,○,○,○,○] / 正解率は:83%』という判定結果を返す。 望ましい判定なのか望ましくない判定なのか一見分かりづらいが、 ○・× の数と正解率を考えると、 おそらく次のような判定であると思われる。
打鍵列 | ||||||
---|---|---|---|---|---|---|
問題文 | kd | jd | ;s | jd | kd | ;s |
入力文 | kskd | jd | ;s | jd | kd | ;s |
判定 | × | ○ | ○ | ○ | ○ | ○ |
DOGGG と同様に、正しいはずの「kd」が、 先行する「ks」とともに誤りと判定されてしまっているようだ。
このとき、SFCxTYPE は、 『正誤結果は:[×,○,×,○,×,○] / 正解率は:50%』という判定結果を返す。 これも、○・× の順序を考えると、 おそらく次のいずれかの判定であると思われる。
|
|
EELLL と同様に、誤打鍵と見なすべき先頭の「jd」を、 問題文を先読みした部分にマッチさせてしまっているように思える。
eelll/JS は (名前とはうらはらに)、 EELLL のコードを全く受け継がず、大部分は scratch から書かれましたが、 誤字判定アルゴリズムに関しては、後述のように、 DOGGG のものをもとにした素直なものを用いています。 EELLL と同様に、不定長コードに対応しています。 特に、長さ 1 のコードにも対応しており、英文タイプの練習にも用いることができます (eelll/JS は、コードの割り当てられていない文字に対しては、 その文字自身をコードと見なす仕様になっているので)。
eelll/JS は、例 1, 2 のいずれに対しても、望ましい判定結果を返します。
このとき、eelll/JS は、 『ksの、が、のが』という (望ましい) 判定結果を返す。
このとき、eelll/JS は、 『jdの、が、のが』という (望ましい) 判定結果を返す。
eelll/JS の誤字判定は、 まず、 (1) 問題文と入力文を (“コード境界”を意識して) 比較し、 一致するコードをすべて拾い出す、 次に、(2) そのすべての可能な組み合わせの中から、 最も成績のよいものを一つ選んで LCS とする、 最後に、(3) 得られた LCS はすでにコード区切りが入っているので、 これをそのまま返す、 という段階を踏んで行われます。
(DOGGG と異なり) はじめから“コード境界”を意識した比較を行っている (「ストロークを拾い出す」のではなく、「コードを拾い出す」) ので、 DOGGG で見られた採点のとりこぼしの問題はなく、 TUT-Code のような不定長コードにも対応しています (これは EELLL の手法と同様)。 しかし、 EELLL と異なり、一致するすべてのコードの拾い出しが完了した後で、 はじめて最適な組み合わせを探索します。 したがって、ここで得られた LCS は、真の LCS となります。
このことから、eelll/JS は、 どのような問題文と入力文の組み合わせに対しても、 常に最適な判定 (最適なものが複数あるときは、そのうちの一つ) を返します …と作者は思っています。
eelll/JS では、“最適な LCS”は、 “入力文のうち、問題文と一致する文字のストローク数の総和を、 最も大きくするもの”と定義しています。 これは、「一致する文字数を最も大きくするもの」では、 必ずしも、ありません (不定長コードの場合)。
“エラーレート”は、 “(誤りストローク数) / (問題文のストローク数)”で与えます (「(誤りストローク数) / (入力ストローク数)」ではない)。 “誤りストローク数”は、 “(入力しないべきなのに) 入力してしまったストローク数”と、 “(入力するべきなのに) 入力しなかったストローク数”の和、と定義しています。
特に、“誤りストローク数”の定義で、 「実際に打たなかったエラー」と 「実際に打ったエラー」の両方をカウントしている点に注意されたい。
たとえば、EELLL (tc-2.3.1 に付属のもの) では、 問題文『の、が、のが』に対して、入力文『のが、のが』を与えると、 「エラーレート: 0.0%」と判定されるなど、 入力の不足がエラーとカウントされない場合があります。
また、 SFCxTYPE では、 問題文『の、が、のが』に対して、 入力文『の、が、のが。』を与えると、 「正解率は 100%」と判定されるなど、 余剰な入力がエラーとカウントされない場合があります。
これらは、 単なるバグなのか、採点のポリシーなのかはよく分かりませんが、 タイピング練習プログラムとしては、不自然な挙動であるように思います。
eelll/JS の「漢字 → コード」逆変換ルーチンでは、簡単のため、
(1) 一つの文字に割り当てられるコードは高々一つ、
(2) 二文字以上の列にコードは割り当てられない、
という制限を設けています (DOGGG や EELLL と同様)。
したがって、一般的なローマ字入力には、現状では対応していません
(たとえば、『し=si
』かつ『し=shi
』
といった定義ができず、
『った=tta
』のような定義もできない)。
現在の eelll/JS の誤字判定能力を損なわずに、 この制限を取り除くのはあまり容易ではないように思われます。 たとえば、自明なアルゴリズムとして、 “与えられた問題文に対して、すべての可能なコード列を求め、 その各々に対して、入力文との LCS をとる”という手法がすぐに思い浮かびますが、 これではすぐに組み合わせ爆発を起こしてしまって、 だめである …ように思います。 SFCxTYPE はこの点をうまくクリアしていて、 ローマ字入力にもきちんと対応しているようです。 (一体どんな方法をとっているのだろう?)。
とはいえ、T-Code と TUT-Code は、 ともに「1 文字 1 コード」というシンプルなコーディングを採用しており、 これらの後に開発された 2 ストローク系入力方式も、 (おそらく T-Code や TUT-Code をお手本としてのことだろう) ほとんどがこのポリシーに倣っています (たとえば G-Code, 超絶技巧入力など)。
なので、「主な漢字直接入力方式のための練習環境の整備」を目的とした eelll/JS としては、現状で十分であると考えてもよいのでは …と思っていた …のですが、最近開発されている比較的新しい漢字直接入力方式には、 (入力のしやすさや、誤入力への対処を目的に) 一つの文字に複数のコードを割り当てる方式が徐々に増えつつある (たとえば phoenix 配列 や 奏コード || 漢直ノート――奏コード のかな部分) ことを考えると、あまり逃げてばかりもいられないような気がします…。
通常、練習者が入力したキーは画面には表示されず、カーソルのみが移動して入力位置を示す。練習者は提示された練習行全体を終わりまで打ち、入力途中ではエラーがあってもシステムからはそれを知らされず、中断も受けない。これは、エラーをいちいちその場で訂正させることはタイプのリズムを破壊し、練習者が打鍵の正しさを意識するようになり、無意識下でのリズミカルな動作であるタッチタイプを実現するためには好ましくないと考えられるからである。
エラーチェックは、練習行と入力行の間の LCS (Longest Common Subsequence) を計算し、各行と LCS との相違を調べることによって生じたエラーの解析を行なうアルゴリズムを用いている
入力ミスを瞬時にフィードバックしてはいけない,
ひとつの入力ミスにより、先に進まないようにしてはいけない,
入力をエコーバックしない方がよい. の三点。 その根拠として、山田先生のパイプライン仮説を挙げている。
というのは、要するにdiffのアルゴリズムです。
問題は誤字の検出です。2ストローク入力の場合、どのように やったらよいか未だ検討していません。どなたか考えませんか。 なかなか人間なみの検出が出来ません。ニューロ等の最近の技術が使えないか と思います。人間のようにグローバルに見るアルゴリズムが必要そうです。
前田@EELLLの採点アルゴリズム作成者です。
EELLLの場合には、入力された打鍵列に対して可能な変換すべてのうち、 最も誤打鍵数が少ないものを出力しています。
DOGGG由来のアルゴリズム は、打鍵列vs打鍵列の比較をしていたために減点が高い採点結果が出が ちだったのですが、EELLLではすべてのT-Code文字(漢字)が2打鍵である ことを考慮して、誤打鍵が最も少なくなるような採点結果(のうちの一 つ)を出力します。
TUTコードも使える Emacs 用Tコードドライバー tc-2.1 に付属の練習ソフトウェアであるEELLLを TUTコードでも練習できるようにしてみました。
表示の部分は2ストロークにしか対応していませんが、 入力した文字列が正しいかどうかの判定では 3ストローク以上でも正しく扱えるはずです。
EELLL で TUT コードの練習ができるようにした。
SFCxTYPE は, あらゆるタイピング方式にも対応したタイピングソフトウェアを目標としている. 現在は, かな入力とTUT-Code に対応しているTUTコード練習環境の提案
一度おぼえた文字をわすれないよう、反復練習するためのテキストを生成するツールとのこと。 熟語のリスト (pubdic などから作成すればよい) と、 練習したい漢字のリストを与えると、 その漢字だけからなる熟語を並べた練習テキストを生成する。 たぶん UNIX 用。 T-Code サーバ tserv に付属。