Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

変換結果が変換候補の順序に影響を与えないようにするための設定 #250

Closed
s3igo opened this issue Dec 10, 2024 · 7 comments
Labels
enhancement New feature or request

Comments

@s3igo
Copy link

s3igo commented Dec 10, 2024

変換結果がユーザー辞書に登録されないようにするための設定としてプライベートモードがありますが、
プライベートモードを有効にしていても変換結果は変換候補の順序に影響を与えます。

例えば、▽あいの状態でSpaceを押すと▼愛に変換されますが、一度▽あい▼藍として変換し、確定した後に▽あいの状態でSpaceを押すと、▼藍に変換されることになります。
これは、過去の変換結果が変換候補の順序に影響を与えていることを意味するかと思います。

頻出単語の変換の回数(変換候補の何番目に出てくるか)を覚えておいて、変換候補を見ずに決め打ちするスタイルの場合、この振る舞いを永続的に無効化する設定があればより便利だと思います。

@mtgto
Copy link
Owner

mtgto commented Dec 10, 2024

@s3igo Issueありがとうございます。

例えば、▽あいの状態でSpaceを押すと▼愛に変換されますが、一度▽あい▼藍として変換し、確定した後に▽あいの状態でSpaceを押すと、▼藍に変換されることになります。
これは、過去の変換結果が変換候補の順序に影響を与えていることを意味するかと思います。

これはプライベートモード時の変換結果 (例: 藍で変換した) がプライベートモード時の変換候補の登場順に反映されるということでしょうか。
それとも非プライベートモードでの変換結果 (例: 藍で変換した) がプライベートモードでの変換候補の登場順に反映されるということでしょうか?

実装上はプライベートモードでの辞書は通常モードの辞書と分離しており、プライベートモード時の変換候補の順序には影響ないようにしているつもりです。なので後者の「非プライベートモードでの変換結果 (例: 藍で変換した) がプライベートモードでの変換候補の登場順に反映される」なのかなと思っていますが、合っていますでしょうか。

もし前者の場合であればバグの可能性がありそうです。

@s3igo
Copy link
Author

s3igo commented Dec 10, 2024

説明が足りずすみません。前者の

プライベートモード時の変換結果 (例: 藍で変換した) がプライベートモード時の変換候補の登場順に反映される

ことを意図しています。

後者について、プライベートモードはユーザー辞書を参照するため、

非プライベートモードでの変換結果 (例: 藍で変換した) がプライベートモードでの変換候補の登場順に反映される

というのは、非プライベートモードでで変換すると、ユーザー辞書の送りなしエントリにあい /藍/が追加されるため、その後プライベートモードにしたときの変換候補の登場順に影響を与えるのが規定の動作だと認識しています。

追加で試してみたところ、一度プライベートモードを無効にし、再度有効にすることでプライベートモードでの変換候補の順序が正しくリセットされるようでした。 ソースコードを確認できていないので推測になりますが、変換結果がメモリ上に載っている状況で発生するバグだと思います。

macSKK-250-repro.mov

Sticky Shiftあり、プライベートモード有効での動画です。
3つ目がになっていますが、Spaceを一度しか押していないためになるのが規定の動作ではないでしょうか?

@mtgto
Copy link
Owner

mtgto commented Dec 11, 2024

3つ目が藍になっていますが、Spaceを一度しか押していないため愛になるのが規定の動作ではないでしょうか?

録画ありがとうございます。プライベートモード時はたしかに一つ目の変換候補は変わらず「愛」になるはずですが、変換順序が変わっているようにみえますね。
最初にコメントする前にコードを読んでみたのですがプライベート時は別辞書を参照するようになってそうでしたし、試しに自分でも試してみたのですが再現しませんでした。

2024-12-11.22.36.46.mov

なんらかの理由でプライベートモードが見る辞書が通常モードの辞書になってしまっているなどのバグの可能性を疑って調べてみます。

@mtgto mtgto added the bug Something isn't working label Dec 11, 2024
@mtgto
Copy link
Owner

mtgto commented Dec 11, 2024

すみません、私が勘違いしていました。

いまのプライベートモードでの変換候補の順序に関する処理はこのようになっています。

まず変換確定時には次のようにユーザー辞書・プライベートモード辞書に保存します

  • 非プライベートモードでの変換が確定したらユーザー辞書に保存する
  • プライベートモードでの変換が確定したらプライベートモード専用のオンメモリ辞書に保存する

変換候補を探すときには次のように探します

  • 非プライベートモードではユーザー辞書にあればその順序、それに続けて他の辞書から順番に引いた順序
  • プライベートモードでは ユーザー辞書にあればその順序、それに続けてプライベートモード辞書にあればその順序 、それに続けて他の辞書から順番に引いた順序

この太字の部分を勘違いしていました。なので @s3igo さんのいうように実装されていました。

私の環境で再現しないと思っていたのは非プライベートモードで「あい」を変換していた場合はそちらの順序の方が優先されるため、毎回「合」が最初に候補になっていました。


Issue最初にありました「頻出単語の変換の回数(変換候補の何番目に出てくるか)を覚えておいて、変換候補を見ずに決め打ちするスタイルの場合、この振る舞いを永続的に無効化する設定」はたしかにあってもいいかなと思いました。

その場合、プライベートモード時にはユーザー辞書の変換履歴も見ないほうがうれしいでしょうか?
いくつか候補がありそうで、そのうちどれを選択可能にするといいかなと考えようと思いますが、もし希望などありましたら教えていただければ助かります。

  1. プライベートモード時はユーザー辞書の変換履歴は見ないがプライベートモードで入力した変換履歴は見る
  2. プライベートモード時はユーザー辞書の変換履歴は見ないしプライベートモードで入力した変換履歴も見ない (SKK辞書の読み込み順に検索する)
  3. プライベートモード時はユーザー辞書の変換履歴を見てそのあとにプライベートモードで入力した変換履歴を見る
  4. プライベートモード時はプライベートモードで入力した変換履歴を見てそのあとにユーザー辞書の変換履歴を見る

など

1はプライベートモードで何度も同じ入力をするなら嬉しいかも…? と思いました。一番無難かもしれないと個人的には思っています。

2はプライベートモードでは一切変換候補を記録しないモードです。変換履歴を利用したくない人向けでしょうか…。

3は今の変換順序です。

4は3よりも自然かも? と思って案に挙げてみました。

4をデフォルトにしつつ記録させたくないときは1か2を設定で選択できてもいいのかな…? と考えています。

@mtgto mtgto added enhancement New feature or request and removed bug Something isn't working labels Dec 11, 2024
@s3igo
Copy link
Author

s3igo commented Dec 12, 2024

回答ありがとうございます。

1~4に含まれていない選択肢で恐縮ですが、「5. プライベートモード時はユーザー辞書の変換履歴を見てプライベートモードで入力した変換履歴は見ない」振る舞いをデフォルトにしつつ、設定で2を選べるようにするのがいいかと思います。

なぜなら、プライベートモードを使うモチベーションは「入力を学習されたくない」というもので、見方を変えると、「同じ入力に対して変換候補の順序が常に一定であってほしい」ということになります。この視点に立つと、プライベートモードにおいて、変換履歴によって変換候補の順序が変わるのは、たとえそれが永続化されないプライベートモード専用の辞書によるものだとしても避けたいところです。

つまり、プライベートモード専用のオンメモリ辞書を完全に廃してしまってもいいのでは?というのが私の考えで、私の動画を引き合いに出すと、;ai⎵↩という入力でに変換されたのなら、今後も常に;ai⎵↩の結果はであって欲しいわけです。

この振る舞いを採用すると、「ユーザー辞書に書き込みたくないが変換履歴は利用したい」というケース(提案いただいた1, 3, 4の設定)に対応できなくなりますが、この設定が有効に働く場面はなかなか存在しないと思います。

設定に関しては、5と2を切り換えるためにユーザー辞書の項目にも他の辞書と同様にトグルスイッチを設けてon/offを切り換えられるようにするのが自然かもしれません。非プライベートモードでは強制的にユーザー辞書がonになるようにする、もしくは非プライベートモードかつユーザー辞書offの時はユーザー辞書が書き込み専用で使われることを明示するといった対応が必要になるかと思われます。

@mtgto
Copy link
Owner

mtgto commented Dec 13, 2024

コメントありがとうございます。
作者である私がプライベートモードの価値をあまりわかっていなかったため、こうやって提案していただけると非常に助かります。
(メリットはユーザー辞書に「保存されないこと」だけだと思っていた)

ご提案いただいた「5. プライベートモード時はユーザー辞書の変換履歴を見てプライベートモードで入力した変換履歴は見ない」をデフォルトの動作に変更し、設定として「2. ユーザー辞書の変換履歴も見ない」が選択できる、でやろうと思います。

1, 3, 4についても設定として切り出す際の実装自体はそこまで重たいものではないので、今回は見送りますが、他のSKK入力系ではこういう設定になっている、などで将来追加で設定できるようにするかもしれません。

@mtgto
Copy link
Owner

mtgto commented Dec 22, 2024

v1.6.0で対応しました。 https://github.com/mtgto/macSKK/releases/tag/1.6.0
予定通り「5. プライベートモード時はユーザー辞書の変換履歴を見てプライベートモードで入力した変換履歴は見ない」をデフォルトの動作に変更し、設定として「2. ユーザー辞書の変換履歴も見ない」が選択できるようにしました。

@mtgto mtgto closed this as completed Dec 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants