Mavericksのことえりの仕組みを探ってみる
今さらだけど、OSX 10.9 Marvericksになってから、ことえりの仕組みが変わった。ことえりの環境設定や単語登録は、システム環境設定に統合された。特に単語登録の手順は大幅に変更された。登録済みの単語はリスト表示され見やすくなったが、品詞の種類は指定できなくなり、単語とその読みだけを登録するようになった。
OSXになってから最大の変化を経験しているはずなのだけど、この数ヶ月間、適当に使ってきた。それなりに使えるのだけど、やはり時間の経過とともに不満も募ってくる...。
入力とはパソコンを使う上で最も重要な操作である。特に日本語環境で使う場合は、数万文字に及ぶ英数漢字かな混じり文字を、ことえりなどのIMEを駆使して、素早く正確に入力することが求められる。ストレスのない入力環境を目指すために、Mavericksのことえり仕組みを徹底的に調べてみた。
変換辞書(~/Library/Dictionaries/)
ユーザ辞書
- ~/Library/Dictionaries/CoreDataUbiquitySupport
- ~/Library/Dictionaries/ユーザ辞書
単語登録すると、ここにあるユーザ辞書に保存される。
- そのまんまの名前の「ユーザ辞書」と「CoreDataUbiquitySupport」の二つが存在するが、どちらも同じ内容である。
-
- CoreDataUbiquitySupportは、ユーザ辞書をCoreData形式に変換した辞書。
- CoreData形式とは、つまりsqliteのデータベースなので、sqlite3コマンドで除き見ることもできる。
- CoreDataUbiquitySupportは、ユーザ辞書をCoreData形式に変換した辞書。
各種辞書
- ~/Library/Dictionaries/NADのカタカナ英語辞書10.6++
- ~/Library/Dictionaries/山椒辞書
各種の追加辞書も、ユーザ辞書と同じ階層にインストールしておく。
- 自分の場合は、かなり以前からお世話になっている上記二つの辞書をインストールしている。
- システム環境設定 >> キーボード >> 入力ソース の下までスクロールすると、辞書の優先順位とオン・オフの設定もできる。
ユーザ辞書の中身を覗いてみる
ユーザ辞書
- OSX 10.9 Mavericksでは、ことえり単語登録.appは削除され、システム環境設定のユーザ辞書を編集...になってしまった。
- もし、Mountain Lionまでの環境があれば、ことえり単語登録.appは、以下の場所に存在するはずである。
- /System/Library/Input Methods/Kotoeri.app/Contents/Support/WordRegister.app
- 自分の場合はしっかりTime Capsuleにバックアップが残っていたので、そこから上記WordRegister.appを復元した。
- そして、WordRegister.appをダブルクリックすると、問題なくことえり単語登録.appが起動した。
- 「ユーザ辞書」を選択して、辞書 >> テキストに書き出す...メニューを実行すれば、その内容はちゃんと書き出されるのだ。
"まっくぶっく","MacBook","その他の固有名詞" "まっく","Macintosh","その他の固有名詞" "まーゔぇりくす","Mavericks","その他の固有名詞" "まーべりくす","Mavericks","その他の固有名詞" "あいぱっど","iPad","その他の固有名詞" "あいふぉん","iPhone","その他の固有名詞"
CoreDataUbiquitySupport
- 今度は同じ内容であるCoreData形式のユーザ辞書を覗いてみる。
- フォルダ階層の奥深くに、UserDictionary.dbを見つけられた。
- UserDictionary.dbとは何なのか?fileコマンドで調べてみると、
$ file ~/Library/Dictionaries/CoreDataUbiquitySupport/zari\~589CXXXX-56XX-5EXX-BFXX-433B24XXXXXX/UserDictionary/B9BFXXXX-F0XX-46XX-BCXX-AE63F7XXXXXX/store/UserDictionary.db ~/Library/Dictionaries/CoreDataUbiquitySupport/zari\~589CXXXX-56XX-5EXX-BFXX-433B24XXXXXX/UserDictionary/B9BFXXXX-F0XX-46XX-BCXX-AE63F7XXXXXX/store/UserDictionary.db: SQLite 3.x database
- それは、SQLite3データベースであった。
- よって、sqlite3コマンドで覗き見れるはず。
$ sqlite3 ~/Library/Dictionaries/CoreDataUbiquitySupport/zari\~589CXXXX-56XX-5EXX-BFXX-433B24XXXXXX/UserDictionary/B9BFXXXX-F0XX-46XX-BCXX-AE63F7XXXXXX/store/UserDictionary.db SQLite version 3.7.13 2012-07-17 17:46:21 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .tables Y_UBKVS Y_UBRANGE Z_METADATA Y_UBMETA ZUSERDICTIONARYENTRY Z_PRIMARYKEY sqlite> .dump ZUSERDICTIONARYENTRY PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; CREATE TABLE ZUSERDICTIONARYENTRY ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZAUXINTVALUE1 INTEGER, ZAUXINTVALUE2 INTEGER, ZAUXINTVALUE3 INTEGER, ZAUXINTVALUE4 INTEGER, ZTIMESTAMP INTEGER, ZAUXSTRINGVALUE1 VARCHAR, ZAUXSTRINGVALUE2 VARCHAR, ZAUXSTRINGVALUE3 VARCHAR, ZAUXSTRINGVALUE4 VARCHAR, ZPARTOFSPEECH VARCHAR, ZPHRASE VARCHAR, ZSHORTCUT VARCHAR, ZAUXDATAVALUE BLOB ); INSERT INTO "ZUSERDICTIONARYENTRY" VALUES(8258,1,1,NULL,NULL,NULL,NULL,1390882029,NULL,NULL,NULL,NULL,NULL,'iPhone','あいふぉん',NULL); INSERT INTO "ZUSERDICTIONARYENTRY" VALUES(9249,1,1,0,0,0,0,1390882166,NULL,NULL,NULL,NULL,NULL,'MacBook','まっくぶっく',NULL); INSERT INTO "ZUSERDICTIONARYENTRY" VALUES(9250,1,1,0,0,0,0,1390882265,NULL,NULL,NULL,NULL,NULL,'Macintosh','まっく',NULL); INSERT INTO "ZUSERDICTIONARYENTRY" VALUES(9284,1,1,NULL,NULL,NULL,NULL,1390882301,NULL,NULL,NULL,NULL,NULL,'iPad','あいぱっど',NULL); INSERT INTO "ZUSERDICTIONARYENTRY" VALUES(10275,1,1,0,0,0,0,1390883427,NULL,NULL,NULL,NULL,NULL,'Mavericks','まーゔぇりくす',NULL); INSERT INTO "ZUSERDICTIONARYENTRY" VALUES(10276,1,1,0,0,0,0,1390883445,NULL,NULL,NULL,NULL,NULL,'Mavericks','まーべりくす',NULL); COMMIT; sqlite> .exit
- 上記のようなSQL文が記録されており、その中身はデータベースなのである。
- 順番は異なっているものの、テキストに書き出した内容と同等の中身である。
学習辞書(~/Library/Preferences/com.apple.JapaneseAnalysis/)
- ~/Library/Preferences/com.apple.JapaneseAnalysis/DictionaryTrainer/(メール.appや連絡先.appなどからの学習)
- ~/Library/Preferences/com.apple.JapaneseAnalysis/Environment.plist(ことえりの環境設定)
- ~/Library/Preferences/com.apple.JapaneseAnalysis/InputPrediction.dict(予測変換の学習)
- ~/Library/Preferences/com.apple.JapaneseAnalysis/LearningDictionary.dict(文節区切りや優先する単語の学習)
ことえりが変換学習した結果が保存されていると思われる。
- ことえりで確定する時の頻度が高い単語を学習したり、
- メール.appや連絡先.appの内容などから学習している。
学習辞書の中身を覗いてみる
- 先ほど復元したことえり単語登録.appを利用するとこで、学習辞書の中身もちゃんと確認できるのだ。
例:LearningDictionary.dict
- ことえり単語登録.app(WordRegister.app)を起動して、
- 辞書 >> 新規ユーザ辞書の作成...(command-N)を実行する。
- 名前:test にしてみた。
- test辞書が作成され、選択状態になる。
- 辞書 >> テキストや辞書から取り込む... を実行する。
- command-shift-Gを押して、以下のパスを指定した。
- ~/Library/Preferences/com.apple.JapaneseAnalysis
- LearningDictionary.dictを選択して、開くボタンを押した。
- test辞書にLearningDictionary.dictの内容が読み込まれる。
- 読み込みが完了したら、test辞書の内容をテキストに書き出すのだ。
"、","、","普通名詞" "、","、","数字列接尾語" "4、","4、","普通名詞" "おおくはくわねぇ、","多くは食わねぇ、","普通名詞" "よ、","よ,","普通名詞" "さむさん、","サムさん、","無品詞" "「","[","無品詞" "」","]","無品詞" "/","・","無品詞" ...(中略)...
- 上記のような4238語の登録が確認できた。
ユーザ辞書のiCloudとの同期情報
- ~/Library/Mobile Documents/com~apple~TextInput/Dictionaries/zari~589CXXXX-56XX-5EXx-BFXX-433B24XXXXXX/
- ~/Library/Mobile Documents/com~apple~TextInput/Dictionaries/mobile~E88CXXXX-22XX-5EXX-AAXX-66EC6DXXXXXX/
ユーザ辞書のiCloudとの同期情報の中身を覗いてみる
- 例えば、iPhoneからの同期情報mobile-~E88CXXXX-...を奥深くに辿っていくと、以下のファイルが見つかる。
7AC0414D-C9D3-42C4-9541-7DA7AE39023B.1.cdt 7F1E2035-429B-4672-BE36-DA711F8BD744.1.cdt 1280917B-58F3-4441-9CE8-7F0FC73D165E.1.cdt receipt.0.cdt
- それらのファイルは、fileコマンドで確認してみると、見てのとおりZip圧縮されたファイルなのである。
$ file receipt.0.cdt receipt.0.cdt: Zip archive data, at least v2.0 to extract $ file 7AC0414D-C9D3-42C4-9541-7DA7AE39023B.1.cdt 7AC0414D-C9D3-42C4-9541-7DA7AE39023B.1.cdt: Zip archive data, at least v2.0 to extract
- よって、unzipで解凍してみる。
$ unzip receipt.0.cdt Archive: receipt.0.cdt extracting: date inflating: kv $ unzip 7AC0414D-C9D3-42C4-9541-7DA7AE39023B.1.cdt Archive: 7AC0414D-C9D3-42C4-9541-7DA7AE39023B.1.cdt inflating: contents
- 解凍されたファイルをさらに探る。
$ file date date: data $ file kv kv: ASCII text, with no line terminators $ file contents contents: Apple binary property list
- ファイル形式に合わせて、表示してみた。
-
- date
$ hexdump -C date
00000000 17 9b 1d a0 cc b9 d4 41 |.......A|
00000008
-
- kv
$ cat kv
Guest~ 589CXXXX-56XX-5EXX-BFXX-433B24XXXXXX:8:zari~589CXXXX-56XX-5EXX-BFXX-433B24XXXXXX:75:mobile~E88CXXXX-22XX-5EXX-AAXX-66EC6DXXXXXX:29
-
- contents
$ plutil -convert xml1 contents $ cat contentscdVersion 479 compressedGlobalIDs 0:0:0 deleted entityNames UserDictionaryEntry inserted 0 phrase iPad shortcut あいぱっど timestamp 1390882301 kvStr Guest~589CXXXX-56XX-5EXX-BFXX-433B24XXXXXX:8:zari~589CXXXX-56XX-5EXX-BFXX-433B24XXXXXX:75:mobile~E88CXXXX-22XX-5EXX-AAXX-66EC6DXXXXXX:29 modelVersionHash SAlQVUhF7208e6_gvZx_zdKx1U1AzKGem3HO2pLKjgY= peerIDs mobile~E88CXXXX-22XX-5EXX-AAXX-66EC6DXXXXXX bebe~589CXXXX-56XX-5EXX-BFXX-433B24XXXXXX Guest~589CXXXX-56XX-5EXX-BFXX-433B24XXXXXX peerStates 1 73 2 8 primaryKeys p10273 transactionDate 1390882301.459553 transactionNumber 29 updated
- 各端末でユーザ辞書を変更する度に、その変更操作を記録した1ファイル(contens)が追加された。
- それらのファイルを同期することで、最新のユーザ辞書の状態に同期する仕組みのようだ。
ことえり単語登録.appで辞書を編集するのはNG
- OSX 10.9 Mavericksでもことえり単語登録.app(WordRegister.app)は、ちゃんと起動する。
- ことえり単語登録.appなら、以前と同じように品詞の指定も可能。
- 一方、システム環境設定 >> キーボード >> ユーザ辞書では、登録する時に、単語の品詞は指定できない。
- そうなると、ことえり単語登録.appでユーザ辞書を編集してみたくなるが、それはやめた方がいい。
- 自分の環境(OSX 10.9 Marvericks)で確認した結果、ことえり単語登録.appで追加した単語は、ユーザ辞書にしか登録されなかった。
- 一方、システム環境設定 >> キーボード >> ユーザ辞書で追加した単語は、ユーザ辞書とCoreDataUbiquitySupportの両方に登録された。
ユーザ辞書にしか登録されないと、どうなるか?
- システム環境設定 >> キーボード >> ユーザ辞書には、ことえり単語登録.appで追加した単語は表示されない。
- つまり、システム環境設定 >> キーボード >> ユーザ辞書は、CoreDataUbiquitySupportしか見ていないのだ。
- この状態であっても、MacBook単体で使う限りは、ことえり単語登録.appで追加した単語もちゃんと変換される。しかし、iCloudでは同期されないのだ。
- つまり、iCloudは、CoreDataUbiquitySupportの変化しか見ていないのだ。
おそらく、過去の互換性を保つためにユーザ辞書を残しているが、いずれCoreDataUbiquitySupportに統一されるのかもしれない。
単語登録のショートカットを作りたい
- というわけで、control-shift-Nのショートカットを復活させるのだ。
- 但し前項の理由から、起動するのはことえり単語登録.appではなく、システム環境設定 >> キーボード >> ユーザ辞書である。
- シンプルに、以下のAppleScriptを実行すればOK。(open_ユーザ辞書.scptという名前で保存した)
tell application "System Preferences"
reveal anchor "Text" of pane id "com.apple.preference.keyboard"
activate
end tell
- 自分の場合は、Quicksilverにcontrol-shift-Nを設定して、上記open_ユーザ辞書.scptを登録しておいた。
ユーザ辞書の書き出しと読み込み
独自の辞書を作る
- ことえり単語登録.appには、辞書 >> 新規ユーザ辞書の作成... があって、独自の辞書を自由に追加できた。
- では、Mavericksのことえりで独自の辞書を追加したい時には、どうすれば良いのだろう?
- 実は、以下のようなシンプルなテキストファイルを用意して、
- システム環境設定 >> キーボード >> 入力ソースの追加辞書:にドラッグ&ドロップすると、辞書に変換され、追加された。
"こい","濃い","無品詞" "こい","故意","普通名詞" "かんたんけっさい","かんたん決済","普通名詞" "あいたじょうたい","空いた状態","普通名詞" "かのうせいもあるとい","可能性もあると言","普通名詞" "だれもい","誰も居","普通名詞" "いかりようれい","以下利用例","普通名詞" "こう","項","無品詞" "じつむてきにはどう","実務的にはどう","普通名詞" "きーうぃんどう","キーウィンドウ","形容動詞" "きーうぃんどうする","キーウィンドウする","サ変動詞" "きーうぃんどう","キーウィンドウ","普通名詞"
- 削除したい時は、辞書を選択して、二本指タップ、メニューから「ゴミ箱に移動」を実行すればOK。
- 驚いたことに二本指タップのメニューには「テキストとして書き出す...」も存在する。
- テキストとして書き出し、必要な編集をして、追加辞書にドラッグ&ドロップ、これで既存の辞書のメンテナンスもちゃんとできる。
参考ページ
- Mavericksでことえりの追加辞書を登録[更新]: kanzメモ(たいへん参考になりました。感謝です!)