MacOSX용 대한민국 우편번호 사전 만들기

2012-07-17   //   alexken작성   //   기술  //  2 Comments

binWord/blog Leopardの「辞書」アプリで郵便番号辞書を使う란 MacOS용 시스템 사전을 응용한 일본 우편번호 사전 만들기 포스트를 보고 한국어 버전으로 만들어 보았음.

우정사업본부에서도 우편번호 데이터를 얻을 수 있지만,
인터넷에서 아래와 같이 정리된 데이터를 이용하였음.(2012년5월, 51,989항목)

135-806 서울  강남구 개포1동    경남아파트                      1
135-807 서울  강남구 개포1동    우성3차아파트    (1∼6동)         2
135-806 서울  강남구 개포1동    우성9차아파트    (901∼902동)     3
135-770 서울  강남구 개포1동    주공아파트       (1∼16동)        4

아래와 같이 작성한 ruby 코드로 데이터를 사전용 xml 포맷으로 변환하고, XCode에 있는 사전 도구를 이용해서 make 한방 때리면 사전이 튀어 나옴.

#!/usr/bin/env ruby

puts < <XML_HEAD
<?xml version="1.0" encoding="UTF-8"?>
<d:dictionary xmlns="http://www.w3.org/1999/xhtml"
              xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng">
XML_HEAD

class File
  def File.open_and_process(*args)
    f = File.open(*args)
    yield f
    f.close
  end
end

File.open_and_process(ARGV[0],'r') do |file|
  while line = file.gets
    line.gsub(/\s+/,' ').scan(/^(\S+)\s+(.*)\s+(\d+)\s+$/).each{|zip,index,id|
      puts "<d:entry d:title='#{index}' id='#{id}' from=''>"
      index.split(' ').each{ |x|
        puts "\t<d:index d:value='#{x}'></d:index>"
      }
      puts "<section><b>#{zip}</b> #{index}</section>"
      puts "</d:entry>"
    }
  end
end

puts < <XML_TAIL
</d:dictionary>
XML_TAIL
</d:dictionary>

원래 txt 데이터는 3MB
MacOSX 사전용 xml로 변환하면 5MB
사전으로 컴파일하면 28MB
Zip으로 압축해서 5.7MB

7월19일 추가사항

배포를 하려해도 호스팅비용이 부담되어 어찌할까 하다가,
요번 참에 github 가입하고, 소스채 올림.

소스: https://github.com/alexken/korzipcode
컴파일된 사전: https://github.com/alexken/korzipcode/downloads

설치방법?
zip 파일을 다운받아 압축을 풀면 ‘한국 우편번호.dictionary’가 나오고 이것을 ~/Library/Dictionaries에 복사하면 끝.
(~/Library/Dictionaries을 파인더로 가기 힘들다면 Terminal.app에서 cd ~/Library/Dictionaries 하고 open . 으로 열 수 있음.)