ユーザー辞書の複数管理・インポート/エクスポート#318
Conversation
|
@artin-kagun すみません、変更が多すぎてレビューができないので、トピックごとに分割してPRにしてもらえないでしょうか?それと、PRを分割する作業の前に、各トピックに関して変更目的・内容・意図などをここで簡単に説明してほしいです。 |
|
@ensan-hcl 依存関係があるため、完全に独立したPRではなく stacked PR として、前段のPRをbaseにして順番に積む形を想定しています。 分割案は以下です。
各トピックの目的・内容・意図は以下の通りです。 1. ユーザー辞書の複数辞書データモデル化目的現在のユーザー辞書は単一の単語リストとして扱われていますが、複数の辞書を保持できるようにすることで、用途別・分野別に辞書を管理できるようにします。 内容
意図今後の「辞書ごとの有効/無効切り替え」「インポート先辞書の選択」「辞書単位での書き出し」などの土台になる変更です。 既存ユーザーの辞書内容を壊さないよう、旧形式(既に実装されているユーザー辞書)からの移行互換性を保つことを重視しています。 複数の辞書を登録するというのは、以下の目的があります
2. 複数辞書対応のユーザー辞書エディタUI目的複数辞書化したユーザー辞書を、設定画面から実際に管理できるようにします。 内容
意図インポート機能に依存せず、ユーザーが手動でも辞書を作成・編集できる状態にするための変更です。 検索/並び替えは、大きな辞書を扱う場合の編集性を高めるため、エディタUIの一部として含めます。 3. ユーザー辞書のインポート/エクスポート目的外部のユーザー辞書ファイルをazooKeyに取り込んだり、azooKey内の辞書を外部ファイルとして書き出せるようにします。 内容
意図既存の辞書資産をazooKeyへ移行しやすくするための変更です。 特にGoogle日本語入力形式のUTF-8タブ区切りテキストは、ユーザー辞書の交換・移行で使われやすいため、最優先で対応します。 4. ユーザー辞書コメントの候補注記表示目的ユーザー辞書に登録されたコメントを、変換候補の補足情報として表示できるようにします。 内容
意図専門用語や固有名詞を登録している場合に、候補の意味や補足を見ながら選べるようにするための変更です。 また、候補の内部データにユーザー辞書由来の語が含まれているだけでコメントを表示すると、実際には登録していない候補にもコメントが表示される可能性があります。 そのため、注記表示は意図的に保守的にし、表示されている候補文字列と登録語が一致する場合だけコメントを出すようにしています。 以下がコメント表示の例です
5. 大規模ユーザー辞書向けインデックス/キャッシュ目的数万語規模のユーザー辞書を使う場合でも、変換時の負荷が大きくなりすぎないようにします。 内容
意図大きな辞書を入れたときに、変換のたびにUserDefaults上の全単語を走査すると入力が重くなるため、その負荷を下げるための変更です。 候補数を単純に上限で切るような方法は、変換精度を落とす可能性があるため採用していません。 インデックス化できない項目についても、候補から消えないように fallback 経路を残しています。 |
|
いえ、初めてのPRだと思うので大丈夫です!一般論としては、大きな機能追加に関しては事前にディスカッションして合意形成をしていただく方がスムーズだと思います。 「複数辞書データ」ですが、これをazooKey for macOS本体に機能として入れるのは避けたいです。azooKey for macOSはあくまでニューラルかな漢字変換を用いた高精度な変換を強みとしたシンプルなシステムとすることを基本に考えていて、このような強力(かつ複雑)なユーザ辞書機能をサポートするつもりはあまりありませんでした。 「ユーザー辞書のインポート/エクスポート」に関しては良いと思います。フォーマットに関しては別途検討したいので、これは別のPRの中で議論できればと思います。 ユーザー辞書コメントの候補注記表示ですが、これはちょっと考えたいです。「ヒント」行は候補選択のための情報というよりは(現状使われていませんが)ニューラルかな漢字変換システムが利用するための意味情報を示すことを目的としています。 「大規模ユーザー辞書向けインデックス/キャッシュ」ですが、これは実際に数万件レベルのエントリを登録された上で試した感じでしょうか?そもそも「動的ユーザ辞書」自体軽量な追加情報のためのものであり、ユーザ辞書の適切な利用にはAzooKeyKanaKanjiConverterの静的ユーザ辞書システムを利用する想定でした。それも、数万件レベルのエントリではテストしていません。 |
|
azookeyの方針について、理解しました。
はい。 |
|
@artin-kagun このPRの「大規模ユーザー辞書向けインデックス/キャッシュ」でそれが改善するんですかね? |
|
@ensan-hcl |
|
ありがとうございます。そしたら、可能であれば「ユーザー辞書のインポート/エクスポート」と「大規模ユーザー辞書向けインデックス/キャッシュ」に関して分割したPRをいただけないでしょうか? |

Codexの助けを借りて作成したものです。
概要
macOS版のユーザー辞書機能を拡張します。
これまでの単一リスト形式のユーザー辞書を、複数の辞書を持てる形式に拡張し、辞書ごとの有効/無効、インポート、エクスポート、手動編集、検索、並び替えに対応しました。
また、ユーザー辞書のコメントを変換候補の注記として表示できるようにし、大きな辞書でも変換時の負荷が大きくなりにくいよう、保存済みインデックスを使う経路を追加しています。
主な変更点
ユーザー辞書の複数管理
ユーザー辞書エディタの拡張
インポート / エクスポート
変換候補へのコメント表示
添付画像は「りゅうすうていり」と入力時のもので、ユーザー辞書に登録されているコメントの表示例を示しています
大きな辞書向けの高速化
実装上の注意
変換候補の注記表示は、意図的に保守的にしています。
以前の実装では、候補の内部データにユーザー辞書由来の語が含まれているだけでコメントを表示すると、実際には登録していない候補にもコメントが出る可能性がありました。
このPRでは、候補として表示されている文字列と、ユーザー辞書に登録された単語が一致する場合だけコメントを表示します。
また、大きな辞書への対応では、候補数を単純に上限で切るような変更はしていません。変換精度を落とさないため、候補を雑に削るのではなく、辞書検索の経路をインデックス化する方向にしています。
検証
以下を実行しました。
swift test --disable-sandbox --package-path Core --build-path /private/tmp/azookey-pr-core-final-buildgit diff --check upstream/mainplutil -lint azooKeyMac/azooKeyMac.entitlementsxcrun swiftc -parse azooKeyMac/Windows/UserDictionaryEditorWindow.swiftいずれも成功しています。