LoginSignup
5
5

More than 5 years have passed since last update.

GoogleIMEの辞書ファイル(*.txt)をMacの日本語IM用辞書ファイル(*.plist)に変換する

Last updated at Posted at 2015-09-20

発端

最近使っているユーティリティを、なるべくMacネイティブのものに変更しているのだけど、
その一環でGoogleIMEを日本語IMにしようと思い立った。

問題

微妙な使い勝手に起因するところは後々慣れていくだろうなぁとは思っているのだけど、
一番の問題は、GoogleIMEで使ってた辞書ファイル(約3000語?)をどうやって移行するか。

とりあえずスクリプトあるだろーとググったら意外になかったっぽいので、
取り急ぎPHPで適当に書いたらとりあえず動いたので、お裾分けすることにします。

<?php
// convert.phpとか適当に名前つけて保存してくだしあ


// ファイル名を引数から読込んで定義
$option = getopt('i:o:');
$filename_in  = empty( $option['i'] ) ? "./名称未設定.txt" : $option['i'] ;
$filename_out = empty( $option['o'] ) ? "./IME辞書01.plist" : $option['o'] ;

// 存在確認して入力ファイルを開く
if( !file_exists($filename_in) ){
    echo("WARN - 指定された入力ファイルは存在しません。 file=$filename_in");
  exit();
} else {
    $fp_in = fopen( $filename_in, "r" );
}

// 存在確認して出力ファイルを作成・開く
if( file_exists($filename_out) ){
    echo("WARN - 既に出力先ファイルが存在しています。 file=$filename_out");
    exit();
} else {
    touch( $filename_out );
    $fp_out = fopen( $filename_out, "w" );
}

//出力ファイルにヘッダ行を投入
fwrite($fp_out,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
fwrite($fp_out,"<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n");
fwrite($fp_out,"<plist version=\"1.0\">\n");
fwrite($fp_out,"<array>\n");


//一行読み込み、以下の処理を繰り返す
while (($data = fgets($fp_in)) !== FALSE)
{
  // HTでバラして配列に変換
  $data_array = explode("\t", $data);

  // 使うのは0個目と1個目だけなので、ここが空だったらスルーする
  if( $data_array[0]!=="" && $data_array[1]!=="" )
  {
    //HTMLエスケープしないとimportした時落ちる(白目)
    $shortcut = htmlspecialchars($data_array[0]);
    $phrase   = htmlspecialchars($data_array[1]);

    // 出力
    fwrite($fp_out,"    <dict>\n");
    fwrite($fp_out,"        <key>phrase</key>\n");
    fwrite($fp_out,"        <string>$phrase</string>\n");
    fwrite($fp_out,"        <key>shortcut</key>\n");
    fwrite($fp_out,"        <string>$shortcut</string>\n");
    fwrite($fp_out,"    </dict>\n");
  }
}

//出力ファイルにフッタ行を投入
fwrite($fp_out,"</array>\n");
fwrite($fp_out,"</plist>\n");

//ファイルを閉じる
fclose($fp_in);
fclose($fp_out);

使い方

入出力ファイル名を選んでPHPで実行すると、
GoogleIMEで出力したTSVをうまいこと読み込めるplistにしてくれる。
そんな複雑でもないので、Macに入ってるPHPだけでサックリ動きます。
$ php convert.php -i (GoogleIME).txt -o (日本語IM).plist

面倒なこと

単語数が多いせいか、毎回日本語IMの辞書画面開くとカラーボールになってファーwwwwってなる。
作った辞書データインポートする時も5分くらい固まってファーwwwwwってなってた。
一番やりたかったiPhone/iPadとの辞書の同期もできるようになったが、
やや時間差があるっぽい。1日くらいで確認できた。

それと1度だけ辞書データが全デバイスから吹っ飛んだことがあり、
おいおい同期してるのにそれはどうなん?っていう。

このあたり、もうちょいシステム面での改善お願いしたいですよねぇ。

日本語IMの使い勝手とか

細かい所にGoogleIMEほど気が回ってない。

  • スペースを常に半角にして入力する設定ができない。
  • 「(」の変換に他の括弧が出て来ない。「かっこ」って打っても他の括弧のランクが低い。
  • Shift押したまま英語打とうと思っても打たせてくれない。
    • 入力ソースの「Shiftキーの動作」を「英字モードに入る」に変えたら動いた。俺が情弱だった。
  • 変換後のEnterが2回押し。
    • それを回避するために「Windows風のキー操作」にチェックを入れるとShiftの英字モードが選べなくなる。
    • まぁ英字モードもAIUEOから始めると効いてないっぽいし、もう諦めた方が良さそう。
  • 難しい漢字とかあんまり入ってない。おいおいそれは入れといてくれ、みたいな姓名とか意外とない。

近年作ったばっかりなら生温い目で見なくもないけど、GoogleIMEの方がまだまだ使い勝手は断然高い。
日本や漢字圏固有の入力IMではあるにしても、今後Appleさんはここに力入れる気あるのかな。
移行したばっかではあるけど、もう少し細かい改善を出してくれると助かります。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5