2009年05月29日

RubyでZIPの解凍

青空文庫から文書を読み込んで形態素解析して、結果(出現単語、出現数、当該センテンス)をDBに登録するという処理を書く。

青空文庫は著作権が消滅した作家と、著作権が残っているけど了承を得て掲載している作家の2種類を扱っている。著作権が消滅している作家については再配布や改変も可能らしいので、こういう処理をしても問題ないはず。

青空文庫にいるのはXHTML版とテキスト版(ZIP圧縮)の2つなんだけど、XHTMLは扱うのが面倒なので、ZIPファイルのURLを指定して、解凍、テキストファイルの保存、形態素解析、DB登録という一連の流れを行うプログラムを作ることにする。

で、ZIPファイルをRubyで扱う方法を知らなかったので、調べる。

RubyでのZIPファイルの取り扱いは、ziprubyというライブラリを使うと楽らしい。

gem install zipruby

gemsディレクトリに展開されたファイルの中にREADME.txtがいたので中を見たら、サンプルコードがたくさん載っていた。お陰で何も困ることなく使えた。


実際のコードはこんな感じ。長くなるので取得・解凍部分のみ。

require 'rubygems'
require 'zipruby'
require 'open-uri'

# 取得するURL
url = ARGV[0]

# ZIPファイルを取得・解凍し、ファイル名とコンテンツを取得
content = nil
fileName = nil
open(url) do | zipFile |
  Zip::Archive.open_buffer(zipFile.read) do | ar |
    ar.fopen(ar.get_name(0)) do | file |
      fileName = file.name
      content = file.read
    end
  end
end


という感じで取れた。RubyにしてもPythonにしてもPerlにしても、こういう処理があっさり数行で書けてしまう。便利なものだなぁ。