SKK の辞書の充実(あるいは, 他の形式の辞書からの変換に関するアレコレ)

この記事は SKK Advent Calendar の 12/20 日分の記事です. 昨日は Daiki Ueno さんによる ibus-skk 0.0.1 Antinews でした.

id:khiker さんに誘われたので, 軽い気持で参加したは良いけれど, 他の人の記事ほどタメになる記事は書けないなぁ, なんて思いつつ, お題の通り「他の形式の辞書から変換することで SKK の辞書を充実させて幸せになる」お話をしてみようと思います.

SKK の辞書は SKK辞書 で公開/開発が行なわれており, 必要に応じて複数の辞書を変換候補として設定したり, 辞書サーバに管理させる辞書を追加したりして使います*1. 辞書サーバを上げない/上げられない場合には, 手元の適当なディレクトリに辞書を置いて, skk の起動時に読み込む(もしくは変換候補が無い段階で読み込みに行く)みたいな設定をします.

それはそれとして.

専門用語の辞書, というのが世の中には幾つか公開されているわけです. 個人的な必要性から, とある辞書を常に使い続けています*2.

この手の「有志がメンテしている専門(?)用語の辞書」って結構沢山あります. 例えば フリーのかな漢字変換辞書たち なんかにリストがありますね(最終更新が 2004 年ですし, リンク切れているのもあったりしますが). これらの辞書の形式としてメジャーなのは, *nix/BSD 系の場合は Wnn/Canna, Windows の場合は MS-IME とか ATOK とかです. そんな訳でこれらの辞書を SKK で使う場合には, SKK の辞書形式に変換する必要があります. SKK 本家の方でも辞書を変換するためのツールが 辞書メンテナンスツール の方で公開されていますね.

...

とか, これだけだとなんか紹介しただけですので, とある辞書を変換する際にはまった話など.
2ch の顔文字辞書として2ちゃんねる顔文字辞書・2chアスキーアート・AAアイコン素材 MatsuCon の辞書を使用しています. で, 顔文字って「;」を使う事が多いんですね. ですが skk の辞書の形式では「;」は注釈のためのセパレータだったりします. そんな訳で, 適当に辞書を変換したあとで文字列を置換しておく必要があります. たとえば,

#!/usr/bin/env ruby

require 'nkf'

src = ARGV[0]
if ARGV.size < 1
  puts "usage: kaomoji2skk.rb ime_dictionary"
  exit 0
end
File.open(src, "r") {|f|
  f.each do |line|
    line_euc = NKF.nkf("-S -e",line)
    if line_euc =~ /^([^!]+?)\t(.+?)\t.+$/
      entry = $1
      content = $2
      if content =~/;/
        puts entry + " /(concat \""+ content.gsub(';','\\\\073')+"\")/"
      elsif content =~/\//
        puts entry + " /(concat \""+ content.gsub('/','\\\\057')+"\")/"
      else
        puts entry + " /"+ content +"/"
      end
    end
  end
}

こんな塩梅で. まあ, 辞書の文字コードSJIS 決め打ちだったりするのであんまり汎用性が無いですが, こういうはまりもありますよ, というネタでした*3. そんな訳で, 顔文字で満足できない人は id:znz「はてなダイアリーキーワードふりがなリスト」をSKKの辞書に変換なんかも使うと良いと思います.

...てか, こんなネタしか無いのかね, 私は...

というわけで, 辞書を充実させて, 楽しい SKK ライフを!!

次回は id:lisp_interaction の記事です. +(0゜・∀・) + ワクテカ +

...誘われたのにショボくてすみません > id:khiker

*1:-変換速度がそれなりに高速で複数辞書の管理が楽なので, 最近は yaskkserv を愛用しています-

*2:-「原始惑星系円盤(げんしわくせいけいえんばん)」とか「花崗閃緑岩(かこうせんりょくがん)」とか「アルフベン波」とかがサクっと変換できるとそれだけでも幸せな気持になれます. いや, 私だけでしょうけれど...-

*3:うひー. 石投げないで