読者です 読者をやめる 読者になる 読者になる

Google日本語入力の辞書をSKK辞書に変換

顔文字の辞書を充実させるため、ネット上で配信されている辞書を活用できないものか。 そう考えて以前awkで変換する方法を実施していましたが、エスケープしなければいけない文字の扱いが考慮できていませんでした。

よくよく考えると「はてなキーワードからSKK辞書を作る」スクリプトにはその処理が入っているはずだからちょっと改造すればうまくいくはず…ということで試してみたら、うまくいったのでやりかたをまとめます。

前提

  • skkdic-expr2 が使えること
  • rubyがインストールされていること

が前提です。

スクリプトと使い方

googleime2skk.rb

require 'nkf'

class String
  # borrowed from http://openlab.jp/skk/skk/tools/filters/skkdictools.rb
  def concatify
    #if !(/^([-\w]+.*)$/ =~ self) && (/[;\r\n\/\"]/ =~ self)
    # []の処理をしないとskkdic-expr2がSEGVる。
    # see http://d.hatena.ne.jp/rubikitch/20091022/1256186001
    if /[\[\];\r\n\/\"]/ =~ self
      tmp = self.gsub(/;/, '\\\073').gsub(/\//, '\\\057').gsub(/\r/, '\\r').gsub(/\n/, '\\n').gsub(/"/, '\\"').gsub(/[\[\]]/, '')
      return '(concat "' + tmp + '")'
    else
      return self
    end
  end
end

ARGF.each do |line|
  line.chomp!
  furigana, keyword, shubetsu = line.split(/\t/, 3)
  if furigana.empty?
    next # ふりがながないキーワードを無視
  end
  if furigana == keyword
    next # ひらがなだけのキーワードを無視
  end
  if furigana == NKF.nkf('-Ee -m0 --hiragana', keyword)
    next # カタカナ語は無視
  end
  puts "#{furigana} /#{keyword.gsub(/&/, '&').concatify}/"
end

使い方

$ ruby googleime2skk.rb google_std.txt |nkf -e -x > tmp.skkdic
$ skkdic-expr2 -o SKK-JISYO.google tmp.skkdic

google_std.txt がグーグル日本語入力の辞書です。 MS-IMEもATOKも辞書の形式がだいたい同じなので、使えるのではないかと思います。

nkfをかませて文字コード変換しているのは、Google日本語入力の辞書はUnicodeなので、SKK辞書のEUCに文字コードを変換するためです。 顔文字辞書などで半角カナをそのまま活用するため -x をつけています。

SKK-JISYO.kao

充実のSKKライフを!