SKKの導入 2 (エロゲタイトル入力支援SKK辞書を作る)

前回でMacAquaSKKの導入が一応出来たので、今回はより使いやすくなるように辞書を作成してみようと思います。


SKKの導入 1 (AquaSKK for Mac) - Haitena だいありー

エロゲタイトル入力支援辞書の作成動機

恐らく、大多数のエロゲーマーの方は正式タイトルではなく、略称で会話したりするのではないでしょうか。
例えば、こんな感じ。
『なぁ、おまえダメ恋やった?』
『ダメ恋? ーーあぁ、"世界でいちばんNGな恋" か。もち。つーか主人公頼りなさすぎwwww』
『確かにw それより、あのゲームやると就職とか、 今後の人生とか、そーゆうの考えちゃうよなーー。すごく……憂鬱です。』
まさか、『世界でいちばんNGな恋』といちいち正式名称使いません(多分)。


ということで、入力も略称の方で出来るといいなぁと思いました。
俺は今までImput Methodに関しては全くいじったことがなく、ダウンロードしてきたものをそのまま使ってました。
なので、エロい人はすでに略称辞書が出来上っているのかもしれませんが、俺は全くそうではないので今回作成することにしました。
と言っても打つ機会はほとんどありませんが(ぉ


先に成果報告しておくと、こんな感じに変換が効きます。

変換パターン1. [読み(略称)] -> [正式名称]

略称だけでなく、長い名称も簡単入力。

変換パターン2. [読み] -> [略称] -> [正式名称]

比較的最近のタイトルは結構変換できます。

英語だって(ry


SKK辞書のフォーマット

辞書ファイルを見るとそのフォーマットは以下のようになっています。

"読み" /"候補1"/"候補2"/.../

"読み"と次に来るスラッシュとの間には半角Spaceが1つあり、続いて候補1、2…がスラッシュで区切られています。
最後は改行で終わります。また、

/"候補";注釈/

のように、候補の後にセミコロンで注釈を続けることが出来るようです。
辞書ファイルはソートされている必要があるみたいですが、これはツールで出来るのでそちらを利用します。


辞書メンテナンスツール - FreeStyleWiki


Macにおけるツールの導入に関して以下のサイトを参考にさせていただきました。多謝!!


SKK のはてなキーワード辞書を作る。 - 日々、とんは語る。


俺の環境ではglib2が既に入っていたので、

$ port installed | grep glib2
glib2 @2.18.3_0+darwin_9 (active)

以下を実行することでインストール出来ました。

$ wget http://openlab.ring.gr.jp/skk/tools/skktools-1.3.1.tar.gz
$ tar zxf skktools-1.3.1.tar.gz
$ ./configure
$ make
$ sudo make install

エロゲタイトル入力支援辞書の作成

ちょっと手動での作業が入ってきますが、それほど大変ではありません。
変換に関しては以下のサイトに記載されているものを利用させて頂きました。


作品タイトル略称一覧 - ネ実エロゲスレまとめWiki


辞書フォーマットに沿ったかたちに出力するようなスクリプトを作成。

#!/usr/bin/ruby -Ku

require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'nkf'

url = "http://neneco.sakura.ne.jp/ergwiki/index.php?%BA%EE%C9%CA%A5%BF%A5%A4%A5%C8%A5%EB%CE%AC%BE%CE%B0%EC%CD%F7"

abbrev = []
long_title = []
doc = Hpricot(open(url))
(doc/"dl.list1").each do |dl|
  # for abbreviation
  (dl/"dt").each do |dt|
     title = NKF.nkf("-w -xm0", dt.inner_html)
     title.gsub!(/(?!^.*)\(.*?\)|\s/, "")  # ignore () and its inner
     abbrev << title
  end

  # for long title
  (dl/"dd").each do |dd|
    (dd/"a").remove
    title = NKF.nkf("-w -xm0", dd.inner_html)
    title.gsub!(/<.*/m, "")               # ignore extra html tags and else
    title.gsub!(/(?!^.*)[\(\(].*/m, "")   # ignore extra sentence
    title.gsub!(/^[\(\(].*[\)\)]/, "")    # for doujin game
    long_title << title
  end
end

hash = Hash[*[abbrev, long_title].transpose.flatten]    # array to hash

# multi(2<) abbr separated by (,) or (、) => same long title
abbrev.each do |abbr|
  if /[,、]/ =~ abbr
    abbr.split(/[,、]/).each{|k| hash[k] = hash[abbr]}
  end
end

hash.sort.each{|abbr, long| puts "# /#{abbr}/#{long}/"}

これを実行するには、事前にHpricotをrubygemsからインストールする必要があります。

sudo gem install hpricot

SKK辞書は文字コードEUC-JPになっているようですが、この時点ではUTF-8で作業を進めます(後ほどコマンドラインからnkfで変換する)。
これを実行すると以下のような出力が得られます。

# /C†C/CROSS†CHANNEL/
# /DMF/Dear My Friend/
# /FA/FORTUNE ARTERIAL/
# /MTI/MagusTale Infinity/
# /NG恋/世界でいちばんNGな恋/
………
(略)
………
# /残暑/残暑お見舞い申し上げます。/
# /群青/群青の空を越えて/
# /(不明)/マスクド上海/

#は後で書き換えるためのダミーです。その後に半角Spaceが入っています。
まぁ何時でもいいと思うけれど、UTF-8からEUC-JPに変換しておく。上の出力をeroge_abbr.tmpとすると、

nkf -e eroge_abbr.tmp > eroge_abbr.skkdic

出来たらeroge_abbr.skkdicを以下に従って修正します。

  • 行頭の#を削除し、変換元となる"読み"をひらがなで入力する
  • 略称自体が既にひらがなの場合は、行頭の"# /"(#と半角Space + /)を削除する

こんな感じ(ランダムに抜粋)。

だめこい /NG恋/世界でいちばんNGな恋/
みくきす /ミクキス/未来のキミと、すべての歌に―/
もしらば /もしも明日が晴れならば/
ようかん /幼なじみと甘〜くエッチに過ごす方法/
しーしー /C†C/CROSS†CHANNEL/

最後にソート。

skkdic-expr2 -o eroge_abbr.skkdic eroge_abbr.tmp

でこれを辞書ファイルとして登録する、といった具合。
別に辞書ファイルを用意するでなくとも、ユーザー辞書にマージしてもいいと思います。
俺はなんかそうこうやってるうちに設定が読み込まれなくなったり、辞書フォーマット破壊してしまったりであせりました。


これで快適変換ライフです。
いや、本当言うとアニメでも略称入力対応出来ると助かるんですが、そういった情報管理してるのってないのかなー。
はてなキーワード辞書で例えば、『いんでっくす』と打てば『禁書目録』と変換できたりはするけれども。
あとは、声優名補完があるといいかもしれない。ウィキペディアで探せば、可能かもしれません。