慣用句のSKK辞書を作ってみる

ポケモン辞書から一転して実用的なSKK辞書でも作ろうと思い、慣用句辞書を生成してみた。
慣用句は複数の文節から成るが、脳内ではatomなので単語変換のSKKでも一発で変換できるべきだ。そう考えたのがきっかけ。

http://www.geocities.jp/tomomi965/が内容的に一番充実していて、ふりがなまで振っているから辞書生成にはうってつけのサイト。とにかく内容の充実ぶりには驚くばかり。ふりがなをつけるのは面倒だったと思うが、こういう形で二次利用に生かされる形になった。
どうもありがとうございます。

ここに置いたんでもってけ!
http://www.rubyist.net/~rubikitch/archive/SKK-JISYO.kannyouku

以下のスクリプトで生成。

#!/usr/local/bin/ruby -Ke
require 'open-uri'
require 'kconv'

pages_data = [
  [1..20, "http://www.geocities.jp/tomomi965/ko-jien01/a%02d.html"],
  [1..22, "http://www.geocities.jp/tomomi965/ko-jien02/ka%02d.html"],
  [1..19, "http://www.geocities.jp/tomomi965/ko-jien03/sa%02d.html"],
  [1..20, "http://www.geocities.jp/tomomi965/ko-jien04/ta%02d.html"],
  [1..11, "http://www.geocities.jp/tomomi965/ko-jien05/na%02d.html"],
  [1..17, "http://www.geocities.jp/tomomi965/ko-jien06/ha%02d.html"],
  [1..14, "http://www.geocities.jp/tomomi965/ko-jien07/ma%02d.html"],
  [1..6, "http://www.geocities.jp/tomomi965/ko-jien08/ya%02d.html"],
  [1..5, "http://www.geocities.jp/tomomi965/ko-jien08/ra%02d.html"],
  [1..2, "http://www.geocities.jp/tomomi965/ko-jien08/wa%02d.html"],
]
PAGES = pages_data.inject([]){|ary, (range, fmt)| ary.concat range.map{|x| fmt % x }}

class String
  def untag!
    gsub!(/<.+?>/, '')
  end
end

def gather
  entries = []
  PAGES.each do |page|
    html = URI(page).read.toeuc
    html.scan(%r!^ +・([^<]+?)</B>((.+?)).+$!).each do |kanji,kanas|
      kanji.untag!
      kanas.untag!
      kanas.gsub!(/、/,'')
      next if kanji =~ /^[ぁ-んァ-ンー]+$/
      next if kanas =~ /〜|[ァ-ン]/
      kanas.split(/・/).each do |kana|
        entries << [kana, kanji]
      end
    end
    sleep 1
  end
  entries
end

def generate_skk_entry(ary)
  entries = [ ";; okuri-ari entries.\n", ";; okuri-nasi entries.\n" ]
  entries.concat ary.map{|kana, kanji|
    "#{kana} /#{kanji}/\n"
  }.sort
end

puts generate_skk_entry(gather())