Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save stakiran/a6cf6c01afb409ce9491a50d78b2025d to your computer and use it in GitHub Desktop.
Save stakiran/a6cf6c01afb409ce9491a50d78b2025d to your computer and use it in GitHub Desktop.
170905_092647 Text Expansion でソフトウェア的にスピードワープロを実現する(アイデア)

スピードワープロ?

スピードワープロ ? 1秒間に5字打つ

字幕放送に使われてるワープロ手段。喋るよりも速く打てる。パソコンではなく専用のワープロ装置を使う。習得方法は学院で集中的に勉強すること。

入力の肝は キーの同時押し一パターンに単語を割り当てる こと。たとえばキー10個を使う場合、押し方の組み合わせは 2^10 = 1024 通りあるので、1024個の単語が使える。同時押しは一回の押下で押せるため、 (習熟を極めると)一打で1024個の単語を打てる ことになる。

容易に想像がつくように、スピードワープロで日本語を支障なく打てるようになるのは非常に難しい。だからこそ学院で専門的集中的に訓練しなければならない。

TE(Text Expansion)とは?

単語(トリガーワード)とテキストの組(この組を パターン と呼ぶ)を登録しておき、その単語を入力すると即座にテキストが貼り付けられるというテキスト入力方式。

  • パターン例: HTML の li タグを入力する例
    • トリガーワード: li[
    • テキスト: <li></li>

辞書変換や定型文ツールとは違い、余分なウィンドウは表示しないので、たとえば Windows のファイル名編集中でも貼り付けできる。

TE で実現できるくね?

ふと思ったのは、TE でスピードワープロを実現できるんじゃないかってこと。簡単に検討してみる。

これを便宜上 SWTE(Speed Word-processor with Text Expansion) と呼ぶことにする。

案1: 文字キー26個を用いる場合(同時押し不可)

表現可能なパターン数は以下のとおり。

  • トリガーワード1文字: 26個
  • トリガーワード2文字: 26*26= 676個
  • トリガーワード3文字: 26*26*26= 17576個
  • トリガーワード4文字: 26*26*26*26= 456976個

3文字以内までを使うとしたら、26+676+17576=18278 個のパターンを表現できる。国語辞書が(辞書にもよるが手元にあるものだと)7万語くらいなので、やや足りないか。それでも頻出語に絞れば、日常的なタイピング用途には十分機能しそうな気はする。

この案では 同時押し は不可能である。たとえば、abcacb は異なるパターンとなる。スピードワープロは同時押しベースになっているため、ここに従うなら、abcacb も同一パターンとして扱う必要がある。案2に続く。

案2: 文字キー26個を用いる場合(同時押し可)

同時押しが不可能な案1に代わり、同時押しに対応させてみると、表現力は以下のようになる。

  • トリガーワード1文字: 26個
  • トリガーワード2文字: C{26,2}= 325個
  • トリガーワード3文字: C{26,3}= 2600個
  • トリガーワード4文字: C{26,4}= 14950個

3文字以内では 3000 パターンにも満たなくなってしまった。

ここで一つ例を挙げる。トリガーワード4文字以内で運用するとして、「asdfghjkl」の9個のキーのみ用いる場合を考える。表現可能なパターン数は、以下のとおり。

  • トリガーワード1文字: 9個
  • トリガーワード2文字: 36個
  • トリガーワード3文字: 84個
  • トリガーワード4文字: 126個
  • トリガーワード5文字: 126個
  • トリガーワード6文字: 84個
  • トリガーワード7文字: 36個
  • トリガーワード8文字: 9個

合計すると 9*2+36+2+84*2+126*2=476 個のパターンを表現できる。文章入力をカバーするには足りない数だろう。一方でスピードワープロは3000語以上表現できるらしいので、もう少し仕組みを工夫する必要がある。

SWTE で実現する上での課題

ここまで簡単に検討しただけでも多数の課題が見つかる。挙げてみよう。

  • トリガーワードは何文字まで使うか?
    • 実用的には最低3文字ほしい
    • 3文字でも学習・習熟コストはかなり高い……
  • 学習コスト、習熟コストの高さ
    • 何千ものパターンを覚える&瞬時に思い出す瞬発力を付ける……気が遠くなりそうだ
  • どのトリガーワードにどのテキスト(単語)を割り当てるか
  • 実装上の技術的課題
    • 通常の文字入力と SWTE による入力をどうやって区別・共存させる?
      • キー入力を全てフックして制御することになる?
      • vim の i/Esc みたいにモードで切り替えるのがベター?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment