1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ローマ字を打つそばから日本語に。Windows IME「Yomitsugu」を作っています

1
Posted at

APIwokakuninshitekudasai. と打つと、「APIを確認してください。」になる。

英字を挟むたびに入力モードを切り替えるのが面倒で、Windows向けのIME「Yomitsugu」を作っています。ローマ字を打ち続けると、入力中の文字列が日本語へ変わっていきます。

Yomitsugu のバナー

ダウンロードとインストール手順はGitHubへ

英字を交えた文章を、そのまま打つ

ローマ字の打鍵に合わせて日本語へ変わっていく入力デモ

候補は入力中に変わります。表示された文章でよければ Enter で確定し、別の候補を選びたいときは Space を押します。

入力 変換例
kyouhaiitennkidesune. 今日はいい天気ですね。
APIwokakuninshitekudasai. APIを確認してください。
softwarewokoushinsuru softwareを更新する
insuto-ru インストール
aninsuto-ru アンインストール
yajirushi →

小さい「っ」は ltu、句点「。」は . でも入力できます。記号や外来語も辞書から候補を出します。

名前や用語をユーザー辞書に登録する

仕事で使う名前やプロジェクト名は、ユーザー辞書に登録できます。たとえば「よみつぐ」に「Yomitsugu」を登録すると、次の変換から候補に出ます。

「よみつぐ」に「Yomitsugu」を登録したユーザー辞書の例

設定画面の「ユーザー辞書を編集」から開き、「読み」「単語」「品詞」を入力します。「登録・更新」を押して一覧へ追加し、最後に「保存」で反映します。

一覧で選んだ単語の修正や削除、TSV形式の辞書の取り込みにも対応しています。

選んだ候補を覚える

候補を選んで確定すると、その読みと選択した語をPC内に記録します。次に同じ読みを入力したときは、選択回数と最近の選択をもとに候補の順番を変えます。

設定画面の「候補の選択を学習する」で切り替えられます。「学習履歴を削除」を押しても、ユーザー辞書に登録した単語は残ります。

辞書の更新状況も設定画面で確認する

公開辞書の最終更新・最終確認日時と、アプリの更新ボタンを表示した設定画面

「公開辞書を確認・更新」を押すと、公開されている辞書データを取得します。一般語・外来語・記号など、約30万項目を同梱しています。

画面には「最終更新」と「最終確認」を分けて表示します。確認した結果、辞書の内容が同じなら、最終更新日はそのままで確認日時が進みます。確認に失敗した場合も、前に取得した辞書を使い続けます。

アプリ本体は「アプリを更新」から更新できます。新しい版があればインストーラーをダウンロードし、ファイルを検証してから起動します。

変換はPC内で処理します。辞書やアプリの更新時にも、入力文・ユーザー辞書・学習内容は送信しません。

インストールするには

  1. GitHubのインストール案内からWindows用インストーラーをダウンロードします。
  2. .exe を実行し、画面の案内に従ってインストールします。
  3. Win + Space でYomitsuguを選びます。

設定は通知領域のYomitsuguアイコンを右クリックして開きます。アイコンが見当たらなければ、スタートメニューの「Yomitsugu → 設定と辞書」からも開けます。

Windows x64向けの評価版です。インストールには管理者権限が必要で、未署名のためWindowsの警告が出る場合があります。

変換エンジンを入力先アプリから分離した

ここからは実装の話です。

Windowsの入力欄との接続には、テキスト入力の仕組みであるTSFを使っています。その中でキー入力や候補表示を担うのがTIP(Text Input Processor)です。TIPのDLLは入力先アプリのプロセス内で動きます。

一方、変換エンジンにはSwiftのランタイム、辞書、モデルが必要です。これらは専用の ime_engine_host.exe にまとめ、TIPとはパイプで通信させています。

この構成なら、辞書やモデルはIMEのインストール先に置けます。変換エンジンの終了時も、TIPが保持している編集中の文字は残ります。

かな漢字変換には AzooKeyKanaKanjiConverter の辞書とZenzaiのローカルモデルを使い、Windows向けの統合には myime を利用しています。公開辞書にはMozc・EDRDG・Unicode由来のデータも含まれます。

遅れて届いた候補で入力を巻き戻さない

変換中も次の文字は打てます。たとえば kakunin の結果が届いた時点で、すでに kakuninshite まで進んでいることがあります。

そこで、未処理の要求は最新の入力だけを残し、戻ってきた結果が現在の入力に対応するかを確認します。文字列だけでなく、入力の版、前後の文脈、候補を選ぶ操作が進んでいないかも判定します。

if (request.raw_text != raw_text_ ||
    request.revision != revision_ ||
    request.context_generation != context_generation_ ||
    request.interaction_generation != interaction_generation_) {
  return false;
}

これは Session::ApplyCandidates の判定です。手で選んだ候補を、後から届いた結果が上書きするのも防ぎます。

これから直していくところ

文脈に合った同音語の選択や、複数箇所にあるタイプミスの補正は改善を続けています。文節の長さを変える操作と、確定後の再変換も開発中です。

ソースと対応範囲は GitHub、各辞書やモデルの出典・ライセンスは THIRD_PARTY.md にまとめています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?