ことわざのSKK辞書を作ってみる

慣用句のSKK辞書を作ってみる - http://rubikitch.com/に移転しましたの続きで今度はことわざ辞典を生成する。

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

以下のスクリプトで作成。
エントリーが多いのでダウンロードと生成の二段階に分けた。
ただし、元データのふりがなが完全に振られていないため、一部のことわざの読みがおかしくなっている。自動生成だから大目に見てくれ。

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

TMP_DIR = "kotowaza"

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

def get_entry(html)
  s = html.toeuc[/『(.+?)』/, 1]
  s.untag!
  kanji = s.gsub(/(.+?)/, '')
  kana = s.gsub(/・.+?())/, '\1').gsub(/[()]|[^ぁ-んー]/, '')
  [kana, kanji]
end

def generate
  Dir.chdir TMP_DIR do
    entries = [ ";; okuri-ari entries.\n", ";; okuri-nasi entries.\n" ]
    entries.concat Dir["[0-9]*.html"].map{|file|
      kana, kanji = get_entry(File.read(file))
      "#{kana} /#{kanji}/\n"
    }.sort
    puts entries
  end
end

def fetch
  urls = (1..12).map{|i| "http://www.geocities.jp/tomomi965/kotowaza%02d/left%02d.html" % [i,i]}
  DIR.mkdir TMP_DIR rescue nil
  Dir.chdir TMP_DIR do
    system "wget -r -l1 -w1 -nd #{urls.join ' '}"
  end
end

if __FILE__==$0
  function = nil
  ARGV.options {|o|
    o.on("--fetch") {|x| function = :fetch }
    o.on("--generate") {|x| function = :generate }
    if ARGV.empty?
      print o
      exit 1
    end
    o.parse!
  }
  __send__ function
end
$ ruby generate-kotowazadic.rb --fetch
$ ruby generate-kotowazadic.rb --generate > SKK-JISYO.kotowaza