Products:
T Code IME for Windows
Android 用 T-Code IME として T-Code IME for Android をリリースする際に, エンジン部分(T-Code Engine)を取り出し, 各プラットフォームで IME を提供するという構想がありました. とはいえ, Windows 用の IME には Text Services Framework という C++ 用に提供されたライブラリを使用するという制約上, Android 用と比較すると複雑な構成です. IME 本体である TCode IME for Windows は薄いラッパー バックグラウンドプロセスに TCode Proxy TCode Proxy は別の Java Thread (Pekko Actor) として T-Code Engine のサーバーを立てる そしてそれぞれ Windows Named Pipe と gPRC プロトコルを用いてローカルマシン上で通信する T-Code IME for Android がこうした複雑な構成とならなかった理由は,ひとえに Android アプリが Kotlin で書かれており, 同プロセス上に Scala で実装した T-Code Engine を直接利用できたためでした.
T-Code IME for Windows 0.1.0-RC1
Windows 用の T-Code IME のテストリリースができました(Link). 注意点 JRE(or JDK)が必要で, PATH/JAVA_HOME の設定が必要. 概ねインストーラーが設定してくれますが, 設定されない環境もあるかもしれません. IME はキーボードとして追加が必要です. コントロールパネルより, 言語と地域から, 日本語の設定で, 下方にキーボードの設定があります. そこに追加する必要があります. IME を動かすにはインストールされた T-Code IME Proxy を起動する必要があります. T-Code モード以外は未サポート (半角英字にするときは IME の切り替えでいいかな,と…) 問題があれば私に DM か GitHub にて Issues に登録していただけると幸いです.
T-Code IME for Android
Niche App Lab がリリースしている, T-Code IME for Android の製品情報です. 以下, T-Code IME for Android の特徴です. [○ 高速] 2 キーストロークで多くの常用漢字を含む最大 1600 字をカバーします. [○ プライバシーに配慮] 入力を一切学習しません. 予測変換も一切ありません. 入力対象アプリ内の情報も一切読み込みません. [○ 思考を中断させない] 無変換直接入力のため, 文節の変換操作がありません. 入力後に変換のため思考が逆行する, ということもありません. [○ 物理キーボード対応] 物理キーボードを接続して使用することができます. 仮想キーボードは最小化できます. Qwerty/Dvorak レイアウトに対応しています. [× 急峻な学習曲線] 慣れると高速である一方で, キーストロークを覚えるには反復訓練が必要です. もう少し T-Code について知りたい方, こちらのページをご一読ください. T-Code IME for Android の使い方 インストール後の初期設定 交ぜ書き変換について ダウンロード 以下のストアで無料で入手できます. アプリ内広告は, 設定画面から広告表示ボタンを押したときのみ再生されます. Store Link Google Play Amazon (JP) Appstore Amazon Appstore
T-Code-Engine 0.7.2
t-code-engine 0.7.2 をリリースしました. 前回のリリースからオブジェクトの API が変更になりました. 主な変更点は以下のものです. エンジン種別の追加 辞書ファイル/SQLite データベースの利用 部首合成機能の終端指定 エンジンの種類 T-Code-Engine では, ユーザー入力をまとめて変換する BatchEngine と, ユーザーによる入力と選択をインタラクティブに実行できる InteractiveEngine があります. この種別とは別に, Zip ファイル辞書から SQLite database を生成しこれを使用するSQLite と, Zip ファイル辞書を直接参照する Archived の種別があります. まとめると, エンジンの選択肢は以下の通りです. SQLiteInteractiveEngine (T-Code IME for Android で使用中) ArchivedInteractiveEngine SQLiteBatchEngine ArchivedBatchEngine Archived の用例 Archived では, uPickle を利用して msgpack 化し Zip 書庫にまとめた辞書ファイル (src/main/resources/tcode_dict.zip)を使用します. 辞書データはインスタンスを作成した際にメモリ上に展開されます. val engine = new ArchivedInteractiveEngine with QwertyLayout SQLite の用例 一方 Anroid 上の IME はこのエンジンインスタンスの頻度が高く, 書庫ファイルへの頻繁なアクセスは, IME を要求するたびに ロード時間を増加させるという欠点(IME ラグと呼ばれます)があります. そのため, T-Code IME for Android では SQLite 版を使用することで, Zip 書庫の読み込みを初回のみに限定し, アプリ専用のストレージに database ファイルを作成し, IME の機能をコールする際にデータベース問合せを実行します. ...
T-Code-Engine 0.4.x [obsolete]
この記事は古いバージョン(0.4.x)に基づいて記述されています. 最新版は T-Code-Engine タグにてご確認ください. 主な機能 T-Code-Engine では, ユーザー入力をまとめて変換する BatchEngine と, ユーザーによる入力と選択をインタラクティブに実行できる InteractiveEngine があります. BatchEngine の実行例 scala> import io.github.nicheapplab.tcodeengine._ scala> val engine = new BatchEngine with QwertyLayout scala> engine.convert("hgjdkdhgjdhgjgjd;gjdkd;gjdja;g") val res0: String = "で、ので、では、を、のを、とを" with QwertyLayout の代わりに with DvorakLayout を指定することで, Dvorak キーボードで入力した文字列を日本語に変換することができます. また, 交ぜ書き変換や部首合成にも対応しています. 交ぜ書きは prefix を使用せずに, BatchEngine.convert で変換した結果に対して, BatchEngine.mixed.convert を適用します. 2 つ目の引数は活用の指定です. scala> engine.mixed.convert("くわえ","る") val res0: Array[String] = Array("加える") scala> engine.mixed.convert("記しゃ") val res1: Array[String] = Array("記者") 部首合成では, 基本となる二字の合成のほか, “jf” による再帰的合成にも対応しています. scala> engine.combi.composite('上','七') val res0: Option[Char] = Some('虍') scala> engine.convert("jfjfibhtpd") val res1: String = "劇" InteractiveEngine の実行例 scala> import io.github.nicheapplab.tcodeengine._ scala> val ie = new InteractiveEngine with QwertyLayout scala> "fjyijstt".foreach(ie.put(_)) scala> ie.inflexRight() scala> ie.convert() scala> ie.selectCandidate(0) scala> ie.commit() val res0: String = "記者" この例では, “fj"で交ぜ書き変換モードに入り, “記しゃ"を"記者"に変換しています. 例では短縮のために foreach を利用していますが, 実際に使用するときには各字を,ie.put('f') のように 1 字ずつ入力することが想定されています. ...
部首合成機能の終端指定
本記事では, T-Code-Engine ならびに T-Code IME for Android において, 部首合成の終端指定が必要になった理由について解説します. T-Code-Engine では終端指定はconvert() の呼び出しにて, T-Code IME for Android では SPC を押すことで指定することになります. 部首合成機能の考え方 部首合成の基本作用はまとめると, 以下のものがあります. (足し算)部品となる漢字の合成 (例: 木 + 目 = 相) (引き算)合成された漢字から特定の部品を取り除く (例: 頭 - 前 = 頁) (論理積)合成された漢字 2 つから共通部分を取り出す (例: 頭 ∧ 題 = 頁) (交換)類似形状の文字に入れ換える (例: 工(漢字) = エ(カナ) ) (部分合成)合成された文字から部品を取り出し,他の部品と合成する (例: decomp(頭) + 工 = 項) そしてこれら単体ないし帰納的に組合せて目当ての漢字を入力する機能が部首合成です. 問題となるのは, 4. 交換 が単一引数であることです. 後置と前置 部首合成機能は Prefix ▲(“jf”) を用いて呼び出します. TC のデフォルトは後置ですが, T-Code-Engine ならびに T-Code IME for Android では前置を採用しています. TC は Emacs 上で動作し, Emacs では編集中のバッファを elisp の関数を用いて操作することは一般的に行われるため, これは自然な実装といえます. ...
T-Code IME for Android のインストール
インストール Play ストアからインストールし,起動すると以下の画面になります. ここで, 「T-Code の有効化」を選択すると, 以下の画面に遷移します. この画面で T-Code IME の右側のスライダーで On にします. 続いて, アプリから「T-Code を選択」することで, 利用することができます. 試しに, 「IME をテストする」のテキストエリアを選択すると, 以下のキーボードが表示されます. このキーボード上でキーストロークを入力することで, テキストエリアに文字が入力されます.
T-Code IME for Android の交ぜ書き変換
交ぜ書き変換 T-Code IME では前置式の交ぜ書き変換が利用できます. キーボードで"fj"と入力することで, 交ぜ書き変換モードに移行します. ここで,「試す」を入力してみましょう. まずは「ためす」を入力します(“kslc,f”). 次に変換対象の活用の範囲を指定します. キーボード左下部の"←“ボタンにタッチすると, 交ぜ書きモードでは活用指定モードになります. ここで表示される「|」より右が活用の範囲になります. 「|」が表示されていない, または「|」を末尾に移動させることで, 活用がないものと指定することができます. SPC をタップすることで変換候補が表示され, 候補をタップで入力を確定します.
T-Code 入力について
本ページでは日本入力法である T-Code について簡単に説明します. T-Code の概要 日本語入力には様々な方式があります. Windows PC を使用している圧倒的多数のユーザーはローマ字を入力し, ローマ字テーブルに基づいてひらがなに自動的に変換し, そこからユーザーが指定した漢字への変換する, という方式をとっています. 他方で, 一部の少数ユーザーは SKK 方式を使用しているかもしれません. これはひらがなの入力を基本とし, 漢字変換を要する箇所だけ指定し, 変換を行う方式です. T-Code 入力はこれらと根本的に異なり, ひらがなも漢字も直接入力してしまう, というものです. 平たくいえば, ひらがなやカタカナ, 記号, 漢字といった要素をすべてテーブルに格納し, その座標指定を左右の手にそれぞれ対応した 2 つの 4x5 のキーボード領域で行います. 方式・ IME キー・かな対応 漢字変換 Microsoft IME, ATOK, Google 日本語入力 ローマ字入力 かな入力 読み変換 SKK ローマ字入力 読み変換, 開始・終了位置を指定 T-Code 無連想式直接入力 無連想式直接入力, 交ぜ書き変換, 部首合成 T-Code の優位性 まず,漢字変換という手順を踏む必要がない点に優位性があります. 逆に通常の漢字変換を介した入力では, 一文を入力した後に以下の手順になるでしょう. 文頭から順に 無変換区間か変換区間かを指定し 変換区間では正しい候補を選択する これら 3 つは思考を強制します. 特に文章作成においては複数文を入力することから, 高頻度で 1.による思考のジャンプが発生するため疲労につながります. これと比較すれば SKK では各文に対して入力順に漢字変換区間を指定し,変換を行いながら入力していく方式であるため, 思考のジャンプは発生しない優位性がありますが, それでも正しい候補を選択するために 3.による思考の脱線が発生します. 無連想式直接入力ではこれらがないため,思考に沿った入力を実現することができます. ...