wukongを使って住所の表データをツリーデータに変換

wukongを使って、表状態になっている住所データから、住所の要素それぞれの下位ノードが分かるツリーデータに変換してみます。

プログラム

電子国土基本図(地名情報)「住居表示住所」のCSVファイルをターゲットにして、次のようなプログラムを作成しました。

#addr.rb
require 'rubygems'
require 'wukong'

include Wukong::Streamer

class Mapper < LineStreamer
  def process l
    r = l.strip.split(',')
    yield [r[0], r[1]]
    yield [r[0..1].join('/'), r[2]]
    yield [r[0..2].join('/'), r[3]]
    yield [r[0..3].join('/'), r[6..8].join(',')]
  end
end

class Reducer < ListReducer
  def finalize
    yield [key, values.map(&:last).uniq.sort.join(',')]
  end
end

Wukong::Script.new(Mapper, Reducer).run

実行例:

$ ruby addr.rb src/j14101k_20110118.csv 14101.tsv

これで、作成された tsv ファイルには、次のデータが用意されます。

  • 市区町村コードに対して、町又は字名のリスト
  • 市区町村コード/町又は字名に対して、街区符号のリスト
  • 市区町村コード/町又は字名/街区符号に対して、基礎番号のリスト
  • 市区町村コード/町又は字名/街区符号/基礎番号に対して、経度、緯度及び地図情報レベル

こういったデータをワンパスで作成できるところが、MapReduce 方式の利点です。