Skip to content

ユーザー辞書のインポート/エクスポートを追加#319

Draft
artin-kagun wants to merge 1 commit into
azooKey:mainfrom
artin-kagun:codex/user-dictionary-import-export-only
Draft

ユーザー辞書のインポート/エクスポートを追加#319
artin-kagun wants to merge 1 commit into
azooKey:mainfrom
artin-kagun:codex/user-dictionary-import-export-only

Conversation

@artin-kagun
Copy link
Copy Markdown

目的

ユーザー辞書設定に、既存の単一ユーザー辞書へファイルから読み込む / ファイルへ書き出すための導線を追加します。

#318 で一度まとめて提案していた変更のうち、このPRでは「ユーザー辞書のインポート / エクスポート」に範囲を絞っています。複数辞書管理、大規模辞書キャッシュ、候補欄へのコメント表示は含めていません。

変更内容

  • ユーザー辞書テキストを読み書きする UserDictionaryTextCodec を追加しました。
  • 設定画面のユーザー辞書に、読み込み形式の選択、読み込み、書き出しボタンを追加しました。
  • Google日本語入力形式のタブ区切り辞書を読み込み / 書き出しできるようにしました。
  • MS-IME / ATOK / ことえり形式も扱えるよう、形式ごとの分岐を UserDictionaryTextFormat として分けています。
  • UTF-8、UTF-8 BOM、UTF-16 BOM、Shift_JIS fallback のデコードを行います。
  • サンドボックス環境でもユーザーが選択した保存先へ書き出せるよう、com.apple.security.files.user-selected.read-write を追加しました。
  • Google日本語入力形式の読み込み、コメント付き行、UTF-16、書き出しについてテストを追加しました。

意図

まずは既存のユーザー辞書モデルを広げず、現在の Config.UserDictionary.Value.items に対して入出力だけを足す構成にしています。形式サポートの細部はこのPR内でレビューしやすいよう、変換ロジックをUIから分離しました。

検証

  • swift test --disable-sandbox --package-path Core --build-path /private/tmp/azookey-pr-import-export-build
    • 30 tests passed
  • git diff --check upstream/main
  • plutil -lint azooKeyMac/azooKeyMac.entitlements
  • xcrun swiftc -parse azooKeyMac/Windows/UserDictionaryEditorWindow.swift

@ensan-hcl
Copy link
Copy Markdown
Member

@artin-kagun 実装について確認させてください。各種IMEでユーザ辞書形式や品詞体系が違うと思いますが、そのあたりってどう吸収する設計になっていますか?

@artin-kagun
Copy link
Copy Markdown
Author

@ensan-hcl お返事遅れまして申し訳ないです。

現状の実装では、各IMEの品詞体系を完全にazooKey側の品詞体系へ変換する設計にはしていません。
azooKey for macOS の現在のユーザー辞書モデルは reading / word / hint を持つ形なので、インポート時には各形式から読み・単語・コメント相当の列を抽出し、品詞列は反映しない方針にしています。

そのため、現時点での対応は、各形式のファイルからユーザー辞書項目として取り込めるという意味であり、IMEごとの品詞体系を保持・変換するものではありません。
書き出し時も、現在はGoogle日本語入力形式として一律に 名詞 を出力しています。

インポート動作については、ローカルで以下のモック辞書を用意し、いずれもインポートできることを手動確認しました。

  • Google日本語入力 / Mozc 形式
    • UTF-8
    • UTF-8 BOM付き
    • UTF-16 LE BOM付き
    • Shift_JIS
  • Microsoft IME 形式
    • UTF-8
  • ATOK 形式
    • UTF-8
  • ことえり CSV 形式
    • UTF-8

エクスポートも手動確認済みです。

@artin-kagun
Copy link
Copy Markdown
Author

@ensan-hcl すみません。追記です。

私が試験運用している中で変換品質の悪化に気づきにくかったのは、ユーザー辞書として名刺ばかりを取り込んでいたからかもしれません。
このインポートの方法では、今後ユーザー辞書に名詞以外の品詞をたくさん入れる人にとっては変換品質の低下につながるかもしれません。

ユーザー辞書項目を変換器に渡すとき、

cid: CIDData.固有名詞.cid
mid: MIDData.一般.mid

としています。

たとえばインポート元の辞書に

はしる    走る    動詞    移動する

のような項目があったとしても、それは変換機に以下のように渡されます

DicdataElement(
    word: "走る",
    ruby: "ハシル",
    cid: CIDData.固有名詞.cid,
    mid: MIDData.一般.mid,
    value: -5
)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants