iPhone で使っていたユーザー辞書を Android の Google 日本語入力アプリに持っていきたくて、辞書を変換できる Web ページを作った。

iOS のユーザー辞書を Google 日本語入力の辞書に変換する
iOS のユーザー辞書を Google 日本語入力の辞書に変換する

iOS のユーザ辞書 フォーマット仕様

iOS のユーザ辞書を iCloud 経由で Mac に同期して、 Mac のメニューから [(Appleマーク)] → [システム環境設定] → [キーボード] → [ユーザ辞書] にて、入力と変換のリストを選択してデスクトップにドラッグ。これで「ユーザ辞書.plist」という名前のファイルが生成される。

iOS のユーザー辞書を Google 日本語入力の辞書に変換する

中身は XML 文書になっている。


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
	<dict>
		<key>phrase</key>
		<string>(。-ω-)</string>
		<key>shortcut</key>
		<string>ねむい</string>
	</dict>
	<dict>
		<key>phrase</key>
		<string>(・ω・。)</string>
		<key>shortcut</key>
		<string>おなかすいた</string>
	</dict>
</array>
</plist>

Google 日本語入力 の辞書 フォーマット仕様

Mac や Android にて、Google 日本語入力の辞書をエクスポートすることが可能。

iOS のユーザー辞書を Google 日本語入力の辞書に変換する

エクスポートしたファイルの中身は、項目がタブで区切られたテキストファイルになっている。文字エンコーディングは UTF-8 で、改行は LF のみ。


ねむい[TAB](。-ω-)[TAB]名詞[TAB]
おなかすいた[TAB](・ω・。)[TAB]名詞[TAB]

([TAB]は制御文字のタブ)

iOS ユーザー辞書を Google 日本語入力の辞書に変換する JavaScript のコード

jQuery 3.0.0 を使用。


function ios_dict_to_google_ime_dict(src){
  var xml = $($.parseXML(src));
  var dicts = xml.find("dict");
  var entries = [];
  for(var i=0; i<dicts.length; i++){
    var dict = dicts[i];
    var keys = $(dict).find("key");
    var strings = $(dict).find("string");
    var phrase = null;
    var shortcut = null;
    for(var j=0; j<keys.length; j++){
      var key = $(keys[j]);
      var str = $(strings[j]);
      if(key.text() === "phrase"){
        phrase = str.text();
      }else if(key.text() === "shortcut"){
        shortcut = str.text();
      }
    }
    if(phrase != null && shortcut != null){
      entries.push({phrase: phrase, shortcut: shortcut});
    }
  }
  var lines = [];
  for(var i=0; i<entries.length; i++){
    var e = entries[i];
    lines.push(e.shortcut + "\t" + e.phrase + "\t" + "名詞\t");
  }
  return lines.join("\n");
}

iOS ユーザー辞書には「品詞」という項目が存在しないが、 Google 日本語入力では「品詞」は必須らしいので、「品詞」の項目には強引に「名詞」を指定している。

tags: ios iphone android

Posted by NI-Lab. (@nilab)