-
-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add implementation plan document for segment-wise edit
- Loading branch information
Showing
1 changed file
with
32 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# 文節エディットの実装 | ||
|
||
AzooKeyKanaKanjiConverterはモバイル向けのIMEとして実装したため、デスクトップ向けの高度な機能をサポートしていない。その代表的な部分が文節ごとの変換である。 | ||
|
||
通常のデスクトップIMEでは、変換中に左右の矢印キーを入力することで文節を移動し、この単位ごとに変換を行うことができる。この機能を安価に実現する方法を検討したい。 | ||
|
||
## 実装概要 | ||
|
||
AzooKeyKanaKanjiConverterはライブ変換における自動確定を実現するため、「最初の文節」の情報を返している。これを利用することで「最初の文節」を得ることはできる。 | ||
|
||
* ただし、学習によって文節の情報が失われることに注意する必要がある。AzooKeyKanaKanjiConverterでは単に単語の結合をユーザ辞書的に登録することで学習を実現するため、学習を続けていくと「長い1単語」が多く追加され、文節の情報を失ってしまう可能性がある。これを防ぐ方法は、現状記録していない文節区切りの情報を学習時に追加で記録する以外ない。 | ||
|
||
そこで、「最初の文節」にいる状態で次文節(第二文節)に移動するときは、単にこの文節を確定し、右側のテキストに対して変換処理を行うことを考える。これはシンプルだが、前文節に戻ることができないのが若干の不安感を生じる。 | ||
|
||
第二文節から前文節(最初の文節)に戻れるようにするためには、前文節を見かけ上未確定とする方法が考えられる。ただしこの場合、最初の文節の変換情報が失われているため、再計算が発生する。 | ||
|
||
* AzooKeyKanaKanjiConverterが内部で管理しているキャッシュデータを適切にクライアントサイドに露出させることによってこれを回避することができるかもしれない。 | ||
|
||
さらに問題なのが、第二文節を編集していた場合である。この場合、第二文節の編集結果を維持したまま、最初の文節を編集できる必要が生じる。この実装はAzooKeyKanaKanjiConverter側でかなり大きな実装の変更を必要とするため、どこまで可能かわからない。 | ||
|
||
* とはいえ、特定の範囲に対してCandidateを外挿する、という話なので、実現できなくもなさそう。 | ||
|
||
第三文節以降に対してはこれを繰り返すことで扱える。 | ||
|
||
## 進め方 | ||
|
||
以下を順次実装する。 | ||
|
||
* 「第一文節から第二文節に移動し、第二文節の変換候補を変更した場合」に第一文節を確定するように変更する | ||
* 「第一文節から第二文節に移動し、第一文節に戻った場合」の最適化のため、キャッシュをクライアント側で管理できるAPIを整備する | ||
* 「第一文節から第二文節に移動し、第二文節の変換候補を変更し、第一文節に戻った場合」の最適化のため、入力の特定範囲に対して`Candidate`が指定されているケースの変換アルゴリズムを実装する | ||
* 以上を「第二文節から第三文節」のようなケースでも適用するよう修正する |